Smarty plugins

I have several Smarty plugins, but only one, I suppose, would be insterested to people.

Combine plugin

Combine plugin allows concatenating several js or css files into one. It can be useful for big projects with a lot of several small files.

Why should I use it

First issue - you don't have modularity. For example, you have heavy page with tons CSS files or JS files. Each CSS file concerns to relevant block on the page. Much easier to edit one small CSS file than one big and long file. But you have a lot of queries to the server. This plugin allows to combine several files to one and resolve this issue.

Second issue related to browser and proxy caching. When you edit your files, they have the same name and therefore they could adhere in browsers or proxies cache very long. Sometimes developers add something after question sign. It looks like style.css?ver=12.This method is ugly, but works. Sometimes is not. In my experience I saw proxy with extreme cache configuration policies - they have ignored headers from the server and do not allow updating CSS and JS files with the same name during a month or week. My plugin resolves these problems. It will give unique name for output file when at least one of files from the bundle will be upgraded. It can help you to bring actual interface and functionality to your users.

Usage examples

Template inline example Smarty 3

<script type="text/javascript" 
src="/{combine input=array('/js/core.js','/js/slideviewer.js') output='/js/big.js' age='30'}" 
charset="utf-8"></script>

Smarty 2 example

PHP code


$js_filelist = array('/js/core.js','/js/slideviewer.js');
$smarty_object->assign('js_files', $js_filelist);

Template code

<script type="text/javascript" 
src="/{combine input=$js_files output='/js/big.js' age='30'}" 
charset="utf-8"></script>

Plugin have 3 parametrs:

  • input - must be an array, containing list with absolute pathes to files. In Smarty 3 it can be inline array, for Smarty 2 you will need to pass from yours controller a variable, which will contains this array.
  • output - absolute path to output file. Directory must be writable to www daemon (Usually chmod 777 resolve this problem :)
  • age - value of seconds between checks when original files were changed. By default it is 3600 - one hour. You can omit this parameter.

You can download or clone plugin from the repository on GitHub.

git clone https://github.com/zoonman/smarty-plugins.git

It was tested on site with 40000 pageviews per day and works perfectly.

Comments:

ShureG:
2013-11-14 09:03:54
Автор помоги :) кладу свой плагин в папку: smarty/plugins
далее в шаблоне прописал:



сохранил всеэто дело... и мне выдает ошибку: Uncaught --> Smarty Compiler: Syntax error in template бла бла бла бла unknown tag "combine"
pergaliner:
2014-02-23 07:43:19
Автор можешь помочь ? я столкнулся с 2 проблемами!

1. использую smarty 3, прописал все js файлы, указал куда сохранять, но в исходном коде добавляются непонятные цифры? (их я точно не указывал... ) то есть путь до сжатого файла должен быть: mysite.ru/compile/file.js (скрипт сюда его и сохраняет - проверял прямым доступом), а в шаблоне страниц пишется: mysite.ru/1393140329/compile/file.js - то есть непонятные лишние цифры... как исправить?

2. Судя по сгенерированному файлу- он не минифицирован, как сделать чтобы скрипты еще сжимались автоматически?
zoonman:
2014-02-23 16:24:04
Очень странно, что создается папка. По идее должно быть что-то вроде src="/js/big_20131101204619.js". А как выглядит ваш путь к оригинальному файлу?

Минификация сейчас не поддерживается. Возможно добавить внешнюю команду с поддержкой минификатора. Например uglifyjs, https://github.com/mishoo/UglifyJS или тотже YUI Compressor http://yui.github.io/yuicompressor/

pergaliner:
2014-02-24 08:15:22
zoonman - папка не создается, сохраняется файл правильно, неправильно создается ссылка на сгенерированный файл.

еще раз, более понятно:
в TPL шаблоне я прописываю так:

файл нормально сохраняется в папке compile, а вот в шаблоне выводится как: mysite.ru/1393140329/compile/combine.js - тоесть перед папкой compile - добавляются цифры (UNIX время...) так вот как их убрать? (
pergaliner:
2014-02-24 08:15:46
блин код не добавляется(
zoonman:
2014-02-25 01:48:13
Залейте его на pastebin.org. Я посмотрю по возможности. Вообще, очень странно, интересна конфигурация вашего сервера.
pergaliner:
2014-02-25 08:45:01
http://pastebin.com/Ni9k3F97 и что именно за конфигурация нужна?
Виктор:
2014-02-28 09:36:56
Автору респект, но плагин не хочет генерировать правильную ссылку на сгенерированный файл. , выводится /1384832556/cache/admin/combine/admin_combine_20131119074236.js. Файл создается. Если убрать первый слеш в параметре output, ссылка верная но файл не создается. Подскажите где подправить??
Виктор:
2014-02-28 09:38:06
Автору респект, но плагин не хочет генерировать правильную ссылку на сгенерированный файл. {combine input=$jsLib output='/cache/admin/combine/admin_combine.js' age='30'}, выводится /1384832556/cache/admin/combine/admin_combine_20131119074236.js. Файл создается. Если убрать первый слеш в параметре output, ссылка верная но файл не создается. Подскажите где подправить??
Виктор:
2014-02-28 11:44:33
Проблему решил закомментив строчку

if (file_exists($_SERVER['DOCUMENT_ROOT'].$params['cache_file_name'])) {
$last_mtime = file_get_contents($_SERVER['DOCUMENT_ROOT'].$params['cache_file_name']);
//echo $last_mtime;
}
zoonman:
2014-03-08 13:30:48
Прошу прощения за долгое отсутствие. Виктор правильно решил проблему. Я сделал исправления в репозитарии, так что теперь все должно встать на места.

For commenting you should proceed to enter or register on the site.