Я работаю над проектом php / codeigniter, и я думаю о создании контроллера специально для обработки возвращаемых настраиваемых файлов css и javascript.
В предыдущих проектах я включил внешние файлы CSS и JS в заголовки моих файлов просмотра, но они по существу должны были быть статическими, поскольку они были просто отправлены как обычные ресурсы сервером. Для моего следующего проекта я подумываю о том, чтобы использовать контроллер и, по сути, создавать «файлы просмотров» CSS / Javascript, которые загружаются контроллером.
Ребята, что вы думаете? Это хороший подход? Есть ли общепринятый лучший способ сделать это?
Используя контроллер для 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 и все связанные зависимости, чтобы служить тому, что должно быть статическим контентом.
Я не знаю, есть ли «официальный» способ сделать это, я обычно разбил страницу на разные точки зрения, одним из которых является страница. Если вы делаете что-то вроде
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>
Что-то, что я делал раньше, есть у меня стандартный список «всегда используемых» css / js-файлов, тогда каждый контроллер может включать свои собственные. Внутри контроллера я установил массив «includes» для 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";