Дефолтный PHP шаблон

+59
3783
Итак, благодаря моей некоторой настойчивости в 1.10.3 появилась возможность работы с различными шаблонизаторами. Вследствие чего появилась возможность использовать PHP шаблоны. Этой записью я создаю новый тег: "php шаблон". Наглядно оценить преимущества PHP шаблона вы можете по графику нагрузки из панели хостинга:
Иллюстрация

Преимущества:

1) Так как во второй ветке инстанта будут использоваться именно PHP шаблоны — вам будет проще на неё мигрировать!);
2) Снижение нагрузки (видно по графику);
3) Отсутствие лишней программной ступени — компиляция;
4) Наивысочайшая скорость выполнения:
Время вывода модуля меню (в этот момент уже не происходит ничего, кроме собственно вывода модуля):
  1. Smarty:
  2. 0.0142 сек. - с компиляцией
  3. 0.0017 сек. - с временно закэшированным компилем
  4.  
  5. PHP:
  6. 0.0003 сек - всегда
  7.  
На 550% быстрее даже по сравнению со скомпилированным файлом!
Генерация главной страницы:
  1. Smarty (уже с кэшем):
  2. Время генерации страницы: 0.0672 с.
  3. Потребление памяти: 6,54 Мб
  4.  
  5. PHP:
  6. Время генерации страницы: 0.0421 с.
  7. Потребление памяти: 5,75 Мб
Напомню, что все скомпилированные файлы исчезают в одно мгновение при, например простой смене юзером шаблона на сайте через модуль. Также, если кто-то вдруг захочет вам немного насолить, то может автоматически как бы сменять шаблон, даже если модуль выключен и ваш хостинг/сервер может нечаянно прилечь.
Помимо этого, снижение нагрузки означает, что вы можете сэкономить на расходах на покупку более мощного (дорогого) места для размещения вашего сайта.

Плюшки!

В комплекте с шаблоном идёт модифицированный php шаблонизатор. В него включены все необходимые для вывода функции и имеется небольшая деталь, на которой я бы хотел остановиться.
На форуме люди часто спрашивают, как им перенести вывод плагина, например куда нибудь в другое место. Долго ли до греха вы решите вывести содержание статьи в отдельном модуле в сайдбаре или ещё что нибудь в таком духе.
На этот случай имеется возможность назначить содержимое модулю ещё до вывода откуда угодно, главное, чтобы до вывода (display()).
У вас есть два варианта:
1. Присвоить значение во время назначения переменных для другого шаблона:
  1. cmsPage::initTemplate('components', 'com_content_view')->
  2. assign('pagetitle', $pagetitle)->
  3. assign('имя переменной в шаблоне', 'содержимое', 'имя файла шаблона без расширения')->
  4. assign('subcats', $subcats_list)->
  5. display('com_content_view');
2. Либо вообще в любом месте через статичную альтернативу:
  1. phpLokaTpl::assignS('имя переменной в шаблоне', 'содержимое', 'имя файла шаблона без расширения');
Как вы можете заметить, синтаксис аналогичен стандартному assign(), но появился третий параметр, в котором указывается, в каком именно файле выводить эту переменную.
Затем, вы можете, например, создать шаблон для модуля — module_somename.php, добавить в него эту переменную и создать модуль в админке с этим шаблоном. Готово! Аналогичным образом вы можете присвоить значение для переменной в плагине и вывести, например похожие статьи, где угодно. Можно ещё дальше пойти и поставить евент в функции display(), где будет возможность переназначить любою переменную, но это явно лишнее для обычного обывателя.

Установка

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

Хотите себе такой шаблон?

Я предлагаю услугу по переводу вашего Smarty шаблона на PHP.
Стоимость услуги: от 500 рублей.
Если до сего момента вы делали вклады на R267380710141 и Z218725974703, то можете рассчитывать на дивиденды в виде 50% скидки.
0
Реклама Реклама #
+1
SpideR SpideR 8 лет назад #
Демо бы... zst
0
picaboo picaboo 8 лет назад #
демо дефолтного шаблона?
0
SpideR SpideR 8 лет назад #
Интересует именно - "Наивысочайшая скорость выполнения" и "На 550% быстрее".
+1
picaboo picaboo 8 лет назад #
без отладки не увидеть. я на денвере погонял - да, формирует быстрее чем смарти, но когда смарти из кеша работает, то примерно цифры равны +- 10% смарти проигрывает. На глаз увидеть 0,22 против 0,18 - не различить

