Статьи

Введение в Kirby CMS

Kirby — это легкая CMS, которая, вероятно, подходит где-то между многофункциональными платформами, такими как Drupal, и генераторами статических сайтов, такими как Jekyll.

Что отличает Кирби от большинства CMS — и ближе к Джекиллу — в том, что у него нет базы данных. Вместо этого все хранится в виде файлов; некоторые для конфигурации, некоторые для контента — все в дополнение к обычным файлам шаблонов, частичным версиям и плагинам.

В этой статье я собираюсь взглянуть на Кирби, продемонстрировать, как его использовать, и оценить некоторые его сильные и слабые стороны.

Лицензирование, загрузка и установка

Кирби предоставляется на основании лицензии на сайт в размере (на момент написания) 39 долларов США. Тем не менее, вы можете попробовать его на своем локальном компьютере бесплатно — только когда вы начнете работать, плата за лицензию становится платной.

Пакет доступен на странице загрузок Kirby в виде файла .zip или на Github .

Чтобы установить, разархивируйте / скопируйте архив в корневой каталог и укажите виртуальный хост в корневом каталоге Kirby. И это все, что нужно — прямо сейчас, вы должны увидеть некоторый фиктивный контент и тему по умолчанию для Кирби.

The Default Kirby theme

Структура сайта Кирби

Предположим, мы планируем работать с базовой структурой сайта, предоставленной по умолчанию, но добавим новую страницу на верхнем уровне под названием «Наша работа». Мы хотим, чтобы он появился перед «Контактом» в меню.

Начните с переименования каталога, в котором находится страница контакта с content/03-contact на content/05-contact .

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

Теперь создайте новую папку с именем content/03-our-work и в этом файле с названием our-work.txt

Файлы содержимого всегда должны иметь расширение .txt по умолчанию, несмотря на то, что их содержимое представляет собой смесь YAML и Markdown. Чтобы изменить это поведение, измените следующую строку в site/config/config.php :

 c::set('content.file.extension', 'txt'); 

Файл должен иметь следующую структуру:

 Title: Our Work ---- Text: Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. 

Теперь, если вы переходите на сайт, вы должны увидеть новый пункт меню между Проектами и Контактом, с содержимым, которое мы только что определили в 04-our-work/our-work.txt .

Очевидно, вы можете редактировать существующие страницы таким же образом. Вы найдете содержимое домашней страницы в content/home/home.txt .

Давайте посмотрим, как создается меню, чтобы понять, что происходит. Меню реализовано в виде фрагмента, который в основном является частичным представлением:

 // site/snippets/menu.php <nav class="menu"> <ul> <?php foreach($pages->visible() AS $p): ?> <li><a<?php echo ($p->isOpen()) ? ' class="active"' : '' ?> href="<?php echo $p->url() ?>"><?php echo html($p->title()) ?></a></li> <?php endforeach ?> </ul> </nav> 

Обратите внимание, что он вызывает метод visible() . Контент с префиксом — 01 , 02 т. Д. — виден; то есть он предназначен для отображения в навигации. Содержимое без — как home и error — скрыто. Попробуйте создать папку с именем content/test с соответствующим файлом содержимого с именем test.txt — вы обнаружите, что он не отображается в меню. Если вы хотите скрыть дополнительные страницы, измените следующую строку в site/config/config.php :

 c::set('content.file.ignore', array()); 

$pages->visible() возвращает страницы, упорядоченные по имени каталога, отсюда и числовые префиксы. Вы можете изменить это поведение; Предположим, вы хотите список страниц в алфавитном порядке по названию:

 $a_to_z = $pages->visible()->sortBy('title', 'asc'); 

Чтобы вывести список страниц под текущим открытым пунктом меню (то есть подменю), вы можете сделать это:

 if($root = $pages->findOpen()) { $items = $root->children()->visible(); } 

На веб-сайте Kirby есть намного больше информации об управлении меню.

Тематизация

В новой установке страницы отображаются с использованием site/templates/default.php .

