Russian (Pусский) translation by Alex Grigorovich (you can also view the original English article)
Несколько недель назад я наткнулся на статью A List Apart под названием «Управление вашей системой управления контентом». Он дает рекомендации о том, как ограничить и адаптировать свободу пользователей в системе управления контентом (CMS), с тем чтобы сделать ее максимально простой в использовании.
Читая эти рекомендации и сравнивая их с техническими возможностями основных игроков в текущем ландшафте CMS, я вижу много ограничений. Большинство из этих CMS просто не имеют таких возможностей и не могут обеспечить уровень параметров, чтобы идеально настраивать внутренний интерфейс пользователя. Но, работая с ProcessWire уже несколько лет, я думаю, что нашел убежище для разработчиков и пользователей, которые этого хотят.



ProcessWire - это бесплатная PHP CMS и Content Management Framework (CMF) с открытым исходным кодом. В основе его лежит несколько простых понятий, и он предоставляет инструменты, которые являются очень простыми в использовании и чрезвычайно мощными одновременно. В этой обзорной статье я хочу познакомить вас с некоторыми из этих инструментов и концепций. Вот четыре причины, чтобы выбрать ProcessWire в качестве следующей CMS.
1. Он основан на трех простых основных понятиях: страницах, полях и шаблонах
Входные и выходные данные основаны на трех основных понятиях и ничего больше. Это означает, что как только вы понимаете эти концепции, вы в основном понимаете все, что касается ProcessWire и философии, стоящей за ней. Довольно круто, не так ли? Итак, позвольте мне представить вам страницы, поля и шаблоны.
страницы
На начальной странице установки ProcessWire вы увидите одно иерархическое дерево:



Ссылки, которые вы видите в дереве, называются страницами. Страницы в back-end обычно отражают страницу, просматриваемую в интерфейсе. Например, страница «О программе» на скриншоте доступна в интерфейсе, открыв your-domain.com/about/
.
Но страницы не обязательно должны иметь аналог в интерфейсе. Они также могут просто существовать в фоновом режиме и служить контейнерами данных для других страниц. Пусть предложение, которое вы только что прочитали, опускается: концепция страниц, доступных только в фоновом режиме, довольно эффективна, потому что она открывает бесконечные возможности структурирования вашего сайта и взаимодействия с введенными данными.
Вы можете и должны использовать страницы практически для всего. Например, вы можете иметь страницу скрытых настроек, в которой вы сохраняете такие вещи, как основная навигация или общий текст, такие как имя, слоган, уведомление об авторских правах и т. Д. Вашего сайта. Другим примером могут быть теги и категории сообщений в блогах (что эквивалентно таксономии в WordPress). Вы просто создавали страницы для каждого отдельного тега или категории сообщения в блоге. Позвольте мне привести Joss Sanglier в отношении страниц в ProcessWire:
Страницы в ProcessWire используются для всех видов вещей. Они могут использоваться как маркер в списке ваших страниц. Они могут использоваться как родитель группы для других страниц. Они могут использоваться как категории, теги или списки или пользователи. И их можно даже использовать для простых выпадающих меню - просто для того, чтобы поставить ярлык и значение.
Давайте откроем и отредактируем вышеупомянутую страницу «О».



Теперь вы смотрите на следующую основную концепцию полей ProcessWire:.
поля
Страницы содержат поля. Но поля должны быть видны с двух разных углов. Оптически они являются частью страницы, потому что когда вы открываете страницу, вы видите поля, с которыми вы можете работать. Технически эти поля являются частью шаблона страницы. Я опишу концепцию шаблонов позже; давайте сначала поймем поля.
Поля в ProcessWire - это контейнеры, в которые вы помещаете данные или из которых вы выбираете данные, такие как текст, текстовые поля, номера, электронные письма, загрузки файлов, другие страницы и т. Д. Это полностью зависит от вас, сколько полей содержит страница. Он может иметь только один (например, поле для заголовка страницы) или никаких полей (не очень удобно) или более 50 или 100 полей.
В ProcessWire отсутствует понятие пользовательских полей, таких как WordPress, потому что каждое поле в ProcessWire является настраиваемым. Вы создаете поле и решаете, какой тип вы хотите (см. Снимок экрана ниже). Это оно!