Я вот сильно репу почесал увидев внутренности шаблона. Никто не говорил что смарти это легко, на шаблон на пхп - это реально тяжко. Для тех у кого уровень выше среднего.
+3
Fuze Fuze 8 лет назад #
по демо вы ничего не поймете, только по графику нагрузки судить.
Шаблон, написанный на чистом php априори будет работать гораздо быстрее. А при наличии высокой посещаемости здорово сэкономит ресурсы сервера.
+1
reload reload 8 лет назад #
Предложение в следующем релизе снести шаб смарти если есть более "экономичное решение"
или добавить второй дефлотный на php)
Это так, к размышлениям, если будет желание)
+1
reload reload 8 лет назад #
Я теперь представляю как "фекать" будит на будующие шабы написанные на смарти))
Типо, каменный век! никакой оптимизации!...

Студиям следует задуматься!) перед выпуском "новых" шаблонов)

picaboo, спасибо!
0
reload reload 8 лет назад #
*будут!
0
picaboo picaboo 8 лет назад #
ну я рад за вас если он по силам окажется. На смарти шаблон не каждый верстальщик осилит, а на чистом пхп - вообще проблема будет.

Убирать смарти нельзя, каждому по силам и по умению надо. И так большинство дальше "поменять ксс" не уходит, так как не осилить переверстку. Да даже вон некоторые студии не могут дальше морды переверстать на смарти, а вы хотите полностью на пхп перейти.
0
reload reload 8 лет назад #
picaboo:
На смарти шаблон не каждый верстальщик осилит, а на чистом пхп - вообще проблема будет.
Тогда про снос шаба на смарти в релизе, беру слова обратно(

Думал что тот кто со смарти может подружится тот и с php подружится - ноги ведь все рано от php растут)
0
picaboo picaboo 8 лет назад #
не совсем. смарти легче, к нему есть хелп с разбором функций и куча готовых. а тут надо писать функцию самому а потом в шаблоне вставлять.
0
DeeMon DeeMon 8 лет назад #
Ещё года 4 назад фекал на смарти, терпеть его не могу если честно... smile
-1
picaboo picaboo 8 лет назад #
мануал бы и примеры. хоть пару. что бы понять логику. в формате вот так мы извращадись со смарти, а вот как теперь просто это на пхп
0
oll oll 8 лет назад #
В smarty было {if}- в php if , было {$cat.title} - стало echo $cat['title'], было {$_LANG.TITLE} - стало echo $_LANG['TITLE'], пропал литерал {literal} - вот и весь мануал!

Спасибо lokanaft! Высший класс!

PS//В чем ажиотаж и боязнь шаблона на php? Глазами посмотрите на код , а головой вникните. Что smarty , что php , в чем проблема для верстальщика?
0
picaboo picaboo 8 лет назад #
проблемы нет, есть недостаток образования :)

было

Код PHP:
  1. {$comment|truncate:30}
теперь надо писать
Код PHP:
  1. <?php echo self::truncate(self::stripTags($comment['content']), 90); ?>
при этом еще объявив функцию в шаблонизаторе.

Код PHP:
  1. public static function truncate($string, $length = 80, $etc = '...', $break_words = false, $middle = false)
просто?

и это на каждый чих.
0
lokanaft lokanaft 8 лет назад #
В таких случаях читаем последние абзацы в посте.
0
oll oll 8 лет назад #
zst :
Код PHP:
  1. substr(strip_tags($comment['content']), 0, 80)
-1
picaboo picaboo 8 лет назад #
дык я ж разве спорю что я олень, но страшно же блин :))
+1
r2 r2 8 лет назад #
как-то вы не равноценно сравнили
для
Код PHP:
  1. {$comment|truncate:30}
аналог будет
Код PHP:
  1. <?php echo substr($comment, 0, 30); ?>
не на много страшнее имхо
0
lokanaft lokanaft 8 лет назад #
Вероятно picaboo имел ввиду:
Код PHP:
  1. {$comment.content|strip_tags|truncate:90}
Что сейчас в php шаблоне выглядит так:
Код PHP:
  1. <?php echo self::truncate(self::stripTags($comment['content']), 90); ?>
