¿Dónde pongo archivos de imagen, css, js, etc. en Codeigniter?

144

¿Dónde es aceptable poner carpetas css y carpetas de archivos de imagen? Estaba pensando dentro de la carpeta de vista? Sin embargo, el controlador siempre redirige la ruta a la url base, por lo que tengo que especificar la ruta en el archivo .html donde se encuentra, lo cual es redundante.

triq
fuente

Respuestas:

202

Tengo una configuración como esta:

  • solicitud
  • sistema
  • bienes
    • js
    • imgs
    • css

Luego tengo una función auxiliar que simplemente devuelve la ruta completa a esto dependiendo de mi configuración, algo similar a:

application / helpers / utility_helper.php:

function asset_url(){
   return base_url().'assets/';
}

Por lo general, mantendré rutinas comunes similares a esta en el mismo archivo y la cargaré automáticamente con la configuración de carga automática de codeigniter.

Nota: ayuda automática de URL para el base_url()acceso.

application / config / autoload.php:

$autoload['helper'] = array('url','utility');

Luego tendrá acceso a asset_url()todo su código.

Eddie
fuente
1
hola eddie, me pregunto dónde pones tu código de función ... ¿debería ponerlo en file_helper.php?
kebyang
3
Hola @KebyangBlabla. He actualizado mi respuesta con un poco más de información que debería ayudarte.
Eddie
10
Para obtener acceso a 'baseurl ()' también deberá incluir el ayudante 'url', de esta manera:$autoload['helper'] = array('url', 'utility');
Jeffrey
Una mejor opción podría ser tener una carpeta de activos en la carpeta raíz web (la mía es public_html) y luego CI en un directorio sobre la raíz web.
Nate Nolting
3
En caso de que otros sean como yo, para aclarar, puede acceder de esta manera <? = Asset_url ();?> Css / css.css
JonYork
50

No, dentro de la carpeta de vistas no es bueno.

Mira: debes tener 3 carpetas básicas en tu proyecto:

sistema // Este es el marco de CI no hay muchas razones para tocar estos archivos

aplicación // aquí es donde va tu lógica, los archivos que crean la aplicación ,

public // este debe ser tu documentroot

Por razones de seguridad, es mejor mantener su marco y la aplicación fuera de su raíz documental (public_html, htdocs, public, www ... etc.)

Dentro de su carpeta pública, debe poner su información pública, lo que los navegadores pueden ver, es común encontrar las carpetas: imágenes, js, css; entonces su estructura será:

|- system/
|- application/
|---- models/
|---- views/
|---- controllers/
|- public/
|---- images/
|---- js/
|---- css/
|---- index.php
|---- .htaccess
Juan jo
fuente
1
¿Qué es el index.php en la carpeta pública? es ese archivo 404? gracias
DeLe
Perdón por el retraso, pero por lo: T El archivo index.php será el archivo que capturará la solicitud y llamará al resto del marco.
Juan Jo
@Juan Jo ... Estoy usando CodeIgniter-3.0.6. No puedo encontrar ninguna carpeta llamada public. ¿Hay algún problema para agregar una carpeta con el mismo nombre?
Akhil Vijay
@AkhilVijay no lo encontrará en su carpeta codeigniter, la carpeta estará cuando la implemente en cualquier servidor
Anwar Hossain
la mejor manera de trabajar con codeigniter es hacer .htaccessque se elimine /index.php?y llamar a la carpeta pública conbase_url().'public/yourfolder';
Robert Blasco Villarroya
16

Así es como manejo los bienes públicos. Aquí uso el método Bootstrap de Phalcon PHP .

Estructura de carpetas

|-.htaccess*
|-application/
|-public/
  |-.htaccess**
  |-index.php***
  |-css/
  |-js/
  |-img/
  |-font/
  |-upload/
|-system

Archivos para editar

  1. .htaccess*

    Todas las solicitudes al proyecto se reescribirán en el directorio público / convirtiéndolo en la raíz del documento. Este paso garantiza que las carpetas internas del proyecto permanezcan ocultas a la vista del público y, por lo tanto, elimina las amenazas de seguridad de este tipo. - Phalconphp Doc

    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteRule  ^$ public/    [L]
        RewriteRule  (.*) public/$1 [L]
    </IfModule>
  2. .htaccess**

    Las reglas verificarán si el archivo solicitado existe y, si es así, no tiene que ser reescrito por el módulo del servidor web. - Phalconphp Doc

    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^(.*)$ index.php/$1 [QSA,L]
    </IfModule>
  3. index.php***

    Modificar la applicationruta y la systemruta como,

    $system_path = '../system';
    $application_folder = '../application';

Ahora usas la publiccarpeta comobase_url()."public/[YOUR ASSET FOLDER]"

Espero que esto ayude :)

Ijas Ameenudeen
fuente
¿Probó el código anterior, creo que hay un error en la última línea, redirige todas las solicitudes a /publicpor qué base_url ()."public/[...? Debería ser justo base_url ()."/[YOUR ASSET FOLDER]".
Kerkouch
12

Usualmente pongo todos mis archivos así en una carpeta de "activos" en la raíz de la aplicación, y luego me aseguro de usar un Asset_Helper para apuntarme a esos archivos. Esto es lo que sugiere CodeIgniter.

