Processwire -- супер потужний сучасний веб-фреймворк. Останніх років зо два переважно роробляю на ньому. Система, як і має бути у веб-фреймворка, є максимально гнучка, базується на ФІЛДах -- полях, які налаштовуєш і прописуєш у шаблоні. По дефолту шаблон необхідно завантажувати по ftp, але є модуль, який дозволяє налаштовувати їх безпосередньо з адмінки.
ФІЛД -- це властивість сторінки, тому і синтаксис відповідний:
echo $page->title; echo $page->summary;
$page -- це шаблон сторінки, який налаштовуєш, а title -- у даному випадку назва сторінки. Тобто код $page->title виведе у вказаному мусці заголовок сторінки.
Вивести списком усі дочірні сторінки:
foreach($page->children() as $child) { echo '<li>' . $child->title . '</li>'; }
Вивести списком (з посиланнями) усі дочірні сторінки:
foreach($page->children() as $child) { echo '<li><a href="' . $child->url . '">' . $child->title . '</a></li>'; }
Те саме тільки у скороченому фірмовому стилі "а ля джейквері":
echo $page->children()->each("<li><a href='{url}'>{title}</a></li>");
Якщо потрібно вивести значення батьківської сторінки. Наприклад, є сторінка "усі новини" і в ній є поле зі значенням фото parent_img, тоді вивести у дочірній сторінці значення цього поля можна так:
echo $page->parent->parent_img;
Так само це можна зробити і з "дідівською" сторінкою, наприклад, заголовок:
echo $page->parent->title;
Інший "фокус-покус" -- вивести на сторінці дані з якогось конкретного шаблону. Приклад: на сайті є новини, які використовують шаблон "posts" і потрібно вивести на головній анонси цих новин:
$posts = $pages->get('template=posts'); foreach($posts as $post){ echo '<li>' . $post->title . '</li>'; }
Припустімо, що поле з текстом в новинах у нас називається content, то код може бути такий:
$posts = $pages->get('template=posts'); foreach($posts as $post){ // обрізаємо анонс до 210 символів $prewiev = strip_tags(mb_substr($post->content, 0, 210)); echo '<li>' . $prewiev . '</li>'; }
Потрібно встановити обмеження на кількість дописів, наприклад, 4:
$posts = $pages->find("template=posts, limit=4");
Сортувати за заголовкoм:
$pages = $pages->find("template=posts, limit=3, sort=title");
Знайти 4 дочірні сторінки, відзначені чекбоксом і відсортувати за датою створення (спершу нові):
$features = $page->children("featured=1, limit=4, sort=-date");
Вивести усі сусідні сторінки без поточної:
foreach($page->siblings as $sibling) { if($sibling->id != $page->id) echo "<li>Sibling: {$sibling->path}</li>"; }
Обітнути зображення до вказаних пропорцій (філд має назву image):
echo $page->image->size(800,600)->url;
Якщо ми не знаємо, якого розміру буде зображення і не хочемо примусово масштабувати, то можна вказати параметр, який обріже фото, якщо воно буде більшим і не буде міняти, якщо картинка менша. Встановити максимально можливу ширину:
echo $page->image->maxWidth(950)->url;
Можна примусово встановити ширину:
echo $page->image->width(950)->url;
Або ж висоту (зображення не деформуються):
echo $page->image->height(660)->url;
Вивести опис зображення можна за допомогою:
echo $page->image->description;
Вивід пагінації (посторінкової навігації):
echo $pages->renderPager(array( 'nextItemLabel' => '>>>', 'previousItemLabel' => '<<<', 'listMarkup' => " <div class=\"pagination\"> <ul>{out}</ul> </div> ", 'itemMarkup' => "<li class='{class}'>{out}</li>", 'linkMarkup' => "<a href='{url}'><span>{out}</span></a>" ));
Хлібні крихти:
foreach($page->parents() as $item) { echo '<li><a href=' . $item->url . '>' . $item->title . '</a></li>'; }
Або ж так:
foreach($page->parents as $parent) { echo "<li><a href='{$parent->url}'>{$parent->title}</a></li>"; }
Вивести назву шаблона:
echo "Назва шаблона: {$page->template->name}";
Вивести усі ФІЛДи, які є на сторінці:
foreach($page->fields as $field) { echo "<p>{$field->name}: " . $page->get($field->name) . "</p>"; }
Налаштування шаблону меню (модуль ProcessMenuBuilder):
$menu = $modules->get('MarkupMenuBuilder'); $options = array( 'wrapper_list_type' => 'ul',// ul, ol, nav, div, etc. 'list_type' => 'li',// li, a, span, etc. 'menu_css_id' => '',// a CSS ID for the menu 'menu_css_class' => '',// a CSS Class for the menu 'submenu_css_class' => '',// CSS Class for sub-menus 'has_children_class' => '',// CSS Class for any menu item that has children 'first_class'=>'',// CSS Class for the first item in 'last_class' => '', 'current_class' => '', 'default_title' => 0,// 0=show saved titles;1=show actual/current titles 'include_children' => 4,// show 'natural' MB non-native descendant items as part of navigation 'm_max_level' => 1,// how deep to fetch 'include_children' 'current_class_level' => 1,// how high up the ancestral tree to apply 'current_class' 'default_class' => '',// a CSS class to apply to all menu items ); echo $menu->render(ID, $options); // ID -- має бути число, айді створеного меню
Файл config.php може містити конфігурацію шаблона, наприклад, верхню та нижню частину. Для цього прописуємо назви цих частин:
$config->prependTemplateFile = '_top.php'; // підкреслення у назві файлу потрібне, щоб система не визначала його, як шаблон $config->appendTemplateFile = '_bottom.php';