KO3: Как работать с таблицами стилей и файлами сценариев - PullRequest
3 голосов
/ 14 мая 2010

Я использую Kohana 3 и это контроллер шаблонов. Мой основной контроллер шаблона сайта в настоящее время выглядит примерно так:

<?php defined('SYSPATH') or die('No direct script access.');

abstract class Controller_SiteTemplate extends Controller_Template
{
    public function before()
    {
        parent::before();

        // Initialize default template variables
        $this->template->styles           = Kohana::config('site.styles');
        $this->template->scripts          = Kohana::config('site.scripts');

        $this->template->title            = '';
        $this->template->content          = '';
    }
}

И затем в моем представлении шаблона я делаю:

<?php # Styles
foreach($styles as $file => $media) 
    echo HTML::style($file, array('media' => $media)).PHP_EOL ?>

<?php # Scripts
foreach($scripts as $file) 
    echo HTML::script($file).PHP_EOL ?>

Это работает хорошо. Проблема в том, что он требует добавления файлов стилей и скриптов в контроллер, которые не должны заботиться об этом. Это также создает трудности, если представления выполняются кем-то другим, кроме меня, поскольку им придется дурачиться с контроллером, просто чтобы добавить новую таблицу стилей или новый файл сценария. Как это можно сделать лучше?

Просто чтобы прояснить, меня интересует, как обращаться с таблицами стилей и сценариями для конкретных страниц. По умолчанию и для всего сайта у меня нет проблем с загрузкой из файла конфигурации или просто положить непосредственно в представление шаблона. Моя проблема в том, как правильно добавить пользовательские для определенных страниц.

Ответы [ 4 ]

1 голос
/ 15 мая 2010

Controller_Template на самом деле является местом для размещения логики для стилей и javascript, которые загружаются регулярно , поэтому он называется Controller_Template.

Вы должны добавлять / редактировать их через контроллеры, которыми вы расширяете шаблон Controller_Template. И в конце концов, каждый разработчик, работающий с Kohana, должен сначала узнать, как все работает.

Что касается встроенных скриптов / стилей, просто поместите их в файлы представлений, они встроенные, верно?

0 голосов
/ 02 октября 2010
    parent::before();

    // Initialize default template variables
    $this->template->styles           = Kohana::config('site.styles');
    $this->template->scripts          = Kohana::config('site.scripts');

    $this->template->title            = '';
    $this->template->content          = '';

    /* make your view template available to all your other views so easily you could
       access template variable
    */
    View::bind_global('template', $this->template);

в определенном виде используйте что-то вроде этого

   $template->scripts[] = 'js/example.js';

и в главном представлении (в виде шаблона) в конце у вас будет выбранный массив js из разных представлений

  <?php
   foreach($template->scripts as $file) { echo Html::script($file), "\n"; }
  ?>

используя этот подход, вы должны вызывать метод визуализации для каждого используемого представления (сделайте это поверх сценария представления шаблона), а затем вставлять переменные с отображаемым содержимым, как показано ниже

$top = View::factory('elements/top_nav')->render();
$content = $content->render();
$footer = View::factory('elements/footer')->render();

<div id="content"> 
        <?php echo $content;?>
    </div>
    <div id="meniu"><?php echo $top;?></div> you could add inline scripts as well, just add a $template->inline_scripts populate it with $template->inline_scripts = array('<script type="text/javascript">Cufon.replace(\'#meniu ul.topnav li a\');</script>'); and show it on template view script with a foreach($template->inline_scripts as $inline_script) { echo $inline_script."\n";};

`

0 голосов
/ 15 мая 2010

Почему вы просто не ставите их в поле зрения? - тогда, если кто-то еще работает над представлениями, он может видеть, какие таблицы стилей используются, и контролировать их, не касаясь контроллеров и т. д.

например:

<?php echo HTML::style("/css/style.css", array('media' => 'screen')).PHP_EOL ?>

Ian

0 голосов
/ 15 мая 2010

Один из способов сделать это - создать помощника, который будет хранить список ваших файлов CSS и Script. Этот помощник будет работать как Синглтон. Затем в нужное время вы можете сбросить эти ссылки внутри вашего шаблона.

е:

Код помощника:

<?php defined('SYSPATH') or die('No direct script access.');

class javascript {
    private static $files = array();

    public static function add($file)
    {
        self::$files[] = $file;
    }

    public static function get()
    {
        return self::$files;
    }
}

Код контроллера:

class Controller_Example extends Controller_Template {

    public function before()
    {
        ....
        javascript::add('js/jquery.js');
        javascript::add('js/jquery-ui.js');
        ....
    }
}

Код шаблона:

<html>
    <head>
        <?php foreach(javascript::get() as $javascript ?>
        <script type="text/javascript" src="<?= $javascript ?>"></script> 
        <?php endforeach; ?>
    </head>
...
</html>

Несколько улучшений для рассмотрения:

  • Создание базового класса, который будет служить шаблоном для версии CSS.
  • Добавление метода для добавления файлов сценариев, включенных в тело, необходимых для FBJS.

PS: это стратегия, одна из ведущих в проекте Kohana, рекомендованная однажды на IRC.

...