По мере того как сеть продолжает развиваться, а спрос на эффективность доставки контента возрастает, в борьбу приходят все более тонкие и уравновешенные CMS. Разработчики (front-end и back-end) отходят от таких хитов, как WordPress и Drupal, и переходят на более гибкие, индивидуальные решения. Bolt CMS является одной из этих CMS и гордится тем, что является мечтой для дизайнеров, разработчиков и редакторов контента.
Что касается внешнего интерфейса, то Bolt использует все более популярный язык шаблонов Twig , позволяя внешним разработчикам быстро и аккуратно генерировать шаблоны так, как они хотят и как хотят. С другой стороны, пользовательские типы и поля дают нам свободу организовывать вещи так, как мы хотим. Bolt также построен на Silex с компонентами Symfony , что делает его стабильным, мощным, открытым исходным кодом и бесплатным. Twig, Silex и Symfony находятся под зонтиком Sensio Labs , так что вы гарантированно никогда не оставите другого в пыли. Это отличное сочетание!
У Bolt есть действительно хорошо выложенная документация на их сайте, а также тег Stack Overflow с растущим числом постов. Другие способы поднять очки или получить поддержку включают трекер проблем GitHub . Читайте на странице сообщества для получения дополнительной информации.
Здание с болтом
В этой статье мы рассмотрим следующие ключевые моменты, которые должны хорошо настроить нас для создания нашего первого проекта с помощью Bolt:
- Требования, настройка и установка
- Основная конфигурация и настройка темы
- Разделение файлов на шаблоны
- Представление и создание типов контента
- Извлечение контента из записей базы данных
С этого момента я рекомендую держать документы открытыми в вашем браузере, потому что мы будем часто ссылаться на них. Хорошо, давайте копаться в!
Требования, настройка и установка
Для работы болта требуется следующее:
- PHP 5.3.3 или выше
- Доступ к SQLite, MySQL или PostgreSQL
- Apache с
mod_rewrite
или Nginx
Установка PHP также имеет несколько дополнительных требований, но вы можете прочитать о них здесь . Для эффективной и оптимальной работы админ-панели рекомендуется использовать современные браузеры. Конечно, это только для административной стороны. Внешний интерфейс будет обслуживаться различными браузерами в зависимости от того, как вы его создадите.
Есть три способа установки Болта. Я собираюсь использовать вариант 1, способ командной строки. Давайте откроем терминал и оттуда запустим следующие команды:
curl -O http://bolt.cm/distribution/bolt-latest.tar.gz tar -xzf bolt-latest.tar.gz --strip-components=1
С этого момента убедитесь, что правильные файлы и каталоги имеют правильные разрешения. Сделайте это, выполнив следующее:
chmod -R 777 files/ app/database/ app/cache/ app/config/ theme/ extensions/
Краткое примечание о 777 разрешениях
777 — это число зверя , и мы все должны знать об этом. Вы должны знать, почему Bolt требует 777 для определенных каталогов:
- Это требуется в
/files/
, потому что Bolt должен писать в этот каталог при загрузке медиа через администратора. - Это требуется каталогом
app/cache/
, потому что Bolt автоматически кэширует и извлекает кэшированный материал из этого каталога. -
app/database/
разрешения полностью необязательны и совершенно не нужны, если не используется SQLite. Если вы используете SQLite, Болту нужно будет написать в этот каталог, чтобы обновить файл sqlite. -
app/config/
иtheme/
permissions также являются необязательными и требуются только в том случае, если пользователи хотят редактировать тему и файлы конфигурации через администратор bolt. - Каталог
extensions/
также является необязательным и требуется только в том случае, если вы будете загружать расширения через администратор Bolt.
Вы должны быть полностью осведомлены о последствиях использования разрешений 777 и попытаться настроить свой сервер, чтобы избежать необходимости делать это. Двигаемся дальше.
Продолжая настройку
Из коробки Болт прекрасно работает с SQLite (файловой базой данных). Мы собираемся настроить его для работы с MySQL, хотя это, вероятно, более вероятный сценарий на рабочем сайте. Давайте настроим это быстро. Поскольку мы уже в терминале, давайте перейдем в каталог app/config
. Болт дает нам файл config.yml.dist
по умолчанию для начала, который готов к работе с SQLite. Давайте скопируем это и переименуем в config.yml
чтобы мы могли использовать MySQL, и откроем это в редакторе.
Мы редактируем раздел базы данных в соответствии с документами Bolt, но не забудьте указать свои собственные значения в:
database: driver: mysql username: root password: password databasename: bolt host: localhost port: 3306
Укажите свой виртуальный хост в корневой каталог проекта (самый простой способ сделать это, см. Homestead Improved ) и перейдите по нужному URL в браузере. Теперь вам должна быть представлена стартовая страница Bolt, предлагающая создать первого пользователя. Давай и делай это. Теперь вы можете войти в панель администратора, а также просмотреть интерфейс! Круто, давайте перейдем к типам контента — сердце Болта.
Основная настройка и настройка темы
По умолчанию Bolt загружается с темой base-2014
. Это отлично подходит для слежки и начала работы, но очень вероятно, что вы захотите создать свою собственную тему и создать ее с нуля. Прежде всего, откройте проект в любом редакторе. Перейдите в каталог theme
и создайте новый каталог под названием my-theme
(вы можете называть его как угодно, на самом деле). Теперь мы хотим изменить эту тему на нашем сервере.
Помните тот файл конфигурации, который мы редактировали перед первой загрузкой нашего проекта? Ну, теперь это доступно через админа. Перейдите в Configuration > Main configuration
, и он загрузит файл. Здесь есть целый ряд параметров конфигурации, но сейчас мы остановимся только на трех:
- Отредактируйте имя сайта по названию вашего сайта.
- Отредактируйте
payoff
в слоган вашего сайта - Измените
theme
на вновь созданную тему (my-theme
в моем случае)
После этого сохраните файл конфигурации. Теперь создайте файл index.twig
внутри вашей темы и просто введите некоторый шаблонный код:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>My Website</title> <link rel="stylesheet" href="http://bootswatch.com/superhero/bootstrap.min.css"> </head> <body> <nav class="navbar navbar-default"> <div class="container"> <div class="navbar-header"> <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="#">Site Title</a> </div> <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> <ul class="nav navbar-nav"> <li><a href="#">Lorem</a></li> <li><a href="#">Ipsum</a></li> <li><a href="#">Dolor</a></li> </ul> </div><!-- /.navbar-collapse --> </div><!-- /.container --> </nav> <main> <div class="container"> <div class="jumbotron"> <h1>Hello, world!</h1> <p>Welcome to my first bolt site.</p> </div> </div> </main> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script> </body> </html>
Обратите внимание, что я включил шаблон начальной загрузки, чтобы у нас было немного эстетики. Вы, вероятно, захотите ссылаться на свои собственные файлы CSS, и не волнуйтесь, я покажу вам, как это сделать в ближайшее время. Нажмите «Обновить» в окне интерфейса и вуаля, ваш новый сайт ждет вас, чтобы наполниться вкусными шаблонами и контентом! Но с множеством смешанных страниц, это чрезвычайно неустойчивая и ужасная практика — копировать и вставлять целые куски повторно используемого кода шаблона в новые файлы, снова и снова. Давайте углубимся в шаблоны.
Разделение файлов на шаблоны
Как и на любом современном веб-сайте, особенно CMS, мы хотим использовать различные файлы шаблонов по мере необходимости. Если вы перейдете к разделу «Создание шаблонов» документации, вы получите некоторую ценную информацию, которая поможет вам. Основываясь на рекомендуемой файловой структуре Bolt и нашем текущем шаблоне, мы можем легко извлечь две основные части из нашего существующего файла index.twig
:
-
_header.twig
-
_footer.twig
Теперь наш основной индексный файл должен выглядеть так:
{% include '_header.twig' %} <main> <div class="container"> <div class="jumbotron"> <h1>Hello, world!</h1> <p>Welcome to my first bolt site.</p> </div> </div> </main> {% include '_footer.twig' %}
Соответствующие части были извлечены в их соответствующие файлы, но я не буду включать их здесь, чтобы преувеличить очевидное. Теперь, когда мы коснулись основ шаблонов, давайте перейдем к типам и записям контента, т. Е. Созданию, хранению и извлечению контента.
Введение и создание типов контента
Здесь мы говорим о CMS, поэтому, естественно, мы собираемся извлечь некоторый контент и записи из базы данных. Давайте предположим, что мы создаем небольшой бизнес-сайт и хотим иметь три статических страницы и одну страницу отзывов с несколькими отзывами. Итак, мы смотрим на этот вид навигации:
- home - about - testimonials - single testimonial - ...
- contact
Давайте рассмотрим эту идею до конца этой статьи, чтобы нам было над чем поработать. Это подводит нас к следующей основной и, возможно, основной функции Bolt CMS — типам контента и записям. Они объединяют два слова в документах, потому что так мы ссылаемся на них в коде, поэтому теперь мы будем называть их «типами контента».
Так что же такое тип контента? Вот небольшая выдержка из документации по Болту:
Весь контент в Bolt хранится в базе данных логичным и гибким способом. В общем … у вас есть представление о том, каким контентом вы собираетесь управлять. Все эти разные типы контента называются Contenttypes в Bolt, и вы можете добавить столько разных типов контента, сколько вам нужно.
Помимо пары обязательных «полей», которые используются внутри, мы в значительной степени свободны в определении структуры Contenttype. В случае наших статических страниц мы могли бы включить поля title
, teaser
, image
и body
. В случае наших отзывов нам, вероятно, понадобится что-то вроде name
, position
, body
и date
. Давайте рассмотрим это немного подробнее.
Если мы перейдем к нашей панели администратора, вы заметите, что в разделе «Содержимое» мы можем ввести три различных типа контента:
- страницы
- Записи
- Витрины
На самом деле это типы содержимого, и все они определены в нашем файле contenttypes.yml
. Болт облегчает нам Configuration > Contenttypes
, и мы можем получить доступ к этому файлу напрямую через администратора ( Configuration > Contenttypes
). Изучив текущее содержимое этого файла, давайте продолжим и удалим все, кроме типа содержимого pages
. Наш файл должен теперь выглядеть так:
# Pages - used for the static pages like about, contact, etc. pages: name: Pages singular_name: Page fields: title: type: text class: large group: content slug: type: slug uses: title image: type: image teaser: type: html height: 150px body: type: html height: 300px template: type: templateselect filter: '*.twig' taxonomy: [ chapters ] recordsperpage: 100
Когда вы сохраните это, вы должны заметить, что у вас больше нет доступа к entries
и типам контента. Давайте попробуем создать свой собственный отзыв, прежде чем добавлять какой-либо контент. Перейдите к разделу «Определение типов контента» в документации, и давайте немного прочтем. Нам определенно потребуются name
и name
singular_name
, и наши поля будут такими, как мы упоминали выше. Давайте добавим наш тип контента:
# Testimonials testimonials: name: Testimonials singular_name: Testimonial fields: name: type: text class: large position: type: text body: type: textarea height: 150px
Сохранить, и теперь вы можете получить предупреждение, чтобы пойти и обновить базу данных. Следуйте инструкциям, обновите, и теперь мы можем добавить отзыв. Давайте быстро создадим новый отзыв, добавим в него несколько фиктивных данных и сохраним его. Мы только что создали наш первый тип контента, добавили новую запись и сохранили ее в базе данных. Мы еще не совсем там, хотя. Вы, вероятно, задаетесь вопросом, как получить доступ и отобразить эти записи. Что ж, давайте посмотрим на это в следующем разделе.
Получение содержимого из записей базы данных
Мы собираемся вернуться немного назад, потому что мы проигнорировали несколько важных функций. По умолчанию Bolt ищет record.twig
шаблона record.twig
для вывода «записи» или записи типа контента. Если мы выполним предварительный просмотр только что созданного record.twig
, мы получим сообщение об ошибке, сообщающее, что Болт пытался использовать record.twig
, а его не существует. Давайте создадим это и добавим какой-нибудь фиктивный контент:
{% include '_header.twig' %} <main> <div class="container"> <div class="page-header"> <h1>Record!</h1> <p>This is a generic record.</p> </div> <div class="page-content"> <h2>Record Stuff Here</h2> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sint eum tempore optio corporis aspernatur tempora temporibus vero maxime consectetur dolorum dolore vel numquam aut iure, esse, repudiandae nemo animi, vitae.</p> </div> </div> </main> {% include '_footer.twig' %}
Теперь, если мы нажмем кнопку «Обновить» в нашем предварительном просмотре, мы увидим, что мы создали общую страницу записи с фиктивными данными. Это подводит нас ко второму пункту. Маловероятно, что шаблон для отзыва будет таким же, как шаблон для статической страницы, поэтому давайте исправим это. Вернувшись к документам определения типов контента , мы увидим еще несколько интересных вещей:
-
record_template
— шаблон для отображения одной записи типа контента -
listing_template
— шаблон для отображения коллекции записей типа контента
Как мы уже знаем, по умолчанию, record_template
будет использовать record.twig
шаблона record.twig
по умолчанию. Для listing_template
он будет искать файл listing.twig
по умолчанию. Однако мы можем переопределить их в нашей конфигурации нашего типа контента. Давайте обновим это так:
# Testimonials testimonials: name: Testimonials singular_name: Testimonial fields: name: type: text class: large position: type: text body: type: textarea height: 150px listing_template: testimonials.twig record_template: testimonial.twig
Теперь давайте создадим соответствующие файлы testimonials.twig
и testimonial.twig
. Вот два файла, которые я создал:
testimonials.twig
{% include '_header.twig' %} <main> <div class="container"> <div class="page-header"> <h1>Testimonials!</h1> <p>All the testimonials be here.</p> </div> <div class="page-content"> <p>All testimonials...</p> </div> </div> </main> {% include '_footer.twig' %}
testimonial.twig
{% include '_header.twig' %} <main> <div class="container"> <div class="page-header"> <h1>Testimonial!</h1> <p>This is a testimonial.</p> </div> <div class="page-content"> <p>Testimonial content...</p> </div> </div> </main> {% include '_footer.twig' %}
Теперь мы можем получить доступ к странице обзора в браузере, например, через /testimonials
, и к нашей первой записи через /testimonial/1
(которая является структурой по умолчанию для записей). Давайте сосредоточимся на одном отзыве пока и получим данные. Внутри одной страницы записи у нас есть доступ к значениям record
. Чтобы улучшить читаемость кода, мы можем получить к нему доступ по имени записи, в нашем случае — по testimonial
. Если мы пойдем дальше и введем {{ dump(testimonial) }}
в нашем шаблоне записи, мы увидим всю запись, выведенную на экран.
Так как нам получить доступ к его частям? С помощью шаблонов Twig мы можем получить доступ к различным значениям с помощью простых точечных обозначений. Другими словами, если бы мы хотели «имя» человека, написавшего отзыв (как определено в нашей конфигурации типа контента), мы бы получили к нему доступ следующим образом:
{{ testimonial.name }}
Имея это в виду, давайте настроим наш шаблон для добавления содержимого:
{% include '_header.twig' %} <main> <div class="container"> <div class="page-header"> <h1>{{ testimonial.name }} | <small>{{ testimonial.position }}</small></h1> <time>{{ testimonial.datecreated|date("jS F, Y") }}</time> </div> <div class="page-content"> {{ testimonial.body }} </div> </div> </main> {% include '_footer.twig' %}
Теперь, создание большего количества отзывов и просмотр их должны быть легкими. Теперь давайте перейдем к нашему шаблону testimonials.twig
и попытаемся получить все отзывы. Как и раньше, мы можем получить доступ к «записям» по имени. Мы можем обратиться к records
или, в этом случае, к testimonials
. Идите и выбросьте это на свою страницу, и вы увидите их все.
Шаблоны Twig предлагают аккуратные способы перебора массивов вместе с некоторыми фильтрами. Я не буду вдаваться в подробности, но вы видели первый фильтр в действии выше, когда мы форматировали дату. Я буду использовать другой фильтр, чтобы обрезать тело отзыва до 100 символов. Наш шаблон отзывов теперь должен выглядеть так:
{% include '_header.twig' %} <main> <div class="container"> <div class="page-header"> <h1>Testimonials</h1> <p>All the testimonials for this great company be here.</p> </div> <div class="page-content"> {% for testimonial in testimonials %} <div class="testimonial"> <h3>{{ testimonial.name }} | <small>{{ testimonial.position }}</small></h3> <p>{{ testimonial.body|excerpt(100) }}</p> </div> {% endfor %} </div> </div> </main> {% include '_footer.twig' %}
И вот, пожалуйста! Перейдите к /testimonials
, и вы увидите зацикленный форматированный вывод. Теперь идите вперед, заполните свою страницу about и страница контактов и попробуйте вывести записи в шаблонном файле generic record.twig
. Если вы чувствуете, что вам нужен определенный шаблон для страниц, создайте файл page.twig
и page.twig
же, как описано выше. Теперь вы на правильном пути к созданию своего сайта именно так, как вы хотите.
Примечание к изображениям и медиа
Одна вещь, которую мы здесь не затронули, это то, как Bolt обрабатывает загрузку медиа. Если вы пришли из WordPress, вам, скорее всего, будет интересно, как WordPress обрабатывает мультимедиа с его надежной и (лично говоря) простой в использовании медиатекой. Болт постоянно находится в стадии разработки, и нет никаких сомнений, что здесь есть место для улучшения. Но как только вы привыкнете к системе управления файлами, это станет немного проще.
В терминологии Bolt изображения хранятся «в стеке». Это просто означает, что есть стопка изображений, которые вы загрузили вручную. Если вы посмотрите на структуру каталогов, вы увидите каталог files
. Здесь хранятся загрузки. Когда вы загружаете файл в администраторе, он сохраняет его в подкаталоге, ссылаясь на год и месяц загрузки. Теперь, если у вас есть обычное поле HTML в вашем типе контента, и вы пытаетесь вставить туда изображение, вы можете быть немного запутаны в этом вопросе. Там нет реальной кнопки для загрузки изображения! Почему это?
По умолчанию Bolt отключает кнопку изображения в редакторе WYSIWYG. К счастью для нас, это легко доступно из основного файла конфигурации. Внутри администратора зайдите в settings -> configuration -> main configuration
и прокрутите вниз до раздела WYSIWYG. Там вы можете изменить настройку изображений на true. Вернувшись в редактор записей, вы теперь можете вставлять изображения так, как вы ожидаете.
Куда пойти отсюда
У Болта есть гораздо больше, чем то, что мы видели, и это то, с чем приятно работать. Это многофункциональный, но только когда вы хотите, чтобы это было. Он остается легким и быстрым на протяжении всего процесса разработки и производства, а также выглядит просто и естественно. С этого момента я рекомендую прочитать документацию. Это действительно хорошо написано и легко следовать, и это отвечает на многие ваши вопросы. Моими двумя главными разделами выбора в документах для повышения ваших знаний и рабочего процесса будут выборка контента и теги шаблонов . После этого вы смотрите на нумерацию страниц, поиск, расширение Bolt и работы.
Спасибо за чтение, и я надеюсь, что эта статья дала вам отличное представление о создании с помощью Bolt CMS. Если вы являетесь разработчиком WordPress или Drupal, я настоятельно рекомендую вам открыть свой разум для новых платформ, таких как Bolt. Вы не будете разочарованы вообще!