+117.90
Рейтинг
299.07
Сила

Вадим

  • avatar avadim
  • 0
В комплекте с плагином идет три виджета в качестве демки
  • avatar avadim
  • 0
Да, выкладки, в основном, теоретические. Но вот число подключаемых скомпилированных шаблонов при рендеринге страницы при нынешнем подходе (порядка 40 файлов) — это вполне себе реальная цифра. И то, что их число уменьшится — это тоже однозначно так. Как это реально отразится на скорости — хз

Чтоб проверить все это на практике, нужно сделать две верстки — «кусочную» и «блочную» — одного и того же дизайна. Причем, не просто тест, а реальную верстку, чтоб по полной все отработало в обоих случаях. Только так проверить можно. Но захочет ли кто-то на это угрохать кучу времени? ;)

Но тут еще есть плюсы, правда, не такие очевидные: напр., будет, как минимум, один файл (макет), в котором видна вся HTML-структура страницы. И все шаблоны будут иметь правильную DOM-структуру, т.е. не будет такого, что какой-то тег открывается в одном шаблоне, а закрывается в другом, что нередко нехилого гемора добавляет.
  • avatar avadim
  • 0
Мысль понял. Но согласно синтаксису Smarty, если шаблон начинается с директивы {extends ...}, то в этом шаблоне все, что лежит вне блоков просто игнорируется. Поэтому избавиться от объявления блоков просто так не получится.

И вот жесткой привязки нет. Напр., в наследуемом шаблоне можно и так прописать:
{extends file=login.tpl}
{block name="b-content"}...{/block}
{block name="b-sidebar"}...{/block}

и так:
{extends file=login.tpl}
{block name="b-sidebar"}...{/block}
{block name="b-content"}...{/block}

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

Это уже мое предложение — сделать стандартом жесткую связку HTML-блоков и Smarty-блоков в изначальном макете.
  • avatar avadim
  • 0
У меня нет готового решения. Но ведь цепочка экшенов тоже может быть какой угодно длинной, и эта проблема успешно решается. Так и тут наверняка можно найти решение.
  • avatar avadim
  • 0
Я этот механизм блоков не сам придумал, это «родной» механизм Smarty, который введен в третьей версии (еще три года назад). Я лишь попытался объяснить, как это можно более эффективно использовать.

Безымянные блоки в Smarty не предусмотрены, поэтому блоки нужно объявлять явно, как в шаблонах-родителях, так и в шаблонах-потомках.

Что касается названий самих блоков в моих примерах, то они тоже не «от балды» даны, это влияние методологии БЭМ, о которой рассуждали до этого. Поэтому, если говорить шире, я постарался совместить тут два понятия «блоки» — и от БЭМ, и от Smarty. Т.е. это термин «двойного назначения», и класс БЭМ-блока совпадает с именем Smarty-блока:
<section class="b-content">
  {block name="b-content"}
  {/block}
</section>

Здесь <section class=«b-content»> — это для CSS-классов,
а {block name=«b-content»} — для наследования шаблонов.

Пример в топике сильно упрощен. А на деле практически все теги типа <section class=«b-...»> должны внутри себя содержать Smarty-блоки {block name=«b-...»}, где класс секции и имя блока совпадают
  • avatar avadim
  • 0
Можно явно в самих шаблонах задавать, а можно при вызове метода Smarty:
$smarty->display('extends:register.tpl|register1.tpl|register2.tpl');
  • avatar avadim
  • 0
М? Так я ж там в комментарии и пример привел. Попробуй объяснить, что непонятно, тогда я попробую разъяснить в ответ :)
  • avatar avadim
  • 0
Пункт 2 я не понял
  • avatar avadim
  • 2
Если опустить логические моменты (что тоже важно), то, как минимум, блочная верстка с наследованием должна работать быстрее, т.к. Смарти в этом случае собирает (в идеальном варианте) один итоговый компилированный шаблон. А в случае с ленточной версткой компилируется каждый включаемый шаблон по отдельности, и при выводе они все последовательно инклудятся.

При этом надо понимать, что при нынешнем подходе почти в каждом инклуд-шаблоне есть куча своих инклудов. И в итоге вывод одного, казалось бы, скомпилированного шаблона — это чтение с диска нескольких десятков файлов, которые нужно инклудить друг в друга.

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

Аргумент? ;)
  • avatar avadim
  • 0
не совсем понял, про блочную и ленточную
Собственно, я сам уже догадался, то ленточная, раз все чисто на базе нынешнего девелопер-скина делается.

Но вообще, под блочной в данном случае я имею ввиду «блочную с наследованием», т.е. когда используются блоки и механизм наследования Smarty.