Обе функции работают точно также и имеют те же параметры, что и в смарти. Так совместимость сохраняется полностью)
0
Def Def 8 лет назад #
вон печенюка и с миллионной в месяц аудиторией справляется и на смарти) так что при грамотном подходе все будет хорошо.
0
lokanaft lokanaft 8 лет назад #
Это не значит, что владелец отказался бы от неминуемого снижения нагрузки)
0
picaboo picaboo 8 лет назад #
там одни боты, живых почти нет. поэтому нагрузка низкая
0
reload reload 8 лет назад #
Печенюка оптимизирована по самое "немогу" - там вероятно работы проделано намного больше и сложнее чем просто на php перейти)
Многим наверное на php будет проще перейти...

Хотя мне кажется что вопрос шаблонизатора, это наверное из сферы "религии" и наверное уже не один год идут обсуждения о целесообразности - что лучше, а что хуже...

В любом случае появившаяся гибкость очень к месту, для движка думаю это не маленький плюс...
0
lokanaft lokanaft 8 лет назад #
Знаете, у меня на обычном хостинге просмотров в месяц куда больше, чем 1М, все сайты на инстанте без кэширования и ничего не страдает. И всё равно, все эти сайты я переведу на php шаблоны, что позволит отказаться от услуги на увеличенную нагрузку.
+2
lezginka.ru lezginka.ru 8 лет назад #
ничего не понял, но чуЙствую что-то хорошее :))
lokanaft, спс за беспокойство о нас смертных :)
+2
Майкл Майкл 8 лет назад #
У lokanaft всё делается на совесть.
-2
Авас Авас 8 лет назад #
Не видим никакого смысла в шаблонизаторах - жизнь они, как по мне - не упрощают, а нагрузку лишнюю дают это точно...
0
lokanaft lokanaft 8 лет назад #
Так вот и я о том же! Теперь у вас появилась возможность делать шаблоны на чистом php без всяких там smarty! Не этого ли вы так долго ждали?
+2
Fuze Fuze 8 лет назад #

Cтудия Sitestroi, facepalm

+2
Димитриус Димитриус 7 лет назад #
Профессиональным проектам может и мешают.
Но новичкам они отлично помогают. Да и проекты есть разного уровня.
Так, что я с Вами, Cтудия Sitestroi, не согласен.
0
Smith Smith 8 лет назад #
"Я почему такой злой раньше был, потому что велосипеда у меня не было")
+1
Sonat Sonat 8 лет назад #
А будут ли кешироваться php-шаблоны?
0
lokanaft lokanaft 8 лет назад #
Зачем им кэшироваться? Им не нужен кэш. Они и так php. Это smarty по своим чудо алгоритмам переделывается в один ему понятный php код, который надо закэшировать, чтобы хоть как то снизить его нагрузку. Для него по сути и существует папка кэша.
0
Sonat Sonat 8 лет назад #
Для него по сути и существует папка кэша.
А какже кеши модулей?
0
lokanaft lokanaft 7 лет назад #
Кэш модуля - это сохранённый код его вывода и не важно чем он был сделан, smarty или сразу php.
0
stipp stipp 7 лет назад #
Если исп. функций кэшировать (memcached например), то почему бы и нет.
+1
Марат Марат 7 лет назад #
С огромным удовольствием плюсую. Отличная работа.
Ну и большой плюс разработчикам системы за возможность использования собственного шаблонизатора.
Ну а php-шаблонизатор, это мечта. Быстрее пхп только чистый html )))
Надеюсь, воспользуюсь вашими наработками. Давно мечтал о шаблоне на пхп )
Денис Васильевич Денис Васильевич 7 лет назад #
Комментарий удален
+3
Сергей Петрович Сергей Петрович 7 лет назад #
Перелопатил все ТПЛьники!!! Это выше моего понимания!! ))))))))))))
Медаль надо человеку выдать!! Или титул какой-нибудь!!!
0
eoleg eoleg 7 лет назад #
Так он же инопланетянин. Так что ничего особенного.
+4
lokanaft lokanaft 7 лет назад #
Нет, я человек. Просто я так одеваюсь)
0
alfaclub alfaclub 7 лет назад #
А у меня в УК фотки не выводятся, а они есть (как суслики))))
Т.е. маленькие есть, а на странице товара слева нету.
При редактировании они стоят, есть ссылка на фотку - сохраняю - нету!!!