Давайте посмотрим на содержимое:

 <?php snippet('header') ?> <?php snippet('menu') ?> <?php snippet('submenu') ?> <section class="content"> <article> <h1><?php echo html($page->title()) ?></h1> <h2><?php echo html($page->subtitle()) ?></h2> <?php echo kirbytext($page->text()) ?> </article> </section> <?php snippet('footer') ?> 

snippet() включает в себя файл с site/snippets — мы скоро рассмотрим их.

Вы заметите, что содержимое страницы доступно как переменная с именем $page , которая считывает свойства, определенные в соответствующем текстовом файле. Функция html() используется для экранирования значений, а kirbytext() применяет некоторую дополнительную интерпретацию, как мы вскоре увидим.

Чтобы создать новый шаблон для конкретной страницы, просто создайте новый файл в site/templates , имя которого совпадает с именем файла содержимого для рассматриваемой страницы. Так, например, если вы хотите отдельный шаблон страницы для домашней страницы, вы должны создать файл с именем site/templates/home.php . Для страницы «Наша работа», которую мы создали ранее, вы бы назвали ее our-work.php .

По умолчанию вместе с Kirby поставляется папка assets , содержащая подпапки с images и styles , но вы можете структурировать ресурсы своей темы по своему усмотрению.

Свойства сайта и фрагменты

Если вы откроете файл content/site.txt , вы увидите множество свойств самого сайта, таких как заголовок, автор и уведомление об авторских правах. Вы можете добавить дополнительные свойства. Например, если вы добавите следующее:

 ---- Twitter: myusername 

Теперь вы можете print это в своих шаблонах или фрагментах, используя магический метод переменной $site . Чтобы поместить его в нижний колонтитул, откройте site/snippets/footer.php и добавьте следующее:

 <a href="http://twitter.com/<?php print $site->twitter() ?>">Twitter</a> 

Создание простого блога

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

Создайте папку с именем content/04-blog и в ней файл с именем blog.txt :

 Title: Blog ---- 

В этой папке создайте группу сообщений в блоге (используя тот же формат, что и существующие страницы), например

 content/04-blog/01-first-post/first-post.txt content/04-blog/02-first-post/second-post.txt content/04-blog/03-first-post/third-post.txt 

Теперь создайте шаблон для блога:

 // site/templates/blog.php <?php snippet('header') ?> <?php snippet('menu') ?> <section class="content"> <h1><?php echo html($page->title()) ?></h1> <?php foreach ($pages->findOpen()->children()->visible()->flip() as $post): ?> <article> <h2><a href="<?php print $post->url() ?>"><?php echo html($post->title()) ?></a></h2> <p><?php print excerpt($post->text()) ?></p> <p><a href="<?php print $post->url() ?>">Read more &raquo;</a></p> </article> <?php endforeach ?> </section> <?php snippet('footer') ?> 

Обратите внимание, как мы вызываем flip() чтобы изменить порядок страниц, все из которых являются дочерними элементами текущей страницы, то есть страниц в папке content/04-blog .

В этом шаблоне также представлена ​​функция url() , которая возвращает URL-адрес рассматриваемой страницы, и excerpt() , который возвращает сводку текстового содержимого. Чтобы изменить количество возвращаемых символов, просто укажите его в качестве второго параметра:

 print excerpt($post->text(), 250); // prints the first 250 characters 

Kirbytext

Фактическое содержание в Kirby написано в «Kirbytext». Он хранится как текстовое свойство в файле YAML и по сути является расширением Markdown, но с некоторыми дополнительными макросами.

Это лучше всего иллюстрируется на примере:

Файл: page.txt :

 Title: About ---- Somefield: Something ---- Body: This is some sample content. It's based on Markdown, so we can use **bold** or *emphasis*, and [write links](http://getkirby.com). Kirbytext also has macros, that look a little like this: (youtube: http://www.youtube.com/watch?v=ZZ5LpwO-An4 width: 300 height: 200) 

