Куски кода в шаблоне
Dr2005alex |
|
---|---|
Только хотел написать, что не хватает выхова сторонних функций в парсере, это упростило бы задачу. Полностью согласен. Добавлено 6 минуты спустя: А вот с хранением в базе данных всех чанков, мне кажется не совсем приемлемым. Какой объем данных тогда будет выгружать БД при загрузке? Используя CoTemplate все кешируется и выводится как обычно.. вот только о передаче параметров я не думал еще надо ли? Я не имел ввиду копию модикса, а некое более удобное использование кусков шаблона .. WebKaa.ru - Cotonti Relax
|
|
This post was edited by Dr2005alex (2014-09-01 12:54, 10 years ago) |
Macik |
|
---|---|
Прочитав вышенаписанное, чуть уточню — я не предлагаю взять именно «слоты» как таковые, я предполагаю отдельный плаг (модуль здесь вряд ли нужен), который будет по аналогии со слотами хранить чанки в основном конфиге и так же просто их редактировать. Можно добавить поле комментарий для «забывчивых». Что делать с самими «слотами» время покажет. 2esclkm — мысли и идеи это хорошо. Но процесс повторяется. Суть — ситуация такова, и это надо признать, что сейчас нет ресурсов (как небыло и год назад) что-то вообще развивать в Котонти. Надо признаться себе что 95% подобных тем кончаются здесь тишиной. В том числе и из-за скатывания во флуд. Для хотелок и филосовствований — велкам в отдельную тему (это не в качестве наезда, а пользы для), здесь обсуждение конкреьной темы. Понимаю, что даже конкретных технический вопрос не всегда можно четко и сразу разрулить. Но… давайте для начала чётко ставить задачу, предлагать решения, (конструктивно) обсуждать их, выделять главный вектор, реализовывать его. Для обсуждения очередных хотелок — открыл отдельную тему.
https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F |
Roffun |
|
---|---|
Приветствую всех присутствующих, вижу актуальная тема поднялась. В отличие от всех участников этой темы, я специализировался на верстке и сайтостроении, а не на программировании, после знакомства с Cotonti понадобилось и php осваивать, уже потихоньку с десяток плагинов написал. Главный минус Cotonti - это первое знакомство, которое отпугивает большинство пользователей, главный плюс - те кто пройдут первый ознакомительный этап, с каждым все больше понимают какие возможности в ней зарыты. Я много работал с шаблонами ДЛЕ , где все делается хаками, так как модули ставятся только с правками движка в большинстве случаев. Без сторонних дополнений было сделано несколько сотен проектов, некоторые по сей день без обновления стоят, выдерживают нагрузку в 50000 и больше посетителей. Но по сравнению с ДЛЕ , Cotonti в разы лучше, и более гибкая в реализации задумок. Просто нужно смотреть не глазами программиста, а глазами нуба, тогда станет все понятно, чего здесь не хватает. Я начал писать плагины которые нужны в первую очередь при взгляде со стороны пользователя. Например работа с внешними ссылками, кнопка скроллинга вверх, галерея изображений, визуальный редактор с поддержкой bb и html парсинга, поделиться, подсветка кода, подключение сторонних скриптов и баннеров в админке (типа слотов для меню). Сейчас работаю над новой интуитивной каптчей, сделал проверку и валидацию при регистрации на ajax, чтобы не было логинов типа 01 или 1as , или AsAAA. Может стоит использовать старый метод сеошников, под названием анализ конкурентов? Взять и проанализировать определенную CMS, подметить все лучшее и сделать аналогично у себя, только еще лучше, а худшее тоже проанализировать, и у себя естественно не делать ошибок. Такой метод позволит не гадать на гуще, что же сделать, а подойти комплексно, не вдаваясь в крайности. Например в том же ДЛЕ меню отсутствует, все работы идут в шаблоне, а улучшения - в правках ядра, и при этом запрос по вордстату - больше 70000. Добавлено 13 минуты спустя: Насчет включений - если структура шаблона будет четко разбита на части, то работать с ним в разы легче. Конструкция FILE это шикарное решение само по себе, я давно храню все интегрируемые объекты в папке inc шаблона. Меню, поиск, сайдбары, каждый отдельно, и все в индексных шаблонах включаются только конструкцией. Поэтому например header.tpl используется как каркас, а в нем: <!-- меню --> {FILE "themes/{PHP.theme}/inc/menu.tpl"} <!-- кабинет --> {FILE "themes/{PHP.theme}/inc/beginuser.tpl"} и тд Улетел на другую планету, а там почты нету.. https://www.cotonti.com/forums/45298?m=posts
|
|
This post was edited by PRoHtml (2014-09-01 13:11, 10 years ago) |
Dr2005alex |
|
---|---|
Соглашусь с PRoHtml , котонти уже вполне пригоден для программистов. Я к этому и клоню - будем ли мы делать его более понятным для новичка? Вернусь к основной теме чанков. Вопрос кто за введение чанков?
В моем понимании чанки для котонти это именно куски html кода со стандартным набором тегов, которые соединяются воедино в базовом шаблоне. Это будет большим плюсом для скинмэйкеров. Можно создать пару-тройку базовых скилетов для сайта (типа 2 столбца, 4 , с footer и без) и прописать в них места блоков, куда и будут вставлятся чанки. Скинмэйкер сможет наделать кучу вариантов шаблонов. Меняя только базовый скилет шаблона и подкулючая готовые чанки. Добавлено 3 минуты спустя: так вот я предлогаю ввести аналог <!-- меню --> {FILE "themes/{PHP.theme}/inc/menu.tpl"} <!-- кабинет --> {FILE "themes/{PHP.theme}/inc/beginuser.tpl"} но с более жесткими условиями. т.е. будем использовать к примеру такой вид. <!-- меню --> {CHUNK.MENU} <!-- кабинет --> {CHUNK.BEGINUSER} И кроме как tpl файл чанк не подгружает.. WebKaa.ru - Cotonti Relax
|
Roffun |
|
---|---|
Чанки могут быть полезны, при условии добровольной установки в виде дополнения : 1. Сама система должа иметь возможность включения / отключения, проще говоря - быть плагином, в таком случае, не будет ущерба для любителей все делать в коде. 2. Должно быть предусмотрено взаимодействие с новыми включениями, например универсальная переменная, вдруг стала необходимость в код чанки добавить тег, а он там не работает. 3. Если в админке без ущерба для безопасности можно реализовать открытие и правку tpl и css файлов, это плюс. В том же ДЛЕ это реализовано. Улетел на другую планету, а там почты нету.. https://www.cotonti.com/forums/45298?m=posts
|
Dr2005alex |
|
---|---|
Вот прикинул как можно сделать через плагин. Можно при включении плагина создавать папку chunk в шаблоне. А плагин будет просто из tpl файлов в этой папке, будет создавать глобальные теги. к примеру {CHUNK:HEADER.MENU} из файла header.menu.tpl в папке chink шаблона и т.д. И шаблонизатор не надо трогать и можно сделать поддержку через базу данных. Что думаете? WebKaa.ru - Cotonti Relax
|
Roffun |
|
---|---|
Получается что идет замена конструкции FILE при вызове .tpl файлов из папки? а как будет идти вызов файла в index, page, forums? с header и footer понятно, они есть глобально, а как быть с содержимым блоков типа MAIN ? например у меня во всех нужных файлах типа main сайдбары вызываются {FILE "themes/{PHP.theme}/inc/s_left.tpl"} и {FILE "themes/{PHP.theme}/inc/s_right.tpl"}
Улетел на другую планету, а там почты нету.. https://www.cotonti.com/forums/45298?m=posts
|
Dr2005alex |
|
---|---|
Просто через FILE ты можешь подключить любой файл. а через чанк только tpl файл чанка. вставка чанка будет работать везде. просто надо будет вставить его тег (как он будет выглядеть решим вместе) Мои варианты {CHANK:INDEX.BOX} или {[INDEX.BOX]} или типа как в модх {$INDEX.BOX} И можно будет реализовать его редактирование и организацию в админке в дальнейшем.. WebKaa.ru - Cotonti Relax
|
Macik |
|
---|---|
#39722 PRoHtml: Это в зависимости от функциональности чанков. В идеале отдельный плагин. Но судя по запросам придется каким-либо образом расширять CoTemplate.
Не понял мысль. Если не будет доступна функциональность чанков, то они (в зависимости от реализации) либо остануться в тексте страницы не обработанными, либо будут «удалены» при парсинге.
Я бы постарался этого избежать.
#39721 Dr2005alex: Считаю, что да, при условии, что мы не редактируем файлы на диске (см. ниже).
На сколько мне видится применение чанков (небольшие блоки кода, редактируемые менеджером сайта) — они удобнее в БД, но как писал выше можно сделать настраиваемо.
Я склонен к варианту с опциональными параметрами, т.к. это увеличит гибкость и модульность элементов интерфейса. Например выделить html код кнопки или виджета в чанк и вызывать его «наполняя» определенным контентом (передавая через параметры).
https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F |
Dr2005alex |
|
---|---|
Да походу только через правку шаблонизатора можно одолеть. Я поспешил с глобальными тегами)))) Через плагин можно сделать только такую конструкцию для подключения чанка {PHP.chunk.name} или вызовом функции {PHP|cot_chunk('name')}, но тогда теряется смысл легко подключения чанков. Либо перечислять все теги плагине, где плагин должен подключать чанки. Все хуки tags. что бы иметь конструкцию к примеру {[CHUNKNAME]} WebKaa.ru - Cotonti Relax
|
Roffun |
|
---|---|
#39727 Macik: Подразумевалось, если чанка выводит определенный .tpl файл, и в него нужно , например добавить экстраполе, или функцию вывести, а она не работает. Например, я для своего сайта решил сделать подсчет всех новостей в подкатегории, сложить, и вывести при помощий функции в шаблон, в том месте где находится пункт меню родительской категории. Добавлено 4 минуты спустя: #39730 Dr2005alex: Я об этом и говорил выше, что CHUNKNAME это тег, который привязывается к хуку по сути дела, и во всех центральных блоках перечислять - долгая история, как и последующая интеграция. Я считаю, нужно изначально определиться с правкой из админки, если этого не будет, то смысл тогда в чанках отпадает, так как конструкция FILE справляется чудесно со своими обязанностями. Улетел на другую планету, а там почты нету.. https://www.cotonti.com/forums/45298?m=posts
|
Dr2005alex |
|
---|---|
Вот файл cotemlate.php с коррекцией. Заменяем его в system. Создаем папку chunk в корне вашего шаблона. Закидываем туда файлы чанков с именем chunk.namechunk.tpl или chunk.namechunk.subname.tpl и вызываем этот tpl файл тегом [[$namechunk]] - первй вариант или [[$namechunk.subname]] и эти куски будут работать как и с {FILE "....."} тоесть если имя файла в папке чанков chunk.header.tpl то его вызов [[$header]] Вызов из любого tpl файла. Полная поддержка вложенности чанков как и в обычном шаблоне. Первая часть файла chunk. в имени файла, обязательна. Это всего лишь механизм подгрузки файла. А можно вместо добавленной мною функции подключения файла чанка, соорудить подключение стороннего кода и там уже обрабатывать как угодно. хоть брать из базы. хоть из кэша или из файла. WebKaa.ru - Cotonti Relax
|
Macik |
|
---|---|
#39730 Dr2005alex: Да. Только сделать это надо красиво и продуманно, с перспективой на будущее. (см. ниже)
Главное, что в таком случае мы теряем возможность использовать внутри чанков теги текущего шаблона (в котором чанк используется), и все «скатывается» к прямому аналогу слотов с парсингом а-ля «slot-n-tags».
Нет, это совсем не вариант. --- На счет универсального расширения CoTemplate мысль такая:
Т.е. если такой механизм будет готов, то для чанков мы просто создаем отдельный плагин, которы будет его использовать, заключая всю логику обработки таких блоков только в себе, без необходимости вносить дополнительные правки в шаблонизатор. // условный код на PHP // в хуке global регистрируем свои обработчики XTemplate::set_extender(array( 'CHUNK:' => 'cot_chunk_parse', '$' => 'cot_chunk_parse', // тоже самое но в стиле ModX )); // в плагине, описываем функцио обработки, которая будет заниматься всем дальнейшим процессом обработки /** * обработка чанков * * @param array $found_ext_tag массив содержащий PCRE совпадения, содержит: * $found_ext_tag[1] — имя расширенного тега, например `CHUNK:` * $found_ext_tag[2] — тело расширенного тега для дальнейшей работы * @param XTemplate $tpl_context ссылка на текущий экземпляр CoTemplate (из которого осуществлен вызов) * @return string */ function cot_chunk_parse($found_ext_tag, $tpl_context){ /* парсим $found_ext_tag[2] для получения имени конкретного чанка, его параметров и т.п. в зависимости от установленного синтаксиса */ // … return $parsed; }
Добавлено 4 минуты спустя: #39733 Dr2005alex: Предлагаю более универсальный вариант — см. выше. https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F |
Dr2005alex |
|
---|---|
не совсем поятен это кусок // в хуке global регистрируем свои обработчики XTemplate::set_extender(array( 'CHUNK:' => 'cot_chunk_parse', '$' => 'cot_chunk_parse', // тоже самое но в стиле ModX )); set_extender это что? В таком виде не будет работать.. ты наверное имел ввиду не в хуке global а в XTemplate? WebKaa.ru - Cotonti Relax
|
|
This post was edited by Dr2005alex (2014-09-01 20:08, 10 years ago) |
Macik |
|
---|---|
#39736 Dr2005alex: set_extender это одна из функций, которой стоит расширить сам CoTemplate. Она будет регистрировать во внутреннем реестре соответствие имен расширенных тегов и их обработчиков. Естественно ф-ю compile надо будет изменить, чтобы в ней происходил поиск всех расширенных тегов по зарегистрированному в реестре перечню, а затем вызывался бы соотв. обработчик. https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F |