Всё остальное вроде работает - спасибо.
0
lokanaft lokanaft 7 лет назад #
Всмысле? У меня в ук всё отлично - код тот же, что и по дефолту, сами собой они исчезнуть не могут.
0
alfaclub alfaclub 7 лет назад #
По дефолту - порядок (всё видно, всё отображается).
Переключаю на пхп шаблон.
По пхп шаблону - список товаров в порядке http://www.shpulya.com/catalog/1003
Сам товар http://www.shpulya.com/catalog/item3.html фотки пропадают.
На сайте всё по дефолту - ждали обновлений...
0
alfaclub alfaclub 7 лет назад #
Кажется разобрался: в com_catalog_item.php стр 18 стоит !empty - если убрать - вроде работает...
0
lokanaft lokanaft 7 лет назад #
Не ту версию залил в файлы. Извините)
0
alfaclub alfaclub 7 лет назад #
Может ещё что где есть?
Это только один "косяк"?
Использовать на "боевом" сайте уже можно?
0
lokanaft lokanaft 7 лет назад #
Больше таких мест нет)
0
alfaclub alfaclub 7 лет назад #
smoke отлегло... Спасибо!!
0
Викторыч Викторыч 7 лет назад #
lokanaft, когда я подключаю ваш шаблон, в профиле слетают табы, принимают такой вид:

""


Проверял на двух компах, под Денвером, устанавливал чистую 1.10.3, потом добавлял php-шаблон, результат один. При переключении на дефолтный вкладки в профиле появляются.
Поправим? )
0
lokanaft lokanaft 7 лет назад #
Когда я и другие товарищи используем этот шаблон, то такой картины не наблюдается.
Доходчиво? )
+1
Викторыч Викторыч 7 лет назад #
Доходчиво. Спасибо.
0
Reborn Reborn 7 лет назад #
Доходчиво)))
Добавьте 'CBOX_SLIDESHOWSTOP', 'CBOX_SLIDESHOWSTART' и вкладки появятся? и colorbox заработает.
Тот есть в template.php это:
Код PHP:
  1. $this->addHeadJsLang(array('CBOX_IMAGE','CBOX_FROM','CBOX_PREVIOUS','CBOX_NEXT','CBOX_CLOSE','CBOX_XHR_ERROR','CBOX_IMG_ERROR'));
Замените на это:
Код PHP:
  1. $this->addHeadJsLang(array('CBOX_IMAGE','CBOX_FROM','CBOX_PREVIOUS','CBOX_NEXT','CBOX_CLOSE','CBOX_XHR_ERROR','CBOX_IMG_ERROR', 'CBOX_SLIDESHOWSTOP', 'CBOX_SLIDESHOWSTART'));
-1
Reborn Reborn 7 лет назад #
как всегда все порезало...
0
Endroid Endroid 7 лет назад #
Давно пора было это сделать. Хорошая работа.

С приведенным дефолтным шаблоном заметил один баг - не раскрывается меню

""
0
lokanaft lokanaft 7 лет назад #
Так, вот демо шаблона http://instant.lokanaft.ru , если вы находите баг, но на этом сайте его нет, то ничем не могу вам помочь.
0
Endroid Endroid 7 лет назад #
Сейчас специально проверил на чистой установки 1.10.3 на хостинге. Шаблон _default_ - полет нормальный, а _default_php_ - меню не раскрывается. Версия php 5.3
0
lokanaft lokanaft 7 лет назад #
Скиньте урл в личку, раз на хостинге.
0
Vlad Vlad 7 лет назад #
Чистая установка 1,10,3 + inmaps не загружаются карты, ни на странице объекта, ни на главной странице компонента. И вкладки на странице объекта не корректно отображаюся. В отстальном всё отлично.+
-1
Reborn Reborn 7 лет назад #
Сркипт модуля голосование останавливался после (' )и не выполнялся.
В \public_html\templates\_default_php_\modules\mod_polls.php
нужно убрать 2 пробела.
Код PHP:
  1. ...core.alert(result.text, '
  2. <?php echo $_LANG['NOTICE']; ?>!');...
  3. ...core.alert(result.text, '
  4. <?php echo $_LANG['ATTENTION']; ?>!');...
--->>>
Код PHP:
  1. ...core.alert(result.text, '<?php echo $_LANG['NOTICE']; ?>!');...
  2. ...core.alert(result.text, '<?php echo $_LANG['ATTENTION']; ?>!');...
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.