Использование контроллера для обработки возвращаемых настроенных файлов CSS и Javascript с codeigniter - PullRequest
2 голосов
/ 07 июля 2011

Я работаю над проектом php / codeigniter и думаю о создании контроллера специально для обработки возвращаемых настроенных файлов css и javascript.

В предыдущих проектах я включал внешние файлы CSS и JS в заголовки моих файлов представлений, но по сути они должны были быть статическими, поскольку они просто отправлялись сервером как обычные ресурсы.Для моего следующего проекта я подумываю об использовании контроллера и, по сути, сделаю «представления» моих файлов CSS / Javascript, загружаемых контроллером.

Что вы, ребята, думаете?Это хороший подход?Есть ли общепринятый лучший способ сделать это?

Ответы [ 3 ]

1 голос
/ 07 июля 2011

Что-то, что я сделал раньше, это то, что у меня есть стандартный список «всегда используемых» файлов css / js, тогда каждый контроллер может включать свои собственные. Внутри контроллера я устанавливаю массив «include» для js / css, затем представление заголовка проверяет массив и выполняет его развертывание. Таким образом, все необходимые файлы js / css указываются в теге head.

Пример с контроллера:

$data['includes']['js'] = array('<script type="text/javascript" src="' . base_url() . 'assets/js/script.js"></script>');

Пример из вида:

if(isset($includes['js'])) echo implode("\n", $includes['js']) . "\n";
1 голос
/ 07 июля 2011

Используя контроллер для вашего js / css, вы загружаете массу ненужных вещей для каждого запроса файла. Класс безопасности, класс ввода, маршрутизатор, исключения и т. Д.

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

Лучше всего объединить файлы, свернуть их и записать содержимое в статический файл, но тогда они не будут динамическими. Тем не менее, они, вероятно, не должны быть.

Еще одна вещь, которую вы можете сделать, это использовать php-файл для объединения статических файлов и ссылаться на него в теге <link> (screen.php). Простой пример CSS:

<?php
header('Content-type: text/css');
$files = array(
    'css/reset.css',
    'css/screen.css',
    'css/typography.css',
);
foreach ($files as $file)
{
    readfile($file);
}

В любом случае вам следует обновить имя файла, возможно, с помощью строки запроса, чтобы избежать обслуживания старого кэшированного файла. Пример: /screen.css?version=2

Я использую $this->load->view() иногда для динамических js, но только для встроенных тегов сценария (например, динамическая конфигурация WYSIWYG). Это позволяет передавать переменные в файл «view», а также избегать проблем с кешем.

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

1 голос
/ 07 июля 2011

Я не знаю, есть ли «официальный» способ сделать это, я обычно делю страницу на разные виды, одним из которых является заголовок страницы.Если вы делаете что-то вроде

class mycontroller extends CI_Controller {

function index()
{
   $data['css'] = 'style1.css';
   $data['js'] = 'custom.js';
   $this->load->view('head',$data);
   $this->load->view('body');
   $this->load->view('foot')  // where I close the </html> tag, for example
}

}

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

<!DOCTYPE>
<html>
<head>
<?php echo link_tag(base_url().'css/'.$css);?>
<script type="text/css" src="<?php echo base_url();?>js/<?php echo $js;?>"></script>
</head>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...