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

+59
4.42K
Итак, благодаря моей некоторой настойчивости в 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% скидки.
+1
SpideR SpideR 11 лет назад #
Демо бы... zst
0
picaboo picaboo 11 лет назад #
демо дефолтного шаблона?
0
SpideR SpideR 11 лет назад #
Интересует именно - "Наивысочайшая скорость выполнения" и "На 550% быстрее".
+1
picaboo picaboo 11 лет назад #
без отладки не увидеть. я на денвере погонял - да, формирует быстрее чем смарти, но когда смарти из кеша работает, то примерно цифры равны +- 10% смарти проигрывает. На глаз увидеть 0,22 против 0,18 - не различить

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

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

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

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

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

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

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

было

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

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

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

Cтудия Sitestroi, facepalm

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

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

""


Проверял на двух компах, под Денвером, устанавливал чистую 1.10.3, потом добавлял php-шаблон, результат один. При переключении на дефолтный вкладки в профиле появляются.
Поправим? )
0
lokanaft lokanaft 11 лет назад #
Когда я и другие товарищи используем этот шаблон, то такой картины не наблюдается.
Доходчиво? )
+1
Викторыч Викторыч 11 лет назад #
Доходчиво. Спасибо.
0
Reborn Reborn 10 лет назад #
Доходчиво)))
Добавьте '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 10 лет назад #
как всегда все порезало...
0
Endroid Endroid 11 лет назад #
Давно пора было это сделать. Хорошая работа.

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

""
0
lokanaft lokanaft 11 лет назад #
Так, вот демо шаблона http://instant.lokanaft.ru , если вы находите баг, но на этом сайте его нет, то ничем не могу вам помочь.
0
Endroid Endroid 11 лет назад #
Сейчас специально проверил на чистой установки 1.10.3 на хостинге. Шаблон _default_ - полет нормальный, а _default_php_ - меню не раскрывается. Версия php 5.3
0
lokanaft lokanaft 11 лет назад #
Скиньте урл в личку, раз на хостинге.
0
Vlad Vlad 10 лет назад #
Чистая установка 1,10,3 + inmaps не загружаются карты, ни на странице объекта, ни на главной странице компонента. И вкладки на странице объекта не корректно отображаюся. В отстальном всё отлично.+
-1
Reborn Reborn 10 лет назад #
Сркипт модуля голосование останавливался после (' )и не выполнялся.
В \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']; ?>!');...

Еще от автора

Ajax подгрузка контента для двойки
Ну что, товарищи, сегодня вы своими руками сможете сделать ajax подгрузку записей контента.
AJAX подгрузка комментов для двойки
Как следует из названия, дополнение ограничивает полный вывод всех комментов записи и позволяет пользователю при необходимости посмотреть следующие.
ContentWatch - проверка уникальности добавляемого контента для icms2
Компонент позволяет проверять уникальность текста с помощью сервиса Content-Watch.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.