еще такая вопрос возник, зачем такой геморрой с конфигами, допустим у меня всего 1 сайт, зачем мне создавать под него конфиг с именем файла равный адресу сайта, может лучше оргинизовать такую же работу как с паге? т.е. при заходе на сайт mypinpie.local происходит следующее, первым делом у меня в папке config проверяется наличие файла config/mypinpie.local.php, если его нет, проверяется существует ли папка config/mypinpie.local и если да в ней подцепляется какой то файл, index.php или config.php, а если нет ни файла не папки, тогда типа всего 1 сайт и должен быть файл config/config.php где собственно конфиг, а если и его нет значит конфиг по умолчанию, как то так.
и если использовать эту модель с конфигами, то если мы используем папки, типа config/mypinpie.local/config.php то можно было бы еще добавить файл preinclude.php для каждого сайта, помещая его в папку с конфигом сайта, при этом preinclude.php тот что в корневой папке сохраняется и тоже используется, сначала будет подключаться скажем так глобальный - /preinclude.php после него уже для сайта - config/mypinpie.local/preinclude.php как то так.
про конфиги идею понял, сделаю на свой манер. По сниппету из кода можно заюзать PinPIE:: ParseString(), а можно в принципе добраться до метода, который сидит глубже, куда передаётся тег, как массив, но это пипец.
да, ещё хочу заметить, что способ это основной способ работать со сниппетами. Однако рендеринг сниппета происходит как и положено - после исполениня кода пхп этого текущего файла, в котором вы эту строчку пишете. Если вам надо получить текст отрендерённого сниппета "прям ща", то тогда дёргайте тот метод, что я сказал выше. Обычно он не нужен. Но иногда я его использовал при генерации ответов json.
а как правильно отдавать json для ajax, допустим если у меня все делается (формирование ответа) в page? т.е. без сниппетов. --- Добавлено --- Я пока вот к такому пришел, правда не тестировал (но по коду страницы вроде норм): в page: PHP: [[@template=my_json_tmp]] <?php $result = 'some result'; echo json_encode($result); а в templates/my_json_tmp.php: PHP: <?php header("Content-Type: text/html; charset=UTF-8"); echo '[[*content]]';
я делаю PHP: <?php PinPIE::$template = false; ... echo json_encode(... --- Добавлено --- вот в этой главе в самом низу http://pinpie.ru/ru/manual/templates#page-templates
еще такая вопрос, допустим у меня пользователь авторизованный не авторизованный, как лучше всего организовать при заходе на страницу если он авторизован, то предоставить ему контент, если не авторизован, форму авторизации. допустим страниц много, и на каждой делать проверку не айс.
тогда проверку можно сделать в преинклуде том как раз. Я так в галерее делал, там в админке всё закрыто всегда, если не залогинен. Но последнее время у меня обычно как раз ситуация такая, что одной только авторизации недостаточно, и приходится на каждой странице проверять свои отдельные права видеть контент именно этой страницы.
ну надо бы продумать как это лучше всего прикрутить, создать какой то обработчик (класс) который будет определять права, он естественно будет в preinclude.php (пользователь сам будет делать) и он должен как то ловить подгружаемый контент, а так же иные элементы (например админ панель или меню) и давать то, что разрешено. как со стороны ПинПие перехватывать подгружаемые элементы..
@VLK зачем ты через жалобу модератору форума php.ru пытаешься внести предложение о функциональности PinPie. Да, Игоряша тоже увидит эту жалобу. Но вот тут есть тред и в нем и пиши. Или я должен [vs] влепить баллы за нарушение? --- Добавлено --- а, я кажется понял. Вася опечатался в названии файла, добавив лишнюю букву s и сделав из единственного preinclude множественное preincludes. Ну пипец, @[vs]. Это явно балла на 3 тянет...
я просто попросил исправить ошибку, если бы пользователь мог редактировать свои старые сообщения, как это было предыдущем движке, я бы написал ему, а не модераторам через жалобу.
раньше было с s --- Добавлено --- запилил. Работать будет так: [[*placeholder=default value]] --- Добавлено --- Проверьте пожалуйста. Самому сложно проверять, тестов нет, писать не умею и не буду пока. =)
Исправил упущение, спешите заценить http://pinpie.ru/ru/manual/start --- Добавлено --- Кстати говоря доступны исходники сайта с документацией: https://github.com/igordata/PinPIE.docs Можно заценить как сумасшедшим образом реализовано боковое меню, которое подключается на странице как чанк, а потом как константа в него пихаются ссылки на подразделы данного раздела: Код (Text): [title[=Configuration]] [sidemenu[ru/manual/sidemenu]] [menu config[= <ul> <li><a href="#config-files">Файлы конфигов</a></li> <li><a href="#config-variables">Переменные конфига</a></li> <li><a href="#simplest-config">Простейший конфиг</a></li> <li><a href="#default-pinpie-settings">Дефолты</a></li> <li><a href="#cache">Кэш</a></li> <li><a href="#code-page">Code page</a></li> <li><a href="#static">Статики</a></li> <li><a href="#log">Log</a></li> ... <li><a href="#config-example">Пример конфига</a></li> </ul> ]] https://github.com/igordata/PinPIE.docs/blob/master/app/backend/pages/ru/manual/config.php --- Добавлено --- Ляпайте звёздочки в репах! Это важно! тут https://github.com/igordata/PinPIE.docs и тут https://github.com/igordata/PinPIE
еще такой проблема или.. допустим у меня в темпелате так: HTML: <!doctype html> <html> <head> <meta charset="utf-8" /> <title>[[*title]]</title> </head> <body> <div class="menu">[[$menu]]</div> <div class="content">[[*content]]</div> </body> </html> как видно меню выводиться при помощи сниппета (именно сниппета потому что..), но допустим есть некоторые страницы где мне не надо выводить меню, было бы не плохо иметь возможность как то обнулить что-ли сниппет, что бы он не выводился, как то типа: PHP: $pinpie_snippets['menu'] = false;
Было бы прикольно иметь возможность что бы сниппет выводил что-то другое, что бы я мог его на странице переопределить.
Сниппеты в принципе могут выводить что угодно, там же пхп. Ты можешь проверять, на какой странице он вызывается. Показывать меню или не показывать.
@VLK, в сниппет можно передать гет-параметр. В самом сниппете определить, если передан false - меню не выводить
Если сниппеты разные или параметры там, то значит можно просто не писать его, когда не нужно. =) В темплейте Код (Text): [[*menu_placeholder]] на страницах на каких надо Код (Text): [menu_placeholder[$menu_snippet]] Можно передавать параметры или использовать другие сниппеты или что угодно. Код (Text): [menu_placeholder[$menu_another_snippet?somevar=value]] Если этого не будет где-то, то и меню не будет. В сайте с документацией это реализовано вот так: https://github.com/igordata/PinPIE.docs/blob/master/app/backend/pages/ru/manual/config.php тут подменю, т.к. страница длинная, и нужно подменю с пунктами, которые только на этой странице есть. а тут плейсхолдеры с меню https://github.com/igordata/PinPIE.docs/blob/master/app/backend/chunks/ru/manual/sidemenu.php это очень сложный случай, поэтому там дочерта плейсхолдеров. Но работает прекрасно!
ну в том то и проблема, на страницах, а если у меня 100 страниц, на 95 оно нужно, на 5 ненужно, на 95 что то писать из-за 5 страниц? может нужна возможность пойти от обратного, т.е. переопределить сниппет. Рассмотри такую возможность.
Одна звездочка у репы... А есть у этого творения хоть какое то будущее? Для таких мелких вещей у каждого могу поспорить есть свой велосипед есть куча микрофреимворков и т.д. Что бы это прокатило в пхп надо быть везунчиком)
@smitt ну а какие еще существуют мини-CMS такого толка (на файлах, без лишнего геморроя), только популярные? я вот искал, не нашел, а это вроде как приглянулось, ни чего особо сложного, можно свои скрипты (классы) подгружать как хочешь. --- Добавлено --- был еще какой то чувак с файловой CMS - морфу, но вроде она какая то мутная
Опиши какие задачи ставятся перед cms. Кому нафиг нужны файлы? Это извращение. Я файловыми движками не пользовался поэтому не могу посоветовать.
ну создание каких то минисайтов, визиток, короче там, где БД не нужна, допустим сайт рекламирующий всю ту же CMS ну или кто-то сделает какую то программу или плагин для чего то, ему же надо на чем то сделать сайт для рекламы.