2013-03-28 2 views
4

У меня есть шаблон Yii, что структура является:

  1. Включить файлы CSS в
  2. эха $ содержания сразу после
  3. Включать Javascript файлы (например, JQPlot) после $ содержания

Что я хотел бы сделать, это добавить пользовательское сочетание Javascript/PHP-кода после включения всех файлов Javascript. Я знаю, что это можно сделать, просто добавив код в шаблон.

Но у меня есть много страниц с пользовательским кодом JS/PHP, и я бы хотел включить только конкретный код для этой страницы, чтобы избежать длительного времени загрузки.

Могу ли я создать новый элемент, который работает как $ content, но он будет включать, например, "js.php" из той же папки View, что и "index.php"? «Js.php» будет в каждой папке просмотра, мне нужен специальный код и содержать js/php-код для этой конкретной страницы.

Спасибо за помощь!

+2

Проверьте это: http://www.yiiframework.com/forum/index.php/topic/918-multiple-content-place-holder-variables-for-layout/ – jfrej

+0

Я бы использовал очень настраиваемый портлет в ваше место –

ответ

0

клипы ваш лучший выбор, так как @jfrej предполагает, указав вам на тему форума, где обсуждаются клипы.

В обычных условиях каждый контроллер связан папку, в которой все ее виды размещены, и это тот случай, который вы хотите включить в конце макета (это, как они refered, а не шаблоны) некоторый контент PHP + Javascript, который является общим для всех действий в контроллере.

Я бы переопределил CController::afterRender() способ захвата содержимого для вас клип; позволяет назвать ваш клип controller_content:

afterRender(string $view, string &$output) 
    $this->beginClip('controller_content'); 
    // output here any content you want to capture into your clip 
    // e.g. renderPartial, echo, etc. 
    ... 
    $this->endClip(); 
    parent::afterRender($view, $output); 
} 

Затем, в макете, вы бы сделать ваше клип после того, как все вещи, которые всегда есть, например:

// register your CSSs 
// output $content variable 
// register Javascript 
... 
<?= $this->clips['controller_content'] ?> 

Конечно, существуют различные способы для вы создадите свой контент клипа. Здесь я переопределил метод CController::afterRender(), но вы также можете использовать фильтры, поведение или любой другой подход, который наилучшим образом соответствует вашим потребностям.

+0

Спасибо, что я получил его сейчас! :) –

0

Вы можете попробовать:

Yii :: приложение() -> clientScript-> registerCssFile (Yii :: приложение() -> BaseUrl '/ CSS/example.css.);
Yii :: app() -> clientScript-> registerScriptFile (Yii :: app() -> baseUrl. '/ Css/example.js');

Вы можете вызвать его из контроллера

Смежные вопросы