Статьи

4 причины выбрать ProcessWire в качестве следующей CMS

Несколько недель назад я наткнулся на статью A List Apart под названием «Управление вашей системой управления контентом» . Он дает рекомендации о том, как ограничить и адаптировать свободу пользователей в бэкэнде системы управления контентом (CMS) с целью сделать его максимально простым в использовании.

Читая эти рекомендации и сравнивая их с техническими возможностями основных игроков в современной среде CMS, я вижу много ограничений. Большинство этих CMS просто не имеют такого рода возможностей и не могут обеспечить уровень параметров для идеальной настройки внутреннего пользовательского интерфейса. Но работая с ProcessWire уже несколько лет, я думаю, что нашел убежище для разработчиков и пользователей, которые хотят именно этого.

Снимок экрана сайта ProcessWire

ProcessWire — это новая, бесплатная PHP CMS с открытым исходным кодом и платформа управления контентом (CMF) с открытым исходным кодом. В своей основе он основан на нескольких простых концепциях и предоставляет инструменты, которые очень просты в использовании и чрезвычайно мощны одновременно. В этой обзорной статье я хочу познакомить вас с некоторыми из этих инструментов и концепций. Вот четыре причины выбрать ProcessWire в качестве вашей следующей CMS.

Ввод и вывод данных основаны только на трех основных понятиях, и ничего более. Это означает, что как только вы поймете эти понятия, вы в основном поймете все о ProcessWire и его философии . Довольно круто, правда? Итак, позвольте мне представить вам страницы , поля и шаблоны .

На начальной странице вашей установки ProcessWire вы видите одно иерархическое дерево страниц:

Установка ProcessWire

Ссылки, которые вы видите в дереве, называются страницами . Страницы в конце обычно отражают страницу, видимую в интерфейсе. Например, страница «О программе» на снимке экрана доступна в интерфейсе, открыв your-domain.com/about/ .

Но у страниц не должно быть аналога на переднем конце. Они также могут просто существовать в серверной части и служить контейнерами данных для других страниц. Позвольте предложению, которое вы только что прочитали, погрузиться: концепция страниц, доступных только в бэкэнде, довольно мощная, поскольку она открывает бесконечные возможности в том, как структурировать ваш сайт и взаимодействовать с введенными данными.

Вы можете — и должны — использовать страницы практически для всего. Например, у вас может быть скрытая страница настроек, где вы сохраняете такие вещи, как основная навигация или общий текст, такие как название, слоган, уведомление об авторских правах и т. Д. Вашего веб-сайта. Другим примером могут быть теги и категории сообщений в блоге (эквивалентно таксономиям в WordPress). Вы просто создадите страницы для каждого тега или категории сообщения в блоге. Позвольте мне процитировать Joss Sanglier в отношении страниц в ProcessWire:

Страницы в ProcessWire используются для самых разных вещей. Их можно использовать как маркер в списке ваших страниц. Их можно использовать как родительский элемент группы для других страниц. Их можно использовать в качестве категорий, тегов или списков или пользователей. И их даже можно использовать для простых выпадающих списков — просто для указания метки и значения.

Давайте откроем и отредактируем вышеупомянутую страницу «О нас».

О странице

Теперь вы смотрите на следующую основную концепцию ProcessWire: поля.

Страницы содержат поля . Но поля должны быть видны с двух разных точек зрения. Оптически они являются частью страницы, потому что когда вы открываете страницу, вы видите поля, с которыми вы можете работать. Технически эти поля являются частью шаблона страницы. Я опишу концепцию шаблонов позже; давайте сначала разберемся с полями.

Поля в ProcessWire — это контейнеры, в которые вы помещаете данные или из которых вы выбираете данные, такие как текст, текстовые поля, числа, электронные письма, загрузка файлов, другие страницы и т. Д. Все зависит от вас, сколько полей содержит страница. У него может быть только одно (например, поле для заголовка страницы) или вообще нет полей (не очень удобно), или более 50 или 100 полей.

В ProcessWire нет понятия настраиваемых полей, как в WordPress, потому что каждое поле в ProcessWire является настраиваемым полем . Вы создаете поле и решаете, какой тип вы хотите (см. Скриншот ниже). Это оно!

Поля ProcessWire

