2012-01-13 16 views
6

Buen día, estoy aprendiendo CodeIgniter con Smarty. Mi archivo CSS se almacena enCodeIgniter + CSS

/App01/application/views/css/main.css 

Para enlazar mi CSS que utilizo:

<link rel="stylesheet" type="text/css" href="http://localhost:88/APP1/application/views/css/layout.css" media="screen" /> 

Pero CSS no se aplica en mi página. Cuando abro CSS URL, recibo un mensaje:

Forbidden 
You don't have permission to access /APP1/application/views/css/layout.css on this server. 

Por favor, ¿qué estoy haciendo mal? Me gustaría mantener mi CSS junto con la vista porque en el futuro me gustaría aprender a crear múltiples temas y creo que el CSS debería mantenerse dentro de la carpeta del tema.

¿Puedo reemplazar la ruta URL al archivo CSS con alguna variable Smarty para que cuando mueva mi aplicación no necesite cambiar manualmente la ruta URL CSS en las plantillas?

¡Gracias de antemano! Vojtech

+3

+1 para iniciar un hilo con Good Day. – SpaceBeers

Respuesta

12

Cualquier cosa en la carpeta /application de CodeIgniter se debe considerar fuera de los límites. Para la mejor seguridad, en realidad se debe considerar mantener /application por encima de su carpeta www o public_html en una estructura como esta:

– application 
    – controllers 
    – models 
    – views 
    – ... 
– system 
    – core 
    – libraries 
    – ... 
– public_html 
    – index.php 

Esto hace que el código de aplicación más segura.

Te aconsejo que crees tus scripts y CSS del lado del cliente en una carpeta pública. Por ejemplo, public_html/css y public_html/js. O bien, si desea ir por la ruta del tema, posiblemente nombre cada archivo CSS como el nombre del tema, por lo que tendría css/theme1.css y css/theme2.css.

Si su sitio siempre funcionará de la raíz de un dominio, a continuación, puedes utilizar:

<link rel="stylesheet" type="text/css" href="/css/layout.css" media="screen" /> 

Pero si usted siente que va a estar en movimiento todo tipo de cosas, y luego considerar preparando la ubicación del archivo en su controlador antes de enviarlo a Smarty.

$this->load->helper('url'); 
$this->smarty->assign('css_file', base_url("css/theme1.css")); 

que devolverá:

http://localhost/app1/css/theme.css 

o lo que su URL es CodeIgniter.

+0

Muchas gracias por sus consejos Thomas, ¡me ayudó mucho a entender! – Vojtech

+0

De nada. –

0

Intente agregar un enlace simbólico a la carpeta raíz del documento de sus servidores. (www/public_html/htdocs)

cd (document root folder) 
ln -s (/App01/application/views/css) . 

De esta manera puede acceder a la carpeta css y mantener la estructura actual.

1

Esto ayudará a vincular css a codeigniter.

El link_tag se utiliza para vincular recursos y puede usar la función helper. Por ejemplo html helper, url helper, email helper, etc.

En su controlador tiene que crear una función algo así como

<?php 
class Home extends CI_Controller{ 
    public function helper(){ 
     $this->load->helper('html');  
     $this->load->view('index'); 
    } 
} 
?> 

Y su index.php en view carpeta palabra clave use link_tag.

<html> 
<head> 
<title></title> 
<?php echo link_tag('App01/application/views/css/main.css');?> 
</head> 
<body> 
    <?php 
    ....... 
    ?> 
</body> 
</html>