web-dev-qa-db-fra.com

Codeigniter: Comment inclure des fichiers javascript

Bonjour, je viens de commencer à travailler avec le cadre CodeIgniter. Ma structure de répertoire actuelle est

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

Dites-moi comment inclure les fichiers .js dans view_demo.php.

Merci Raj

18
Raj

Vous devez utiliser la base_url() pour inclure le fichier javascript dans votre VIEW.

Donc, dans le fichier 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>

Vous aurez besoin de l'URL helper chargé. Pour charger l’assistant, vous devez installer votre contrôleur demo.php:

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

Vous pouvez également charger automatiquement sur\config\autoload.php sur le tableau helpers.

Plus d'infos sur base_url (): http://www.codeigniter.com/user_guide/helpers/url_helper.html#base_url

25
ipalaus

Vous n'incluez pas de fichiers JS dans PHP, ils sont générés sous forme de balises de script dans le code HTML que vous produisez et que vous produisez éventuellement comme sortie du script PHP.

Autant que je sache, il n'y a pas de fonction CodeIginiter intégrée pour inclure cette sortie, comme c'est le cas pour CSS utilisant la fonction link_tag() fournie par CI. J'ai ajouté une fonction appelée script_tag() au fichier system/helpers/html_helper.php à partir de CI. La fonction est:

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;
    }
}

Ensuite, dans votre code PHP, vous pouvez faire:

echo script_tag('content/js/jquery-1.4.2.js');
20
RC.

Je stocke mon code javascript dans un sous-répertoire de mon dossier de vues afin que le chemin du fichier soit relatif à la vue appelée et j'omette la base_url () 

Une autre technique que j'ai adoptée consistait à définir un tableau de scripts à inclure dans mon contrôleur, puis à parcourir le tableau à mon avis pour les inclure. Cela me permet d’inclure des fonctions js spéciales uniquement lorsque cela est nécessaire.

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

Puis dans la vue

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

Si des fichiers de script sont chargés sur chaque page, vous pouvez les coder en dur dans la vue pied de page, comme décrit dans les autres réponses.

9
kevtrout

Consultez la bibliothèque de modèles CodeIgniter de Phil Sturgeon. Nous en utilisons une version modifiée au travail . http://philsturgeon.co.uk/code/codeigniter-template

1
Anthony Jack

La variable $ data peut parfois être perdue si vous avez des vues imbriquées et que vous ne la transmettez pas en tant qu'argument aux vues enfants/imbriquées.

J'ai trouvé une solution simple qui fonctionne très bien pour moi:

Dans votre fichier de vue actuel, vous configurez votre script comme suit:

$ this-> scripts [] = '/js/myscript.js';

dans votre pied de page ou dans le fichier {what.php}, vous insérez le code suivant:

    <?php
        if(isset($this->scripts))
        foreach($this->scripts as $script) :
     ?>
            <script src="my_asset_path/js/<?=$script;?>"></script>
    <?endforeach;?>

Si vous n'avez besoin que d'une partie du code javascript, vous pouvez toujours utiliser des fonctions anonymes telles que:

<?php
$this->RenderScript[] = function() {
?>
      <script>
        console.log('myjavascript code snippet');
      </script>
<?}?>

et en bas:

<?php
        if(isset($this->RenderScript))
            foreach($this->RenderScript as $script) {
                $script();
            }
    ?>
0
Bruno

Il suffit d'utiliser la norme:

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

dans votre vue! (Pas à l'intérieur des balises PHP, bien sûr.) Je ne pense pas que l'assistant HTML CodeIgniter possède des fonctions que vous pourriez utiliser comme alternative à l'écriture du code HTML vous-même.

0
chigley