Поле может быть снабжено меткой, описанием и некоторыми примечаниями для дополнительной информации, которая появляется под ним. Каждый тип поля имеет свои настройки. Давайте рассмотрим три типа полей и некоторые настройки, которые вы можете настроить, чтобы почувствовать это:

  • Тип поля текстовой области: Вы можете решить, будет ли он отображаться как обычный текстовой области или как текстовый редактор (по умолчанию CKEditor). Вы можете решить, какие кнопки должны отображаться на панели инструментов CKEditor, и даже ввести пользовательские параметры конфигурации прямо в интерфейсе администратора.
  • Тип поля страницы : Вы можете связать одну страницу с другой страницей и таким образом создать связь между ними. Вы можете связать одну страницу (отношение один-к-одному) или несколько страниц (отношение один-ко-многим). Вы даже можете разрешить создание новых страниц из поля страницы.
  • Тип поля изображения : Вы можете указать, какой тип изображения (расширение) может быть загружен. Вы можете указать минимальную или / и максимальную высоту и ширину, которые должны иметься для загрузки.

Суть заключается в следующем: каждое поле, которое вы создаете, легко настраивается, чтобы точно соответствовать вашим потребностям и потребностям людей, которые создают и редактируют контент, в следующем.

Но как страница узнает, какие поля она имеет в себе? Итак, давайте посмотрим на шаблоны.

Когда вы создаете новую страницу, вы должны выбрать шаблон . Шаблон содержит всю информацию, которую страница должна знать о своем содержимом (какие поля она имеет, как эти поля отображаются и как они себя ведут).

Ниже вы видите поля шаблона basic-page .

Шаблоны ProcessWrite

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

Tempalte атрибуты ProcessWire

С шаблоном может быть связан физический файл PHP с тем же именем. Эти файлы шаблонов находятся в /site/templates/ . В таком файле вы пишете код PHP и HTML-разметку, которая в конечном итоге выводит содержимое страницы и отображает элементы, которые посетитель видит на странице вашего сайта.

Если шаблон не имеет такого соответствующего файла, связанная с ним страница не может быть отображена во внешнем интерфейсе, стоящем отдельно. Это не означает, что вы не можете получить данные этой страницы и вывести их куда-то еще — вы можете сделать это, используя существующий файл шаблона другой страницы.

Давайте подведем итоги технической взаимосвязи между страницами, полями и шаблонами: вы добавляете поля в шаблоны и выбираете шаблон при создании новых страниц. Поля, которые вы видите при редактировании страницы, являются полями, которые вы добавили в выбранный шаблон.

Код в ваших файлах шаблонов будет в основном состоять из нескольких базовых конструкций PHP, таких как присвоение значений переменным, if условия, циклы foreach и разметка HTML, с одной стороны, и работа с API-интерфейсом ProcessWire, с другой стороны.

Вы можете думать об API как о jQuery для PHP. Он предоставляет методы, селекторы, цепочки (свободный интерфейс) и возможности перемещения.

API — это, пожалуй, одна вещь, которая больше всего поражает меня в ProcessWire: он прост в использовании, легок для понимания, выразителен и мощен одновременно. Но самое главное, это позволяет вам развиваться быстро и несложно, и вам действительно весело с ним общаться. Это просто имеет смысл.

API Cheatsheet является отличным справочным материалом. Он показывает все доступные методы, с которыми вы можете работать.

ProcessWire API

Теперь позвольте мне познакомить вас с двумя переменными, представленными API, с которыми вы будете чаще всего сталкиваться при разработке шаблонов: $page и $pages .

Переменная $page содержит все поля, относящиеся к просматриваемой странице. Это включает в себя встроенные поля, которые являются общими для всех страниц, а также поля, относящиеся только к одной этой странице.

Но как вы можете получить доступ к полям страницы? Давайте рассмотрим несколько простых примеров.

Выведите содержимое текстового поля с названием title :

1
2
3
echo $page->get(«title»);
// or
echo $page->title;

Отобразить название шаблона страницы:

1
2
3
echo «This page is using the template: » .
// or
echo «This page is using the template: {$page->template->name}»;

Создайте навигационную систему:

1
2
3
4
echo «<ul>»;
foreach ($page->parents as $parent)
    echo «<li><a href='{$parent->url}’>{$parent->title}</a></li>»;
echo «</ul>»;

Начиная с версии 2.5.27 вы также можете написать выше следующее:

