Зарегистрировать внешний файл javascript в представлении Codeigniter для добавления к <head>при выводе страницы? - PullRequest
2 голосов
/ 05 августа 2011

Возможно ли при создании представления в Codeigniter использовать команду для регистрации внешнего файла Javascript для включения в <head> при записи окончательного вывода?

У меня есть основной вид, который содержит много меньших подвидов (боковая панель, реклама, другие элементы управления и т. Д.).внутри одного или нескольких из этих меньших представлений я хочу включить некоторые функциональные возможности JavaScript.Чтобы сохранить модульность, я бы хотел «включить» этот Javascript в меньшие вложенные представления (без фактической записи его на html-страницу в позиции этого вложенного представления (я хочу, чтобы это было в заголовке)).Возможно ли это?

Ответы [ 2 ]

3 голосов
/ 08 августа 2011

В итоге я перевесил и реализовал свой собственный класс Output. (Помещается в папку «application / core /»)

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class MY_Output extends CI_Output
{
    private $JavascriptFiles = array();
    private $JavascriptTags = "";

    private $CSSFiles = array();
    private $CSSTags = "";

    //Add a javascript file to the array.
    public function javascript($File = null)
    {
        if($File && !in_array($File ,$this->JavascriptFiles))
        {
            $this->JavascriptFiles[] = $File;
        }
    }

    //Add a css file to the array.
    public function css($File = null)
    {
        if($File && !in_array($File ,$this->CSSFiles))
        {
            $this->CSSFiles[] = $File;
        }
    }

    //Build the javascript tags
    private function buildtags()
    {
        if(!empty($this->JavascriptFiles))
        {
            foreach($this->JavascriptFiles as $File) {
                $this->JavascriptTags .= "<script type=\"text/javascript\" src=\"$File\"></script>\n";
            }
        }

        if(!empty($this->CSSFiles))
        {
            foreach($this->CSSFiles as $File) {
                $this->CSSTags .= "<link type=\"text/css\" href=\"$File\" rel=\"stylesheet\" media=\"all\" />\n";
            }
        }
    }


    //Override the main output function that sends content to the browser
    //and slap in the javascript and css where we need it.
    function _display($output = '')
    {

        $this->buildtags();
        $this->final_output = str_replace("{VIEW_SPECIFIC_JAVASCRIPT}", $this->JavascriptTags, $this->final_output);
        $this->final_output = str_replace("{VIEW_SPECIFIC_CSS}", $this->CSSTags, $this->final_output);

        // SNIP----
        // Rest of method code follows from here
}

Я добавил теги {VIEW_SPECIFIC_JAVASCRIPT} и {VIEW_SPECIFIC_CSS} в мой <head> вид в соответствующих местах.

Затем я могу добавить javascript и css в <head> из любого представления в моем приложении, используя следующие методы внутри представлений:

$this->output->javascript("/js/mycoolscript.js");
$this->output->css("/js/mycoolcss.js");

Simple.

1 голос
/ 05 августа 2011

Рассматривали ли вы использование библиотеки шаблонов?http://williamsconcepts.com/ci/codeigniter/libraries/template/

Позволяет использовать JavaScript либо в заголовке на основе контроллера, либо в строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...