conexión ciudadana
fuente
7

Nadie dice que necesita modificar .htacces y agregar el directorio en la condición de reescritura. He creado un directorio "público" en el directorio raíz junto con "sistema", "aplicación", "index.php". y edité el archivo .htaccess así:

RewriteCond $1 !^(index\.php|public|robots\.txt)

Ahora solo tiene que llamar <?php echo base_url()."/public/yourdirectory/yuorfile";?> Puede agregar el subdirectorio dentro del directorio "público" como desee.

Kreker
fuente
Llevo un millón de años de retraso, pero si alguien está leyendo esto, esta respuesta fue mi solución inicial, pero si está administrando el acceso a través de hosts virtuales, creo que es una mejor idea señalar el host virtual a la carpeta pública y mantener la configuración de .htaccess. Voto de todos modos porque esta respuesta me señala la solución
Vertig0
5

Independientemente de dónde coloque el archivo CSS, simplemente puede usar el ayudante CodeIgniter "html" llamado link_tag (). Aplicaría este ayudante algo como esto:

echo link_tag('folder/subfolder/stylesheet.css');

Depende de usted ubicar el archivo CSS en el lugar más apropiado (en su opinión). Tendría que cargar automáticamente el ayudante "html" o cargarlo por separado para usarlo.

La gente sigue sugiriendo el uso de base_url () para lograr esto, pero en realidad no es realmente la forma "CodeIgniter" de hacerlo (creo que esta pregunta tiene algunos duplicados). Eso funcionará, pero una de las razones para usar un marco es usar las funciones prefabricadas dentro de él.

Hay muchos ayudantes en codeigniter para hacer este tipo de cosas.

Tostadas de queso
fuente
4

agregue una carpeta a cualquier nombre, p. ej. público y agregue el archivo .htaccess y permita la escritura desde todo lo que significa, en esta carpeta todos sus archivos y todas las carpetas no darán error ¡ Acceso prohibido! úsalo así

<link href="<?php echo base_url(); ?>application/public/css/style.css" rel="stylesheet" type="text/css"  />
<script type="text/javascript" src="<?php echo base_url(); ?>application/public/js/javascript.js"></script>
Sandeep Mehra
fuente
4

Estoy usando la última versión de CodeIgniter 3.1.0. La estructura de la carpeta es:

  • sistema
  • solicitud
  • guía del usuario
  • bienes
    • imágenes
    • js
    • css

Ahí es donde debe colocar las imágenes, los archivos css y js dentro de la carpeta de activos.

más cool
fuente
3

Yo uso la siguiente estructura de carpetas:

application 
system 
static
    admin
        js
        css
        images
    public
        js
        css
        images
    uploads
        original
        thumbs
Escorpión
fuente
2

(Soy nuevo en Codeigniter, así que no sé si este es el mejor consejo)

Mantengo archivos disponibles públicamente en mi carpeta pública. Es lógico que estén allí, y no quiero usar Codeigniter para algo para lo que no necesito usarlo.

El árbol de directorios se ve así:

  • /solicitud/
  • /público/
  • / public / css /
  • / public / img /
  • / public / js /
  • /sistema/

Los únicos archivos que guardo en / public / son codeigniter's index.php y mi archivo .htaccess:

RewriteEngine On
RewriteBase /

RewriteRule ^css/ - [L]
RewriteRule ^img/ - [L]
RewriteRule ^js/ - [L]

RewriteRule ^index.php(.*)$ - [L]
RewriteRule ^(.*)$ /index.php?/$1 [L]
Anthony Scaife
fuente
2

puede poner la carpeta css dentro de la carpeta assest (asígnele cualquier nombre) en el directorio de su proyecto como:

- ci_app
- application 
- views      
- assets 
  - css 
    - style.css 

... cuando desee cargar ese archivo en una página, puede usar la función base_url () de esta manera: <head> <link rel='stylesheet' href='<?php echo base_url();?>assets/css/style.css'> </head> y está seguro de agregar base_url de su proyecto en el archivo config.php de esta manera:

$config['base_url'] = 'http://localhost/ci_app';
Rabab Sh
fuente
0

Hola, nuestra estructura es como Aplicación, sistema, user_guide

cree un nombre de carpeta con recursos cerca de todas las carpetas y luego dentro de esta carpeta de activos cree css y javascript y la carpeta de imágenes ponga todos sus css js dentro de las carpetas

ahora ve a header.php y llama a css así.

<link rel="stylesheet" href="<?php echo base_url();?>assets/css/touchTouch.css">
  <link rel="stylesheet" href="<?php echo base_url();?>assets/css/style.css">
  <link rel="stylesheet" href="<?php echo base_url();?>assets/css/camera.css"> 
Piyush Dhanotiya
fuente
-2

El link_tag()ayudante es claramente la forma de hacer esto. Coloque su css donde generalmente pertenece, en raíz_sitio / css / y luego use el ayudante:

De los documentos de CodeIgniter ...

echo link_tag('css/mystyles.css');

Salida

<link href="http://example.com/css/mystyles.css" rel="stylesheet" type="text/css" />
Stephen C
fuente