Поле может быть дано меткой, описанием и некоторыми примечаниями для дополнительной информации, которая появляется под ним. Каждый тип поля имеет свои собственные настройки. Давайте посмотрим на три типа полей и некоторые настройки, которые вы можете сделать, чтобы почувствовать это:
- Тип поля Textarea: вы можете решить, будет ли он отображаться как обычная текстовая область или как текстовый редактор (CKEditor по умолчанию). Вы можете решить, какие кнопки должны появиться на панели инструментов CKEditor, и даже ввести параметры пользовательской настройки прямо в графическом интерфейсе администратора.
- Тип поля страницы: вы можете связать одну страницу с другой страницей и тем самым создать связь между ними. Вы можете либо связать одну страницу (отношения «один к одному»), либо несколько страниц (отношения «один ко многим»). Вы даже можете разрешить создание новых страниц из поля страницы.
- Тип поля изображения: вы можете указать, какой тип изображения (расширение) можно загрузить. Вы можете указать минимальную или / или максимальную высоту и ширину, которые она должна иметь, чтобы претендовать на загрузку.
Суть заключается в следующем: каждое созданное вами поле настраивается в соответствии с вашими потребностями и потребностями людей, которые создают и редактируют контент в следующем.
Но как страница знает, какие поля она имеет сама по себе? Итак, давайте посмотрим на шаблоны.
Шаблоны
Когда вы создаете новую страницу, вам нужно выбрать шаблон. Шаблон содержит всю информацию, которую страница должна знать о ее содержимом (какие поля у нее есть, как эти поля отображаются и как они ведут себя).
Ниже вы видите поля basic-page
шаблона.



При нажатии на поле открывается модальное окно, в котором вы можете изменить настройки поля именно для этого шаблона.



Шаблон может иметь физический файл PHP с тем же именем, связанный с ним. Эти файлы шаблонов расположены в /site/templates/
. В таком файле вы пишете PHP-код и HTML-разметку, которая в конечном итоге выводит содержимое страницы и отображает элементы, которые посетитель видит на странице вашего веб-сайта.
Если в шаблоне нет такого соответствующего файла, связанная с ним страница не может быть отображена в интерфейсе самостоятельно. Это не означает, что вы не можете получить данные этой страницы и вывести ее где-то еще - вы можете сделать это, используя существующий файл шаблона другой страницы.
Подведем итог техническим отношениям между страницами, полями и шаблонами: вы добавляете поля в шаблоны и выбираете шаблон при создании новых страниц. Поля, которые вы видите при редактировании страницы, - это поля, которые вы добавили к выбранному шаблону.
2. У этого есть API, чтобы Влюбиться С
Код в файлах шаблонов будет в основном состоять из нескольких базовых PHP-конструкций, таких как назначение значений переменным, if
условия, петли foreach
и разметка HTML, с одной стороны, и работа с API ProcessWire, с другой стороны.
Вы можете придумать API как jQuery для PHP. Он предоставляет методы, селекторы, цепочки (свободный интерфейс) и возможности перемещения.
API, вероятно, является тем, что поражает меня больше всего в ProcessWire: он прост в использовании, легко понимается, экспрессивный и мощный одновременно. Но самое главное, это позволяет вам развиваться быстрым и несложным способом, и вы действительно развлекаетесь с ним. Это имеет смысл.
API Cheatsheet - отличная ссылка. Он показывает все доступные методы, с которыми вы можете работать.



