Forums / National / Russian / Идеи / Chunks

Куски кода в шаблоне

Macik
#39716 2014-09-01 12:35
#39708 Dr2005alex:

Так же напомню, что в Котонти уже есть зачатки механизма чанков — это «слоты меню». 

 Да они есть, но в том виде что они сейчас их использование крайне не удобно. Я лично ни разу не использовал. Почему? а никакого узабилити.Мне проще этот кусок закинуть в файл. Потому что, как не крути туда вставляешь код уже подготовленный в редакторе. А нужна некая стандартизация, некие шаблоны, чанки и т.д. 

Что я имею ввиду? Мы к примеру можем использовать чанки в том варианте что я предложил. А их уже можно вставлять в слоты. Или сделать механизм работы со слотами. А так как есть сейчас не удобно.

Повторюсь... 

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

Как вариант можно для слотов прикрутить селекторы чанков. Тоесть выбрал слот меню, а в списке рядом выбрал понравившийся чанк менюшки... и по аналогии с осталным.  

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

Я не говорю о текущем варианте слотов, как замены. Я говорю о расширении/изменении/использовании принципа механизма слотов с учетом различных пожеланий.

 

Давайте определимся с задачами которые в целом решает абстрактный (пусть основанный на МодИкс) механизм чанков:

  1. Дать возможность администратору настраивать определенные блоки сайта редактируя куски шаблонов (чанки)
  2. Использовать регулярный синтаксис шаблонов внутри чанка (обработка вложенных блоков и тегов)
  3. Иметь возможность простой вставки чанка в текущий шаблон (вызов по имени)
  4. [в перспективе] иметь возможность вызвать чанк с параметрами

Что мы хотим иметь в дополнение:

  1. Возможность брать содержимое чанков из файлов 

 

Что нам дает принцип «слотов»: 

  • возможность хранить чанки в БД с автоматической загрузкой внутри скрипта (нет лишних обращений к файлам)
  • возможность включать в шаблон произвольный блок указав по его имени (п.3)
  • возможность редактировать содержимое через админку (п.1)
  • [с небольшим дополнением] использовать регулярный синтаксис шаблонов внутри чанка (п.2)

Чего ему не хватает:

  • возможности загружать содержимое из файла (решаемо на уровне плагина)
  • вызывать чанк с параметрами (но тут и твой вариант не катит, т.к. потребует изменения CoTemplate, о чем смотри ниже)

Узкие места:

  • в текущей реализации слоты грузятся заранее и парсятся в определенной точке скрипта, что делает не возможным использовать внутри них некоторые определенные в шаблоне теги (это опять же решается — тоже смотри ниже о CoTemplate)

 

Как я вижу (условный итоговый) вариант/алгоритм:

  • основные данные чанков хранятся в системном конфиге 
  • имя и содержимое чанков может быть изменено 
  • содержимое чанка парсится как включаемый шаблон
  • содержимое ченка вставляется в основной шаблон по вызову определнного вида тега (например {CHUNK.GROUP.SUBGROUP.CUSTOM_NAME}) 
  • чанку можно задать переменные (тут надо думать как, возможно так же расширив и стандартный метод для передачи нескольких параметров)
  • загрузка файлов реализуется либо прямым выбором в админке при настройке чанков (примерно как ты расписал), либо автоматически (фолбеком, если чанка с таким именем нет). 

 

«О CoTemplate»

Кроме прочего, если уж опять «расширять» CoTemplate, то я бы приделал универсальный механизм, позволяющий расширить шаблоны произвольным синтаксисом, за счет вызова сторонних функций. Т.е. сторонний плагин регистрирует в классе маркеры (метки) которые он хочет парсить и назначает на их обработку свои функции, а шаблонизатор при обработке шаблона проверяет список зарегистрированных, и при необходимости вызывает указанные функции отдавая содержимое тега. Тогда расширение шаблонизатора, в случае необходимости будет как раз-два.

https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F