Специфичный для Kirby макрос / тег здесь предназначен для встраивания видео с YouTube, но вы можете расширить Kirbytext, чтобы написать свой собственный. Для этого начните с создания файла с именем kirbytext.extended.php на site/plugins :

 class kirbytextExtended extends kirbytext { function __construct($text, $markdown=true) { parent::__construct($text, $markdown); } } 

Теперь в конструкторе вы можете определить новые теги, а также новые атрибуты. Предположим, мы хотим добавить поддержку Gravatar:

  // define custom tags $this->addTags('gravatar'); // define custom attributes $this->addAttributes('size'); 

После того, как вы определили новый тег с помощью addTags() , вы просто реализуете метод с тем же именем, который будет вызываться для визуализации тега:

 /** * Render the gravatar tag, eg (gravatar: [email protected]) */ function gravatar($params) { $email = $params['gravatar']; $size = (isset($params['size'])) ? $params['size'] : 50; $url = sprintf('http://www.gravatar.com/avatar/%s?size=%d', md5($email), $size); return sprintf('<img src="%s" width="%d" height="%d" />', $url, $size, $size); } 

Вы бы использовали это следующим образом:

 (gravatar: [email protected] size: 64) 

Обратите внимание, что атрибут электронной почты здесь называется gravatar; то же самое, что и тег.

Плагины

На Github есть несколько плагинов, включая поддержку Twitter , Instagram и Github , а также такие вещи, как формы контактов , оценка времени чтения и отображение связанных страниц .

Вы можете создавать свои собственные плагины, практически не зная о внутренней работе Kirby — просто поместите класс на site/plugins и используйте его из своих шаблонов по мере необходимости.

Kirby Panel

Кирби на самом деле не предоставляет какой-либо административный интерфейс — вы просто редактируете файлы напрямую. Тем не менее, существует простой интерфейс, доступный в виде отдельного пакета, который называется Kirby Panel.

The Kirby Panel

Чтобы установить Kirby Panel, клонируйте его из Github .

Затем скопируйте папку в папку сайта вашего сайта Kirby, назвав ее panel , например:

 cp -R kirbycms-panel/ /var/www/yoursite/site/panel 

Теперь скопируйте папку panel\defaults и поместите ее в корень сайта:

 cp -R /var/www/yoursite/panel/defaults /var/www/yoursite/panel 

Чтобы указать некоторые учетные данные, переименуйте файл site/panel/accounts/admin.php в [username].php , например:

 // site/panel/accounts/john.php <?php if(!defined('KIRBY')) exit ?> username: john password: 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8 encrypt: sha1 language: en 

Вы можете ввести открытый текст (очень, очень плохая идея), MD5-хэш (очень плохая идея) или SHA1-хэш (немного лучше) — вам просто нужно явно указать, какой вы используете, или оставить его для простой текст.

Теперь, если вы откроете http://yoursite.local/panel в своем веб-браузере, у вас будет доступ к простому административному интерфейсу. Это позволяет вам изменять свойства сайта, а также добавлять / редактировать / удалять контент.

Плюсы и минусы

Давайте кратко рассмотрим некоторые плюсы и минусы Кирби.

Pros

  • Чрезвычайно прост в установке
  • Быстро
  • Результаты в чистой разметке
  • Очень мелкая кривая обучения
  • Очень мало раздувать

Cons

  • Часть кода пытается заново изобрести колесо, например, обнаружение устройства
  • Все находится в публичном корне, что не особо логично
  • Динамические элементы, такие как поиск, в лучшем случае ограничены

Резюме

Я дал вам краткое представление о Кирби, но есть еще много интересного — изучите документацию и руководства , найдите поддержку на форумах или изучите исходный код. В частности, взгляните на kirby/lib/kirby.php вместе с другими файлами в kirby/lib .

Что вы думаете о Кирби, и для чего вы можете использовать его? Вы уже использовали его в производстве? Дай мне знать в комментариях.