Теперь позвольте мне познакомить вас с двумя переменными, открытыми для API, с которыми вы будете справляться чаще всего при разработке шаблонов: $page
и $pages
.
Переменная $page
Переменная $page
содержит все поля, относящиеся к просматриваемой странице. Это включает в себя встроенные поля, которые являются общими для всех страниц, а также поля, которые относятся только к одной странице.
Но как вы можете получить доступ к полям страницы? Погрузимся прямо, посмотрев на некоторые простые примеры.
Выведите содержимое текстового поля с названием title
:
1 |
echo $page->get("title"); |
2 |
// or
|
3 |
echo $page->title; |
Отобразите имя шаблона страницы:
1 |
echo "This page is using the template: " . $page->template->name; |
2 |
// or
|
3 |
echo "This page is using the template: {$page->template->name}"; |
Создайте навигацию:
1 |
echo "<ul>"; |
2 |
foreach ($page->parents as $parent) |
3 |
echo "<li><a href='{$parent->url}'>{$parent->title}</a></li>"; |
4 |
echo "</ul>"; |
Начиная с версии 2.5.27, вы также можете написать выше:
1 |
echo "<ul>"; |
2 |
echo $page->parents->each("<li><a href='{url}'>{title}</a></li>"); |
3 |
echo "</ul>"; |
Выведите изображение только в том случае, если оно действительно было загружено:
1 |
if ($page->image) echo "<img src='{$page->image->url}'>"; |
Примечание. Вы должны установить для своего поля изображения только одно изображение для этого.
Ниже приведены несколько примеров, когда поле изображения содержит несколько изображений.
Захватите и выведите первое изображение:
1 |
$image = $page->images->first(); |
2 |
|
3 |
if ($image) echo "<img src='{$image->url}'>"; |
Возьмите и выведите произвольное изображение:
1 |
$image = $page->images->getRandom(); |
2 |
|
3 |
if ($image) echo "<img src='{$image->url}'>"; |
Прокрутите все изображения, создайте большое изображение с шириной 500 пикселей с пропорциональной высотой и миниатюру размером 100 × 100 с конкретными настройками качества и обрезки, а затем добавьте миниатюру к большому варианту:
1 |
$options = array( |
2 |
"quality" => 90, |
3 |
"cropping" => "southeast" |
4 |
);
|
5 |
|
6 |
foreach ($page->images as $image) { |
7 |
$large = $image->width(500); |
8 |
$thumb = $image->size(100, 100, $options); |
9 |
echo "<a href='{$large->url}'><img src='{$thumb->url}'></a>"; |
10 |
}
|
Примечание. ProcessWire будет создавать ваши изображения любого размера на лету, а затем сохранить кэш.
Переменные $pages
Переменная $pages
- это ссылка на все страницы вашего сайта. Это позволяет вам получать доступ ко всему содержимому и страницам вашего сайта в любом месте.
В следующих примерах я расскажу о стандартном демонстрационном сайте ProcessWire, в котором представлена коллекция небоскребов в Соединенных Штатах.
Получить определенную страницу и вывести ее название:
1 |
echo $pages->get("/cities/chicago/sears-tower/")->title; |
Примечание: /cities/chicago/sears-tower/
- это полный путь, указывающий на страницу Sears Tower в иерархии дерева страниц ProcessWire.
Найдите все небоскребы высотой более 500 футов и меньше или равно 1000 футов:
1 |
$skyscrapers = $pages->find("template=skyscraper, height>500, height<=1000"); |
Примечание: height
- это поле, содержащееся внутри skyscraper
шаблона.
Найти все небоскребы, построенные до 1950 года с 10+ этажами, отсортированные по году по убыванию, затем полы по убыванию:
1 |
$skyscrapers = $pages->find("template=skyscraper, year<1950, floors>=10, sort=-year, sort=-floors"); |
Примечание: year
и floors
- это поля, расположенные внутри skyscraper
шаблона.
Найти все небоскребы в Чикаго с 60 + этаж, отсортировано по этажам по возрастанию:
1 |
$skyscrapers = $pages->get("/cities/chicago/")->find("floors>=60, sort=floors"); |
Найти все небоскребы архитекторов Дэвида Чайлдса или Ренцо Пиано, и отсортировать по высоте по убыванию:
1 |
$david = $pages->get("/architects/david-childs/"); |
2 |
$renzo = $pages->get("/architects/renzo-piano/"); |
3 |
$skyscrapers = $pages->find("template=skyscraper, architects=$david|$renzo, sort=-height"); |
Примечание. architects
- это поле, содержащееся внутри шаблона skyscraper
.
3. Он построен вокруг модульной и легко расширяемой архитектуры
Сам ProcessWire состоит из небольшой основной структуры (рассмотрим эту суть ProcessWire, которая позволяет использовать базовые функции) и набор предварительно упакованных модулей, которые поставляются с каждой установкой. Некоторые из этих основных модулей установлены, а другие удалены по умолчанию. Подумайте о модулях ProcessWire как плагинах WordPress: они расширяют и настраивают систему.
Модульный характер ProcessWire имеет несколько приятных преимуществ:
- База кода более удобна в обслуживании, поскольку основные функциональные возможности изолированы и отделены от других частей системы, что также значительно повышает общую безопасность.
- Разработка новых функций упрощается, и ошибки могут быть нацелены и исправлены гораздо легче и быстрее.
- Модернизация до более новых версий ProcessWire или отдельных модулей обычно не требует больших усилий, и вам не нужно беспокоиться о том, что после обновления все будет нарушено.
Установка модулей
Установка модуля так же просто, как перетаскивание файлов модуля в каталог /site/modules/
, а затем нажмите «Установить» в графическом интерфейсе администратора. Но на самом деле существует еще много способов установить модуль из каталога модулей.
Например, вы можете установить диспетчер модулей, который позволяет вам просматривать, загружать, устанавливать и обновлять модули прямо в графическом интерфейсе администратора.
Количество модулей: качество по количеству
На момент написания документа для ProcessWire существует около 370 модулей. Теперь вы можете сравнить это число с примерно 40 500 плагинами WordPress, которые есть там, и это сравнение действительно интересно и показывается в одно и то же время. Следуя этому, можно сделать несколько выводов, в которых рассматривается общий характер ProcessWire и его модулей, и как они сравниваются с плагинами других CMS:
- ProcessWire не так популярен и широко распространен, как WordPress, Joomla, Drupal и другие.
- Модули ProcessWire обычно имеют довольно высокое качество кода. Они делают одно и делают это хорошо.
- Ядро ProcessWire само по себе настолько мощно и гибко, что просто не нужно добавлять тонну дополнительных модулей для его расширения. Например, вам не нужны модули для создания слайд-шоу галереи, модулей для получения первого ребенка чего-то, модулей для создания миниатюр и т. Д. Все это (и многое другое) уже покрывается базовыми функциями ProcessWire.
Крючки
В то время как перехватчики являются довольно продвинутой темой, это примечательно и показывает, что функциональность ProcessWire должна быть супер-легко изменяться и расширяться. ProcessWire содержит сотни методов, которые вы можете подключить, чтобы изменить поведение метода.
Допустим, мы создали простую форму контакта с помощью API или Form Builder, и некоторые из полей отмечены как требуется для внешнего сервера. Мы хотим, чтобы также добавили соответствующую разметку интерфейса HTML5 для необходимых полей формы. ProcessWire делает это довольно легко. Мы просто подключаемся к методу визуализации полей ввода и определяем, что мы хотим настроить: спросите, требуется ли поле, добавьте требуемый атрибут front-end и поместите звездочку в конец входной метки.
1 |
$forms->addHookBefore("Inputfield::render", function ($event) { |
2 |
$field = $event->object; |
3 |
|
4 |
if ($field->required) { |
5 |
$field->attr("required", "required"); |
6 |
$field->label .= "*"; |
7 |
}
|
8 |
});
|
4. Это не поможет вам и предоставляет инструменты для создания настраиваемых, удобных для пользователя интерфейсов.
Одна из главных вещей, которые люди любят в ProcessWire: это не мешает вам. Он ведет себя так, как вы этого хотите, и настраивается на ваш стиль разработки веб-сайта.
Например, у вас есть полный контроль над выходом разметки, и вы не форсированы определенным способом разработки шаблона в файловой системе. Если вы знакомы с стилем WordPress для разработки вещей, вы можете продолжать так же, как привыкли. Или, если вы хотите создать более сложную архитектуру, вы можете использовать подход, основанный на MVC, и он будет работать так же хорошо.
Как я упоминал ранее, страницы не имеют набора обязательных полей, чтобы ProcessWire мог понять структуру страницы. (По крайней мере, не видимые) Есть несколько встроенных полей, таких как ссылки на родителя страницы или число детей страницы и т. Д.). Вы можете поместить 100 полей на страницу, если хотите, заказать их каким-либо образом вы хотите указать, какие из них требуются, а какие нет, и вы можете поместить их в разные наборы полей или вкладки для лучшего опыта пользовательского интерфейса.
Другое главное, что нравится в ProcessWire: он, естественно, предоставляет инструменты для создания адаптированных, удобных для пользователя интерфейсов. Я дал вам представление об этом в предыдущем абзаце. Уровень настройки шаблонов продуман. Как только вы испытаете это самостоятельно, вы поймете, почему ProcessWire - это больше CMF, чем CMS.
Например: каждое поле имеет связанный с ним контекст шаблона. Это означает, что вы можете указать, что одно и то же поле имеет определенную метку, описание и поведение в одном шаблоне и совершенно другую метку, описание и поведение в другом шаблоне.
Другим примером являются зависимости полей ввода: они позволяют указать условия, в которых показано или требуется определенное поле в редакторе страниц.
И еще одним примером является модуль PageTableExtended: он позволяет пользователю просматривать, редактировать и изменять различные части страницы вашего сайта (которые вы определяете разработчиком) визуально и интуитивно.
Это для меня определение элегантности и глубокого посвящения.
Заключение
Эта статья может только поцарапать поверхность того, что вы можете сделать с ProcessWire и тем, что она может предложить. Список замечательных функций просто ставится слишком долго и выходит за рамки этой статьи. Позвольте мне взглянуть на некоторые из них:
- ProcessWire обладает отличными механизмами кэширования (например, шаблоном и кэшем разметки или ProCache) и работает очень хорошо. Масштабируемость также впечатляет. Вы можете буквально иметь миллионы страниц на одной установке.
- В ProcessWire есть небольшое, но фантастическое сообщество. Дискуссионный совет является центральным местом для обсуждения любых вопросов и проблем.
- ProcessWire имеет многоязычную поддержку. Многоязычные модули являются частью предварительно упакованных базовых модулей. Его очень легко настроить и поддерживать.
- ProcessWire имеет отличные встроенные возможности управления пользователями с настройками, которые очень детализированы и легко управляемы одновременно. Например, вы можете создать роль для пользователей, которые имеют единственное разрешение на редактирование полей на французском языке и ни на одном другом языке.
- Есть несколько тем администратора, которые вы можете выбрать, чтобы изменить внешний вид графического интерфейса администратора.
- Безопасность - это главный приоритет для ProcessWire.
- ProcessWire имеет прозрачную дорожную карту, и разработка очень активна. Есть несколько новых выпусков почти каждую неделю.
Чем больше вы используете ProcessWire и чем больше вы интернализируете основные концепции, API и его модульную архитектуру, тем больше вам будет весело с ней работать. Вы поймете, насколько невероятно мощными инструментами и рабочими процессами ProcessWire. Можно сказать, что единственное, что ограничивает вас в достижении определенной цели с помощью ProcessWire, - это ваше собственное воображение.
Позвольте мне закончить, процитировав создателя ProcessWire, Райана Крамера:
ProcessWire - это система, которая вознаграждает вас за то, что вы любопытны. Мы стремимся показать вам, как ловить рыбу, чтобы вы могли поймать большую рыбу.
Куда пойти отсюда
Полезные ссылки и инструменты вокруг ProcessWire:
- Раздел документации на веб-сайте ProcessWire - отличный способ начать свое путешествие, чтобы узнать больше о ProcessWire. Вы найдете информацию об API, структуре каталогов, файлах шаблонов, селекторах, многоязычной поддержке и безопасности.
- ProcessWire Weekly - это еженедельный источник новостей и обновлений ProcessWire.
- ProcessWire.tv - это поисковая коллекция обучающих видеороликов ProcessWire.
- wirehell - это интерфейс командной строки для ProcessWire на основе компонента Symfony Console.
- Padloper - это платформа для электронной коммерции, построенная поверх ProcessWire.
- ProcessWire Module Generator - это визуальный способ начать разработку модуля с большим количеством лучших методов разработки модулей.
- ProcessWire Recipes - это каталог, целью которого является сбор мини-учебников для обычных и не столь распространенных задач и проблем ProcessWire, представленных в сжатом и спот-формате, чтобы помочь вам развить мастерство ProcessWire.
- ProcessWire Cheatsheet - очень полезный чит-лист для всех доступных API-методов.
- Посетите grap.pw, чтобы загрузить последнюю стабильную версию ProcessWire.
- Вы найдете много полезного и интересного контента, просматривающего наиболее понравившийся контент официальных дискуссионных форумов ProcessWire.
- Посмотрите, что другие могут сказать о ProcessWire в обзорах ProcessWire.
- Ознакомьтесь с некоторыми сайтами, на которых работает ProcessWire.