1
2
3
echo «<ul>»;
echo $page->parents->each(«<li><a href='{url}’>{title}</a></li>»);
echo «</ul>»;

Выведите изображение, только если оно действительно было загружено:

1
if ($page->image) echo «<img src='{$page->image->url}’>»;

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

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

Возьмите и выведите первое изображение:

1
2
3
$image = $page->images->first();
 
if ($image) echo «<img src='{$image->url}’>»;

Возьмите и выведите случайное изображение:

1
2
3
$image = $page->images->getRandom();
 
if ($image) echo «<img src='{$image->url}’>»;

Циклически просматривая все изображения, создайте большое изображение с шириной 500 пикселей с пропорциональной высотой и миниатюру 100 × 100 с определенными параметрами качества и обрезки, а затем создайте ссылку на миниатюру для большого варианта:

01
02
03
04
05
06
07
08
09
10
$options = array(
    «quality» => 90,
    «cropping» => «southeast»
);
 
foreach ($page->images as $image) {
    $large = $image->width(500);
    $thumb = $image->size(100, 100, $options);
    echo «<a href='{$large->url}’><img src='{$thumb->url}’></a>»;
}

Примечание: ProcessWire создаст ваши изображения любого размера на лету, а затем сохранит их кэш.

Переменная $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
2
3
$david = $pages->get(«/architects/david-childs/»);
$renzo = $pages->get(«/architects/renzo-piano/»);
$skyscrapers = $pages->find(«template=skyscraper, architects=$david|$renzo, sort=-height»);

Примечание: architects — это поле внутри шаблона skyscraper .

Сам ProcessWire состоит из небольшой базовой структуры (рассмотрим это суть ProcessWire, которая обеспечивает базовые функции) и набора предварительно упакованных модулей, которые поставляются с каждой установкой. Некоторые из этих основных модулей установлены, а другие удалены по умолчанию. Думайте о модулях ProcessWire как о плагинах WordPress: они расширяют и настраивают систему.

Модульная природа ProcessWire имеет несколько приятных преимуществ:

  • База кода более удобна в обслуживании, поскольку основные функции изолированы и отделены от других частей системы, что также значительно повышает общую безопасность .
  • Разработка новых функций упрощается, и ошибки могут быть выявлены и исправлены намного проще и быстрее.
  • Обновление до более новых версий ProcessWire или отдельных модулей обычно не составляет труда, и вам не нужно беспокоиться о том, что после обновления все сломается.

Установить модуль так же просто, как перетащить файлы /site/modules/ каталог /site/modules/ и нажать кнопку « Установить» в интерфейсе администратора. Но на самом деле существует гораздо больше способов установить модуль из каталога модулей .

Например, вы можете установить Менеджер модулей , который позволяет просматривать, загружать, устанавливать и обновлять модули прямо в интерфейсе администратора.

На момент написания, для ProcessWire существует около 370 модулей. Теперь вы можете сравнить это число с примерно 40 500 плагинами WordPress , и это сравнение действительно интересно и показательно одновременно. После этого можно сделать несколько выводов, подумав об общей природе ProcessWire и его модулей и о том, как они сравниваются с плагинами других CMS:

  • ProcessWire не так популярен и широко распространен, как WordPress, Joomla, Drupal и другие.
  • Модули ProcessWire обычно имеют довольно высокое качество кода. Они делают одно и делают это хорошо.
  • Само ядро ​​ProcessWire настолько мощное и гибкое, что просто не нужно добавлять тонну дополнительных модулей для его расширения. Например, вам не нужны модули для создания слайд-шоу галерей, модули для получения первого потомка чего-либо, модули для создания миниатюр и т. Д. Все это (и многое другое) уже покрыто базовыми функциями ProcessWire.

Хотя ловушки — довольно сложная тема, она заслуживает внимания и показывает, что функциональность ProcessWire очень проста для изменения и расширения. ProcessWire содержит сотни методов, к которым вы можете подключиться, чтобы изменить поведение метода.

Допустим, мы создали простую контактную форму, используя API или Form Builder , и некоторые поля помечены, как того требует серверная часть. Мы хотим также добавить соответствующую разметку внешнего интерфейса HTML5 для обязательных полей формы. ProcessWire делает это довольно легко. Мы просто подключаемся к методу рендеринга полей ввода и определяем, что мы хотим настроить: спрашиваем, требуется ли поле, добавляем требуемый атрибут внешнего интерфейса и ставим звездочку в конце метки ввода.

1
2
3
4
5
6
7
8
$forms->addHookBefore(«Inputfield::render», function ($event) {
    $field = $event->object;
     
    if ($field->required) {
        $field->attr(«required», «required»);
        $field->label .= «*»;
    }
});

Одна из главных вещей, которые нравятся людям в 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.
  • Cheatsheet ProcessWire — очень полезная таблица для всех доступных методов API.
  • Посетите grap.pw, чтобы загрузить последнюю стабильную версию ProcessWire.
  • Вы найдете много полезного и интересного контента, просматривая наиболее понравившийся контент официальных дискуссионных форумов ProcessWire.
  • Посмотрите, что другие говорят о ProcessWire в Обзорах ProcessWire .
  • Проверьте некоторые сайты на базе ProcessWire.