2008-10-07 8 views
17

Estoy empezando con CodeIgniter, y no estoy seguro de a dónde deberían ir cosas como css, js e imágenes. Fuera, toda la carpeta del sistema parece estar bien, pero eso significa que todo está separado. En el interior significa que los filepaths son más largos, y me preocupa que pueda estropear las cosas. ¿Cuál es la mejor práctica en este tema?¿Dónde deben ir los activos en un proyecto de código de encendido?

Respuesta

15

generalmente pongo carpetas separadas en el nivel raíz, por lo que terminan con una estructura de directorios como esto:

/system 
/css 
/js 
/img 

parece funcionar para mí - cuando se utiliza site_url(url), la URL que genera es de la root, para que pueda usar site_url('css/file.css') para generar URL en sus hojas de estilos, etc.

+0

Ah, eso tiene sentido. Quería poder usar site_url, así que esto tiene sentido. Gracias! –

+0

¿Eso significa que mantiene la carpeta de su sistema dentro de un directorio público? –

+1

@Blowski Sí. Sé que no es una buena práctica, pero no creo que sea necesariamente un problema, especialmente si usa .htaccess para cerrar el acceso. –

1

Odio tener tantos directorios en el nivel raíz, entonces uso/public y uso htaccess para reescribir/scripts en/public/scripts, etc. .

+0

¿Podría publicar su mod_rewrite? – bswinnerton

1

Encuentro que es mejor mantener los activos en el nivel raíz. Puede usar <?=base_url()?> para hacer eco de la raíz completa del sitio. En el archivo de configuración, configura la raíz del sitio web. Esta afirmación simplemente se hace eco de eso.

Debido a esto, se puede utilizar incluye así:

<link href="<?=base_url()?>/css/style.css" rel="stylesheet" type="text/css" /> 

cualquier parte del código, y todavía conseguirá http://example.com/css/style.css.

1

base_url()/css/name.css

+0

base_url() en realidad incluye la barra inclinada final por lo que desea: base_url(). 'css/name.css'; –

+0

ok.ok.thanks. Lo sé pero me olvidé de ponerlo –

1

Para utilizar el ayudante site_url (url) de esta manera primero debe configurar Apache mod_rewrite (o equivalente) para eliminar el segmento de la URI index.php .

De lo contrario, el método site_url agrega index.php a la URL que probablemente arruinará las rutas de acceso a sus activos si los tiene en el directorio base como se indicó anteriormente.

Aquí está la documentación de CodeIgniter en la eliminación de index.php de la URI:

http://codeigniter.com/wiki/mod_rewrite/

6

Personalmente, puedo extraer el directorio application fuera del directorio system y hacer que un hermano a system. Luego creo un directorio de proyecto en public_html (www) donde muevo index.php y almaceno mis activos públicos.

Supongamos que el proyecto en el que está trabajando se llama projekt. En el directorio raíz para public_html (www) crear un directorio llamado CISYSTEM, y dentro de ese directorio crear un directorio de la versión que está utilizando, 202, etc. 210

/CISYSTEM 
    /202 
    /210 
    /another_CI_version 
/projekt_application 
    /models 
    /views 
    /controllers 
    /private_assets 
/public_html 
    /projekt 
     index.php 
     .htaccess 
     css 
     img 
     js 
     lib 

La belleza de esta estructura de directorios se añade otra capa de seguridad y hace que sea más fácil actualizar/intercambiar su núcleo de CI. Además, no se supone que debas realizar cambios en el núcleo: tener un solo directorio donde se almacena tu núcleo y tener todos los proyectos de referencia lo mantiene seco.

Todo este cambio de directorio requiere que reenrute algunas cosas. Afortunadamente, CodeIgniter lo hace fácil: todos los cambios se pueden realizar en el archivo index.php.

abierto index.php y redireccionar un par de cosas:

Cambio: $system_path = 'system';

Para: $system_path = '../../CISYSTEM/210';

Cambio: $application_folder = 'application';

Para: $application_folder = '../../projekt_application';


Además, veo a mucha gente hablando de usar site_url() en las otras respuestas. Recomiendo una manera menos detallado de la utilización de site_url() ... usted no tiene que llamar cada vez que si se hace uso de elementos de HTML <base>:

<base href="<?= site_url();?>">

basta con incluir que en su solicitud de <head> y que pueda llamar a los controladores directamente ... como en:

<a href='controllername/functionname'>Some Action</a>

Saludos

Cuestiones relacionadas