Как лучше всего контролировать свои агностики? - PullRequest
1 голос
/ 30 марта 2011

У меня есть следующий код в контроллере:

$this->viewdata->scripts = array(
    'http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js',
    'jstree/jquery.jstree-1.0-rc2.js',
    'jquery.hotkeys-0.8.js',
    'tags/index.js'
);

$this->viewdata->styles = array(
    'reset.css',
    'tags.css'
);

На мой взгляд, у меня есть foreach, чтобы обернуть каждый из перечисленных файлов javascript / css в соответствующий тег HTML. Я использую мастер шаблон / макетный подход; Я просто заполняю любые / все поля в главном шаблоне и в итоге получаю свою веб-страницу. Поэтому для меня хорошо, чтобы все мои javascript / css были настроены в контроллере, чтобы мои <script> s и <link> s могли быть в <head>, где они принадлежат.

Однако недавно меня осенило, что javascript и css не принадлежат контроллеру, потому что отображаемое представление может быть изменено и может иметь очень разные требования javascript / css.

В основном я хочу сохранить только один главный шаблон для удобства обслуживания, но также удалить все ссылки на view / javascript / css из контроллеров. Что может помочь мне сделать это?

Спасибо.

Ответы [ 5 ]

2 голосов
/ 30 марта 2011

Я не использую CI, но я регулярно использую Zend и Symfony.В обеих этих системах есть некоторый помощник по активам, который вы можете вызвать из представления для добавления файлов css или js в стек.Затем вы вызываете аналогичного помощника для вывода этих файлов в вашу голову.например, в symfony:

View:

<?php use_stylesheet('/css/mycss.css'); ?>
<?php use_stylesheet('/css/components.css'); ?>
<?php use_javascript('/js/site.js'); ?>

Layout:

<head>
  <?php include_javascripts(); ?>
  <?php include_stylesheets(); ?>
</head>

Я думаю, что что-то подобное будет относительно легко реализовать в CI, если его нетиз коробки ...

1 голос
/ 30 марта 2011

Я понимаю, что вы, вероятно, не используете cakePHP из этого примера кода, но! У них есть отличная методология решения этой проблемы. Это параметр для встроенных стилей, скриптов и т. Д.

В вашем теге есть что-то вроде:

<?= $scripts_for_layout ?>
<?= $styles_for_layout ?>

И в самом файле просмотра у вас есть такой код:

<?php $this->Html->script('jquery', array('inline' => true)); ?>

Таким образом, фактический файл представления визуализируется, сохраняет все сценарии в каком-то массиве, а затем отображает файл макета (верхний и нижний колонтитулы, что у вас).

Файл макета берет сохраненные массивы и рендерит их в переменную $ scripts_for_layout.

Довольно гениально и прекрасно работает. Я предлагаю сделать что-то подобное.

Ссылка: http://book.cakephp.org/view/1589/script

1 голос
/ 30 марта 2011

У меня был проект, в котором я делал то же самое, хотя и менее красноречиво. Я думал, что уменьшу объем информации, отправляемой клиенту, «динамически» загружая js и css. Я использовал контроллеры для определения массивов имен файлов и циклов в своих представлениях, чтобы включить их.

Я помню, что был только один файл js, который я не заканчивал, включая все время.

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

  1. JS / CSS не принадлежат контроллерам
  2. php не принадлежит представлению

Это грязное решение, вы должны просто найти свой собственный путь.

0 голосов
/ 30 марта 2011

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

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

Проверьте следующую ссылку при создании базового контроллера:
http://philsturgeon.co.uk/blog/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY

Обратите внимание, что в CI2 эти базовые контроллеры должны находиться в каталоге / application / core / .

0 голосов
/ 30 марта 2011

Действительно ли ваш проект или команда достаточно велики, чтобы SoC вызывал беспокойство?Или, по крайней мере, стоит того, чтобы задать этот вопрос и ждать ответа?Ожидаете ли вы, что ваши представления и файлы css / js изменятся когда-нибудь позже?

Если вы ответили утвердительно и стоит изменить свой дизайн, то вы можете включить в свои представления сами CSS и js.Будет много общего, поэтому создайте представления, в которых есть только общие файлы css и js, и включите этот вид в другие представления.Вам не нужно ничего сложного здесь.Или, по крайней мере, я бы не стал.

...