#39708 Dr2005alex:
Так же напомню, что в Котонти уже есть зачатки механизма чанков — это «слоты меню».
Да они есть, но в том виде что они сейчас их использование крайне не удобно. Я лично ни разу не использовал. Почему? а никакого узабилити.Мне проще этот кусок закинуть в файл. Потому что, как не крути туда вставляешь код уже подготовленный в редакторе. А нужна некая стандартизация, некие шаблоны, чанки и т.д.
Что я имею ввиду? Мы к примеру можем использовать чанки в том варианте что я предложил. А их уже можно вставлять в слоты. Или сделать механизм работы со слотами. А так как есть сейчас не удобно.
Повторюсь...
Я дописал обработку тегов чанков в шаблонизатор и создал папку chunk в шаблоне (место нахождение папки фиксированное, и работа в ядре не нужна.). Там можно накидать варианты кусков кода шаблона. менюшки, кнопки, формы и т.д. или целые части. А в основном шаблоне уже вставлять теги чанков.
Как вариант можно для слотов прикрутить селекторы чанков. Тоесть выбрал слот меню, а в списке рядом выбрал понравившийся чанк менюшки... и по аналогии с осталным.
Да, я понял, что ты сделал. Я о том, что это получается решение узкопосталвнной задачи, причем с созданием дополнительных сущностей. Получается частичное решение проблемы — мы городим огород и не решаем основных задач.
Я не говорю о текущем варианте слотов, как замены. Я говорю о расширении/изменении/использовании принципа механизма слотов с учетом различных пожеланий.
Давайте определимся с задачами которые в целом решает абстрактный (пусть основанный на МодИкс) механизм чанков:
- Дать возможность администратору настраивать определенные блоки сайта редактируя куски шаблонов (чанки)
- Использовать регулярный синтаксис шаблонов внутри чанка (обработка вложенных блоков и тегов)
- Иметь возможность простой вставки чанка в текущий шаблон (вызов по имени)
- [в перспективе] иметь возможность вызвать чанк с параметрами
Что мы хотим иметь в дополнение:
- Возможность брать содержимое чанков из файлов
Что нам дает принцип «слотов»:
- возможность хранить чанки в БД с автоматической загрузкой внутри скрипта (нет лишних обращений к файлам)
- возможность включать в шаблон произвольный блок указав по его имени (п.3)
- возможность редактировать содержимое через админку (п.1)
- [с небольшим дополнением] использовать регулярный синтаксис шаблонов внутри чанка (п.2)
Чего ему не хватает:
- возможности загружать содержимое из файла (решаемо на уровне плагина)
- вызывать чанк с параметрами (но тут и твой вариант не катит, т.к. потребует изменения CoTemplate, о чем смотри ниже)
Узкие места:
- в текущей реализации слоты грузятся заранее и парсятся в определенной точке скрипта, что делает не возможным использовать внутри них некоторые определенные в шаблоне теги (это опять же решается — тоже смотри ниже о CoTemplate)
Как я вижу (условный итоговый) вариант/алгоритм:
- основные данные чанков хранятся в системном конфиге
- имя и содержимое чанков может быть изменено
- содержимое чанка парсится как включаемый шаблон
- содержимое ченка вставляется в основной шаблон по вызову определнного вида тега (например {CHUNK.GROUP.SUBGROUP.CUSTOM_NAME})
- чанку можно задать переменные (тут надо думать как, возможно так же расширив и стандартный метод для передачи нескольких параметров)
- загрузка файлов реализуется либо прямым выбором в админке при настройке чанков (примерно как ты расписал), либо автоматически (фолбеком, если чанка с таким именем нет).
«О CoTemplate»
Кроме прочего, если уж опять «расширять» CoTemplate, то я бы приделал универсальный механизм, позволяющий расширить шаблоны произвольным синтаксисом, за счет вызова сторонних функций. Т.е. сторонний плагин регистрирует в классе маркеры (метки) которые он хочет парсить и назначает на их обработку свои функции, а шаблонизатор при обработке шаблона проверяет список зарегистрированных, и при необходимости вызывает указанные функции отдавая содержимое тега. Тогда расширение шаблонизатора, в случае необходимости будет как раз-два.