2010-10-01 77 views
16

Hola, acabo de empezar a trabajar con Framework CodeIgniter. Mi estructura de directorio actual esCodeigniter: Cómo incluir archivos javascript

Demo(Project name) 
+System 
+Application 
    -Controllers 
     demo.php 
    +Model 
    -Views 
     view_demo.php 
-Js 
    ajax.js 
    jquery.js 

Dígame cómo incluir archivos .js en view_demo.php.

Gracias Raj

Respuesta

23

Debe usar el base_url() para incluir el archivo javascript en su VISTA.

Así, en el archivo view_demo.php:

<script type="text/javascript" src="<?php echo base_url();?>js/jquery.js" ></script> 
<script type="text/javascript" src="<?php echo base_url();?>js/ajax.js" ></script> 

que va a necesitar el ayudante URL cargada. Para cargar el ayudante que necesita para poner en su controlador demo.php:

$this->load->helper('url'); 

También puede cargar automáticamente en \ config \ autoload.php en la matriz de ayudantes.

Más información sobre base_url(): http://www.codeigniter.com/user_guide/helpers/url_helper.html#base_url

+0

Gracias Isern Palaus. Intenté esto pero base_url() hace eco de "http://example.com/" y da error de archivo no encontrado para esos archivos .js. ¿Alguna sugerencia? – Raj

+0

¿Puedes publicar tu controlador y tu vista? Si base_url() muestra tu url a la derecha. Tienes que configurar tu URL BASE en el archivo config.php en la configuración del directorio, ¡es muy importante! – ipalaus

+0

Gracias Isern. En realidad, no configuré config ['base_url'] en el archivo config.php en mi url del proyecto. Solo hice eso. – Raj

15

Usted no incluir archivos JS dentro del PHP, serían salida como etiquetas script en el código HTML que produce que se puede estar produciendo como salida desde el script PHP.

Hasta donde yo sé, no existe una función CodeIginiter incorporada para incluir esta salida como lo hay para CSS utilizando la función link_tag() proporcionada por CI. He agregado una función llamada script_tag() al archivo system/helpers/html_helper.php de CI. La función es:

if (! function_exists('script_tag')) { 
    function script_tag($src = '', $language = 'javascript', $type = 'text/javascript', $index_page = FALSE) 
    { 
     $CI =& get_instance(); 
     $script = '<scr'.'ipt'; 
     if (is_array($src)) { 
      foreach ($src as $k=>$v) { 
       if ($k == 'src' AND strpos($v, '://') === FALSE) { 
        if ($index_page === TRUE) { 
         $script .= ' src="'.$CI->config->site_url($v).'"'; 
        } 
        else { 
         $script .= ' src="'.$CI->config->slash_item('base_url').$v.'"'; 
        } 
       } 
       else { 
        $script .= "$k=\"$v\""; 
       } 
      } 

      $script .= "></scr"."ipt>\n"; 
     } 
     else { 
      if (strpos($src, '://') !== FALSE) { 
       $script .= ' src="'.$src.'" '; 
      } 
      elseif ($index_page === TRUE) { 
       $script .= ' src="'.$CI->config->site_url($src).'" '; 
      } 
      else { 
       $script .= ' src="'.$CI->config->slash_item('base_url').$src.'" '; 
      } 

      $script .= 'language="'.$language.'" type="'.$type.'"'; 
      $script .= ' /></scr'.'ipt>'."\n"; 
     } 
     return $script; 
    } 
} 

Luego, en su código PHP que puede hacer:

echo script_tag('content/js/jquery-1.4.2.js'); 
+1

También tengo una función como esa, http: //blog.ipalaus.es/codeigniter-html-helper-modificado-anade-javascript-facilmente, ¡es muy útil! :) – ipalaus

+0

RC, gracias por esto. Me gusta esta solución ... menos trabajo. :) –

+0

@ipalaus: ¡Gracias! Lo he usado en mi aplicación y ¡funciona genial! – Nirmal

0

sólo tiene que utilizar el estándar:

<script src="/path/to/file.js" type="text/javascript" charset="utf-8"></script> 

dentro de la vista! (No dentro de las etiquetas PHP, por supuesto.) No creo que el helper HTML CodeIgniter tenga ninguna función que pueda usar como alternativa a escribir el HTML usted mismo.

8

guardar mi javascript en un subdirectorio de mi carpeta de vista para la ruta del archivo es relativa al punto de vista de ser llamado y yo omita el base_url().

Otra técnica que adopté fue definir una matriz de scripts para incluir en mi controlador, luego recorrer la matriz en mi vista para incluirlos. Esto me permite incluir funciones especializadas js solo cuando sea necesario.

$data['scripts to load'] = array('edit.js','menu.js', 'contact.js'); 
$this->load->view('myview'); 

A continuación, en la vista

<?php foreach($scripts_to_load as $script):?> 
      <script type='text/javascript' src = 'my_js/<?php echo $script;?>'> 
<?php endforeach;?> 

Si tiene archivos de script que se cargan en cada página, se puede codificar en tu Pie de página como se describe en las otras respuestas.

+0

¿Debo configurar algo antes de hacer esto? – Raj

+0

Recuerde, CI es solo PHP. No estamos utilizando ninguna función de IC aquí más allá de cargar la vista. Es lo mismo que incluir archivos js con etiquetas de script. Esta técnica de matriz solo permite una carga más dinámica de archivos especiales de JavaScript. De esta forma, solo carga lo que necesita en cada página, manteniendo sus solicitudes HTTP más pequeñas. – kevtrout

+0

Me encanta esta solución. Realmente lo usaré para otra cosa pero es genial. Gracias. – Amir

Cuestiones relacionadas