А ленточная — это нынешний подход, когда есть много-много кусочков шаблона, а потом они собираются в один окончательный шаблон инклюдами:
{include file="..."}
{include file="..."}
{include file="..."}
{include file="..."}
{include file="..."}
  • avatar avadim
  • 0
Стандартизацией CSS-классов решил не заморачиваться? А структура шаблонов какая — блочная или ленточная, как сейчас в ЛС?
  • avatar avadim
  • 3
Однажды у великого скульптора Микеланджело спросили о том, каким образом ему удается создавать такие восхитительные скульптуры. Он сказал в ответ: «Я беру камень, а затем просто отсекаю все лишнее».

Так что бери ЛС и отсекай лишнее
  • avatar avadim
  • 0
А, повторюсь, соотношение донейта на скачано сидит возле 0.
Ради интереса прикинул сейчас: суммарное количество скачиваний моих бесплатных плагинов только из каталога ЛС — более 20 тыс. Сумма донейта через каталог ЛС — 30$. Итого — 0.0015$ на скачивание :)
  • avatar avadim
  • 0
А в чем именно комфортность заключается?))
Трудно сказать. Наверное, в первую очередь, в том, что понимаю и принимаю концепцию движка (именно концепцию, а не техническую реализацию, к которой часто бывают претензии). Почему-то я очень быстро понял, как устроен движок, и что и где нужно менять/добавлять/убирать, чтоб получить тот результат, который нужен. А так же то, почему иногда нельзя получить желаемого результата )

И это все настолько хорошо укладывается в голове, что ответ на вопрос «Как сделать это?» рождается, как правило, гораздо быстрее, чем при работе с другими движками.
  • avatar avadim
  • 0
Так же постоянные конфликты с плагинами. WP в этом плане просто идеально спланирован для конечного юзера
Я, конечно, давно не делал на WP серьезных проектов, но в свое время этих конфликтов в Вордпрессе нахлебался выше крыше. А уж когда возникала необходимость что-то свое допилить-доработать, не трогая ядра, то такие пляски с конями начинались, что мама не горюй
  • avatar avadim
  • 2
Вопрос, думаю, не в том, что нельзя найти ответы на какие-то вопросы (самостоятельно ли, в инете ли, в общении ли), а в том, комфортно ли с каким-то движком работать или нет. Я про ЛС узнал, когда очень неплохо понимал нутро WP, и дня три уже плотно ковырялся с Джумлой, проектируя новый сайт. Скачав и поковырявшись с ЛС пару часов, я понял, что мне работать с ним комфортно, чего я не мог сказать ни про Джумлу, ни про Друпал.

Конечно, у меня много претензий к ЛС и сейчас, и неоднократно приходилось какие-то вещи делать через анус, но работать с ним мне все равно комфортней, чем со многими другими движками
  • avatar avadim
  • 1
Но многие из нас продолжают создавать проекты на ЛС...
Сначала хотел категорически не согласиться. Но прочитал в конце:
Для НЕпрограммиста и НЕверстальщика лс — головная боль
И подумал, что, возможно, в этом что-то есть. Я не очень верстальщик, но программист — перешел с WP на LS
  • avatar avadim
  • 0
Из документации Smarty:
{* display value of page from URL ($_GET) http://www.example.com/index.php?page=foo *}
{$smarty.get.page}

{* display the variable "page" from a form ($_POST['page']) *}
{$smarty.post.page}

{* display the value of the cookie "username" ($_COOKIE['username']) *}
{$smarty.cookies.username}

{* display the server variable "SERVER_NAME" ($_SERVER['SERVER_NAME'])*}
{$smarty.server.SERVER_NAME}

{* display the system environment variable "PATH" *}
{$smarty.env.PATH}

{* display the php session variable "id" ($_SESSION['id']) *}
{$smarty.session.id}

{* display the variable "username" from merged get/post/cookies/server/env *}
{$smarty.request.username}
  • avatar avadim
  • 0
Либо PHP обнови до 5.3, либо админку поставь свежую
  • avatar avadim
  • 0
А о чем? Если юзер имеет OpenID-аккаунт, а ряд сайтов на ЛС имеют плагин регистрации/авторизации через OpenID, то этим как раз решается та проблема, о которой речь идет в топике. Разумеется, она решается именно для тех сайтов, которые реализовали у себя регистрацию через OpenID.

Кто то скажет есть OpenID, я например не хоче вешать на свой блог 1000 и один плагин...
Я не люблю вешать на свой сайт сотни плагинов...
Будем дальше уменьшать число плагинов, чтоб авторизация через OpenID на сайте работала? ;)