Содержание
CMS своими руками. Теория велосипедостроения / Хабр
Как много веселых ребят
И все делают велосипед.
А один из них как-нибудь утром
Придумает порох.
Виктор Цой.
Сначала я хотел написать в раздел «Я пиарюсь» статью о том какой я молодец и какую замечательную штуку сделал но, немного поискав в сети, я без удивления обнаружил, что я совсем не единственный в своем роде. Тогда я решил пойти от обратного: наверное, практически каждый Веб-программист хотя бы раз в своей жизни пытается написать полноценную CMS. При этом, в процессе проектирования (а это процесс, зачастую, наступает уже во время написания кода) у разработчика непременно возникают вопросы. С этими вопросами он обращается к поисковикам и попадает на сайты тех, кто по подобным граблям уже прошествовал.
Итак, я стал смотреть, по каким же запросам попадают ко мне начинающие «разработчики велосипедов», и постарался осветить некоторые вещи, которые для меня самого были неочевидны в начале работ.
1. MVC — наше все!
Где бы не заходил разговор о разработке веб приложений, сразу же всплывает модная аббревиатура MVC (Model-View-Controller). Этот подход гласит, что интерфейс надо отделять от логики, а логику от данных. Не скажу, что я в полной мере проникся этими идеями, но то, что изменения в дизайне (или даже дизайнах) не должны затрагивать логику кода — я готов отстаивать с пеной у рта:)
Вот тут и покоятся грабли номер один: внешний вид надо отделить от логики программы. Как это сделать — каждый решает для себя сам. По этому вопросу копий сломано не мало: тут и различные шаблонизаторы, и xslt преобразования, и просто php+html вынесенные в отдельные файлы. Выбор большой, но «серебряной пули», как водится, не существует: на одной чаше весов лежит гибкость, на другой — понятность. Даже Smarty, с его «программированием для самых маленьких» многим пользователям кажется сложным. Так что если мы ориентируемся на пользователя, который хочет поставить систему «из коробки» и подпилить ее для своих нужд с минимальными знаниями программирования, то тут стоит поломать голову.
Кроме того, дизайны должны быть заменяемые и, возможно, даже «на лету». То есть нужно предусмотреть их удобное хранение и редактирование. И еще одна вещь, которая многими проигнорирована: дизайн должен быть легко редактируем и обновляем. Если вам приходилось адаптировать дизайн какого-нибудь бесплатного форума, состоящего из двух сотен шаблонов, в которых все намертво «прибито» таблицами и откуда-то «из логики» вставляются куски JavaScript, то вы понимаете, что именно видеть не хочется.
Я придумал такую конструкцию: в пользовательском дизайне присутствует только то, чего нет в базовом дизайне. То есть в самом минималистичном случае дизайн состоит из пустого каталога с названием дизайна. Понятно, что в этом случае дизайн будет выглядеть в точности так же как базовый, так как все недостающие части будут позаимствованы от него, но как отправная точка — это очень удобно. Если в дизайне появляется css, то система автоматически переключается на него (при этом html все равно заимствует из базового). Тоже самое и с JS. Что мы получаем при этом: в пользовательском дизайне лежат только те файлы, которые он сам сделал. Пользователю не надо помнить, какой файл он исправлял, а какой попросту скопировал из базового дизайна в начале работы. Так же на сайте отображаются практически все нововведения базового дизайна без правки пользовательского. Мне такая система показалось удобной и логичной, хотя некоторым она кажется несколько неожиданной. Взять ли ее на вооружение или придумать свою — решать вам.
2. Структура сайта
Приступаем к написанию ядра. Что должно делать ядро? А делать оно должно всю «грязную» работу: определять настройки сайта, права и настройки групп пользователей, используемые модули, шаблоны, параметры кэширования, локализации и т.п. То есть, чтобы к тому моменту как начинали работать подключаемые модули, они могли получить все интересующую их информацию от ядра. Звучит жутковато, но все это сравнительно легко пишется и работает, если четко представляешь себе взаимодействие элементов.
Я для себя решил, что сайт будет представлять собой не кучу страниц, сваленных куда-то в БД, а строгую иерархию. В итоге структура сайта древовидная и недостающие части, как и в случае с дизайнами, наследуются от родителей. Структура групп пользователей тоже древовидная — права и настройки так же наследуются от родителей. Файлы локализаций и модули так же имеют простенькую иерархию. Четкая иерархия позволила переложить на движок всякие неприятные вещи типа автоматической генерации карты сайта, различных меню, раздачу прав (да-да: чтобы дать право на что-то нескольким группам, совсем не обязательно редактировать каждую — достаточно определить иерархию) и т.п. Живи да радуйся! И все бы ничего, если бы не грабли:
Грабли первые. Кэширование.
Пока занимался проектированием своего «мегадвижка» было как-то не до кэширования… Да и подумаешь — что там сложного? Поместил страницу в переменную, сохранил ее в файл, а в следующий раз ее оттуда показал. Делов-то… в любой момент можно приделать! Ой… а у нас для зарегистрированных пользователей другая страница… Гм… ну подумаешь — две страницы в кэш сохраним! А еще в шапке надо вывести «привет, Вася»… ну значит этот фрагмент в шапке не кэшировать. и такой же фрагмент в подвале… и в середине… Мда… Я еще бы надо разные части страницы кэшировать на разные сроки… Садимся и переписываем движок и систему кэширования на кэширование блоками — чтобы каждый блок имел свой срок жизни.
Грабли вторые. Кэширование.
Как?! Опять кэширование? Уже ведь сделали все красиво! Ну да… сделали… и оно даже работало, пока не встала задача генерировать контент для каждого пользователя на основе его личных настроек. Размер кэша при этом растет со скоростью реактивного истребителя, а его содержимое устаревает много раньше, чем будет запрошено повторно. Вместо ускорения сайта получаем его замедление, и гигабайты никому не нужных кэшированных страниц… Главным скриптом на сайте становится «его величество» инвалидатор кэша. Мда… переписываем движок снова: на этот раз реализуем кэширование на уровне запросов к БД, так как это самое узкое место в производительности. Переписали… все — нирвана.
Грабли третьи. Кэширование.
Смотришь на свое творение и чувствуешь себя полным идиотом: вместо того чтобы сохранить страницу целиком, каждый раз ее создаю. А ведь кэширование задумывалось с точностью для обратного! Как же я так лопухнул-то?
Результатом в итоге явилось то, что некоторые модули кэшируются блоками, а некоторые — на уровне запросов. Это позволило месяцами хранить в кэше такие редкоизменяемые вещи как, например, меню сайта.
Урок же для себя я вынес такой: систему надо изначально проектировать таким образом, чтобы на определенных этапах исполнения иметь сгруппированные данные, которые можно легко положить в кэш или взять оттуда. Так же система кэширования не должна быть жестко завязана на движок, так как сегодня вполне достаточно хранить кэш в файлах, а завтра (или даже сегодня вечером) уже подавай работу с memcache-сервером.
В процессе написания движка так же имеет смысл почитать умную книжку про рефакторинг… или почитать ее после написания движка. В любом случае, всем троим (вам, движку и книжке) это может пойти на пользу.
3. Модульность.
Современную систему тяжело представить как «вещь в себе» — она должна иметь интерфейсы для расширения своего функционала. Таким образом, мы переходим к самой вкусной части CMS — написание модулей. Тут тоже полно вопросов: как должен выглядеть модуль, как подключаться к системе и т.п.
В некоторых системах вызов модулей жестко прописан в ядре системы, так что если ты хочешь написать модуль или установить сторонний, то залезайте в исходный код, вооружайтесь мануалом по установке и вписывайте в код соответствующие вызовы. При всем идиотизме подхода, многие системы именно так и функционируют. Есть вариация этого решения: каждый модуль — это отдельный файл в некоем каталоге. В этом случае мы получаем не просто необходимость прописать модуль в ядро, но еще и выполнить его в виде одного файла. Еще встречались варианты с активными шаблонами: то есть вписали в шаблон {module_name} и когда парсер дошел до этого тега — вызывается на исполнение модуль module_name, результат работы которого оказывается на месте тега. Возможно, такой путь и удобен, но в данном случае мы не только не отделили логику от представления, но как раз наоборот — хорошенько их перемешали.
После определенного количества шишек я пришел к системе, которая, возможно, и не является образцом лаконичности и простоты, но мне видится достаточно удобной. Каждый модуль — это отдельный каталог, из которого ядром вызывается всего один файл (index.php). Данный файл может, как выводить «Hello world!», так и подключать файлы управления гиперпространственным квазиизлучателем — это уже как разработчику модуля будет удобно. В том же каталоге лежит xml файл с описанием параметров модуля, возможных настроек и системой прав. Этот файл используется для того, чтобы система могла сама добавлять модули и не перекладывать эту головную боль на пользователя: нажал кнопку «установить модуль» — пожалуйста, получите.
С установкой разобрались. Встает новая проблема — как не позволить пользователю разместить на одной странице, скажем, фотоальбом и, например, форум? К здравому смыслу уповать бесполезно, поэтому нужна типизация модулей. Модуль такого-то типа (я для таких модулей где-то подсмотрел понятие «компонент») может быть на странице только один.
Ну хорошо, компонент на странице будет только один, но остальных-то может быть много — в каком порядке они должны подключаться? Ведь будет глупо, если модуль какой-нибудь переключалки скинов, который в конце своей работы перекидывает пользователя на главную страницу сайта, подключится после того, как отработает модуль анализа динамики поголовья кроликов в брачный период — и результатов анализа не увидим, и время на расчеты потратим. Следовательно, у модулей должен быть оговорен порядок их подключения.
Некоторые вводят для этого аналог никсового runlevel, где для каждого модуля надо прописать между какими именно модулями он должен быть подключен. Как пользователя, меня такое решение повергло в прострацию, но как разработчик я придумал почти тоже самое: модули разделены на три больших группы. Одна из групп — уже упоминавшийся «компонент», две других отличаются только тем, что модули одной группы подключаются до компонента, а другой — после. Причем, это разделение от пользователя я скрыл, так что для него остались только «компонент» и «просто модуль».
Итак, модуль спроектировали, с подключением определились… Теперь надо решить как его настраивать и как к нему допускать. А тут как раз все просто: раз уж у нас ядро предназначено для «грязной» работы, то пусть у него голова и болит — модуль в xml выдал список настроек, а ядро пускай его разбирает, хранит и предоставляет по запросу — тут как раз все просто.
Еще одна проблема, с которой я столкнулся в процессе разработки — передача данных между модулями. По условиям задачки они ничего друг о друге не знают и вызываются ядром в порядке номерков. А вот хочется передать из одного модуля в другой весточку! Для этого я ввел специальный класс для глобальных переменных, куда каждый желающий модуль может что-то сохранить на память тем, кто придет после него. Вот такое, возможно, не очень элегантное решение.
4. Обновления
Всегда хочется иметь самую свежую версию, но совершать для этого минимум телодвижений. Отсюда вытекает желание автоматизировать процесс обновлений. И тут опять существует пусть и не очень обширный, но все же зоопарк решений. Самые прогрессивные предлагают поставить на все каталоги права 777, а на файлы — 666 и тогда «скрипт сам все сделает». То что это дыра в безопасности размером с Гранд Каньон, в общем, никого не волнует.
У меня были идеи относительно двух вариантов: скрипт скачивает обновления во временную директорию, а потом, запросив у пользователя параметры доступа к FTP, обновляет сам себя. Так ему и прав лишних давать не надо, и происходит все автоматически, и обновления гоняются в пределах сервера… вот только придется либо каждый раз запрашивать у пользователя параметры доступа к FTP, либо хранить их тут же на сайте… то есть, все яйца в одной корзине. Поэтому я предпочел другой вариант: пользователь сам скачивает обновления (архивом или через svn), заливает их на сайт, а код на сайте, почувствовав что он стал «новее» вносит необходимые исправления в БД и/или настройки… А первый вариант все же был красивее… но не отважился я.
Это самые запомнившиеся вехи моего «велосипедостроения». Читая это я очень жалею, что в начале работы я не встретил чего-то подобного, а у меня самого было недостаточно опыта и шишек чтобы задать «правильные» вопросы. То что у меня получилось в итоге, вы можете посмотреть здесь и, если у вас появились вопросы, то я готов на них ответить.
Кстати, если у вас появились ответы на незаданные вопросы — я их тоже с удовольствием выслушаю. Ведь опыт — известно, чей сын, а все ошибки совершить в одиночку почти невозможно;)
Создание сайтов своими руками | Up-sait.ru
В данном разделе вы найдете много полезной информации для тех кто хочет сделать сайт самостоятельно своими руками.
Профессиональная разработка сайтов под ключ
30 декабря, 2021 Комментариев нет
Комплексная разработка сайтов недорого – проведение работ одной компанией, что исключает вероятность разночтений одного технического задания. Все технические решения, структура и внутреннее наполнение будут взаимодействовать между собой без ошибок, что
Читать далее »
Сортировка select option по алфавиту
10 марта, 2021 2 комментария
Для того чтобы отсортировать любой список select option по алфавиту либо по имени. Нам понадобится вставить Js код в страницу с нашим списком и задать списку любой класс.
Читать далее »
Как правильно перенести сайт
5 октября, 2020 Комментариев нет
Перенос веб-сайта на новый движок часто вызван отсутствием определенных функций в старой системе. Неправильная миграция может привести к полной катастрофе видимости сайта в обычных результатах Google.
Читать далее »
Трюки и фильтры css
5 октября, 2020 Комментариев нет
Фильтр CSS – это способ применения или сокрытия заданных правил CSS взависимости от типа или группы типов браузеров. Фильтры основаны на недостатках браузеров , таких, как ошибки синтаксического разбора кода
Читать далее »
Зачем нужен блог, заработок на блоге и как вести блог
27 января, 2020 Комментариев нет
“Заработок на блоге”, “создать блог для заработка”, “блог о заработке в интернете”, “зачем мне нужен блог? “, “как правильно вести блог? ” – такие поисковые запросы часто встречаются в поисковых
Читать далее »
Как сделать интернет магазин
24 января, 2020 Комментариев нет
– Чтобы открыть Интернет-магазин, не надо никаких регистраций и бумаг. Достаточно просто создать Интернет-сайт. Зарегистрировать доменное имя просто платить провайдеру за хостинг, – говорит председатель одной из украинских Ассоциации производителей
Читать далее »
Как выбирать тематику для блога
22 января, 2020 Комментариев нет
Будем считать, что первым коммерческим сайтом у Вас будет блог размещённый на собственном домене. Ещё раз скажу почему: блог дёшево сделать, такой тип сайта любят поисковики, блог просто вести и
Читать далее »
Создание сайта с нуля
21 января, 2020 Комментариев нет
Создание сайта с нуля – это процесс, требующий профессиональных методов подхода. Мы рассмотрим Какие виды сайтов создают в Интернете, Как самостоятельно создать сайт с нуля и Что требуется для создание
Читать далее »
Как создавать дизайн сайта
21 января, 2020 Комментариев нет
Как известно, 90 процентов всей информации человек получает через органы зрения. Таким образом, глаза можно смело назвать основным органом восприятия окружающего мира. И от того, насколько качественную и достоверную информацию
Читать далее »
Основные моменты веб-дизайна при разработке сайта
20 января, 2020 Комментариев нет
Сегодня разберем следующие вопросы. Что же действительно является привлекательным? Так ли важен веб дизайн сайта? Всем ли подходит один и тот же дизайн? Какой дизайн больше подходит вашему сайту? 1.
Читать далее »
Search
Лендинг в Краснодаре
Разработка Лэндингов под ключ всего 7 000 руб.
Посмотреть подробнее
Или пишите в WhatsApp
+7 922 461-10-31
Начните работу с CMS с нуля
← Вернуться к руководствам
Putri Karunia • 31.05.2022
Начните использовать CMS для создания блога с нуля. В этом руководстве мы рассмотрим, как создать новую коллекцию и отредактировать элементы внутри
. В этом руководстве мы рассмотрим, как начать создавать блог с нуля с помощью функции CMS и как начать редактирование. ваш блог в Typedream прямо сейчас.
Требования
- Чтобы получить доступ к функции CMS 9, вам необходимо иметь тарифный план Pro.0016
- Вам понадобится учетная запись Notion, зарегистрируйтесь бесплатно →
Что вы будете создавать
Вы будете создавать список постов в блоге с нуля, используя наши таблицы шаблонов. Вот пример того, как это выглядит
Список блогов
Сообщение в блоге
Давайте начнем строить.
Шаг 1. Введите /коллекция
, чтобы добавить блок коллекции
Давайте перейдем к редактору Typedream и добавим коллекцию на вашу домашнюю страницу.
Введите /коллекция
и выберите Коллекция , затем выберите понравившийся шаблон. Давайте выберем ту, что находится под Блог с 3 горизонтально сложенными картами.
Шаг 2. Подключите Notion
Нажмите Connect Data , чтобы подключить учетную запись Notion. Войдите в систему и выберите рабочую область, которой вы хотите поделиться.
Так как мы собираемся копировать таблицу-шаблон, вам не нужно ничем делиться если вы не хотите.
Шаг 3. Дублируйте таблицу шаблонов
Используйте доступную таблицу шаблонов и дублируйте ее в свою учетную запись Notion. Нажмите Дублировать на верхней правой панели.
Примечание. Если дубликат не запускается в Chrome, попробуйте изменить размер окна Chrome.
Шаг 4. Пригласите Typedream за свой стол
В Notion нажмите на три точки ...
в правом верхнем углу. Затем перейдите к Добавить соединения
и прокрутите или найдите Typedream. Вернитесь в Typedream и щелкните значок «Обновить». Теперь вы должны увидеть свою таблицу.
Шаг 5. Выберите шаблон представления коллекции
Это шаблон, показывающий, как отображать список блогов. Затем вы можете сопоставить поля из ваших столбцов Notion с шаблоном.
Шаг 6. Выберите шаблон страницы элемента
Это шаблон для каждого поста в блоге. Вы можете выбрать тот, который вам нравится, и сопоставить поля из столбцов Notion с шаблоном.
Ваш блог готов 🎉
Теперь вы должны увидеть:
- Список блогов на странице, где вы ввели
/коллекция
- Домашняя страница коллекции: Создана новая страница для отображения всех ваших блогов.
- Страниц элементов коллекции: Мы также создали страницу для каждого поста в блоге.
Редактирование сообщений в блоге
Теперь, когда ваш блог настроен, вы сможете редактировать каждое сообщение в блоге на Typedream.
Узнайте, как это сделать, в следующем руководстве →
Предварительный просмотр
Нажмите «Предварительный просмотр» в правом верхнем углу, и вы сможете увидеть, как будет выглядеть этот блог.
Опубликовать!
Нажмите Опубликовать, чтобы опубликовать свой сайт.
Что дальше?
Ознакомьтесь с другими руководствами по Typedream! Все руководства →
Дополнительные руководства
Что такое CMS?
Система управления контентом (CMS) — это функция, позволяющая отображать данные из базы данных, такой как Notion, Airtable и т. д.
Создайте блог с помощью Notion + Typedream
Добавьте блог на свой сайт Typedream с помощью Notion
Начните работу с CMS с нуля
Начните использовать CMS для создания блога с нуля. В этом руководстве мы рассмотрим, как создать новую коллекцию и отредактировать элементы внутри.
Компания
Около
Карьера
СТАТЬ Партнер
Legal
Условия обслуживания
Политика конфиденциальности
Насилие
Ресурсы
Руководства и уроки
.
Контакты
TikTok
Youtube
Электронная почта
Сделано в Typedream
CMS или программирование с нуля, что выбрать для своего сайта?
Хотите создать сайт, но не знаете с чего начать? Вы колеблетесь между с использованием CMS (система управления контентом) или с кодированием с нуля (или кодированием)? Несколько факторов могут помочь вам сделать выбор между этими двумя вариантами (или даже больше, поскольку некоторые CMS имеют разные качества и недостатки). Для этой статьи мы возьмем наиболее часто используемую CMS WordPress ; мы добровольно оставим в стороне Drupal, Prestashop и прочие Wizishop… Таким образом, мы сначала увидим преимущества и недостатки на пустом месте, затем сделаем то же самое для CMS.
С нуля, настройка вашего сайта
К чести, разработать сайт с нуля — это сделать сайт на заказ, сайт специально для вас.
Сайт адаптирован к вашим потребностям…
У вас есть дизайн, который вы хотите, а также все функции, которые вы считаете необходимыми. Ограничений нет. Если вы или ваша команда (или ваш провайдер) обладаете необходимыми навыками, нет границ (кроме той, которая наложена самой технологией…). Контролируя свой сайт, вы не только являетесь хозяином своей безопасности, хозяином используемых технологий и, следовательно, хозяином ваших ссылок и времени загрузки ваших страниц… Затем вы можете правильно разработать свою маркетинговую стратегию в отношении входящего маркетинга и SEO…
…но это требует определенных затрат (времени, денег, …)
Но преимущества заключают в себе недостатки этого творческого подхода. Требуется время , чтобы сайт был, по вашему мнению (и той информации, которую дают вам ваши посетители), максимально совершенным. Более того, для его создания и обслуживания требуется около навыков программирования . Эти недостатки могут заставить задуматься и рассмотреть другой метод — использование CMS.
CMS, выберите готовые решения для создания своего сайта
CMS, ее простота…
После того, как ваша CMS установлена на вашем сервере (некоторые хосты могут установить ее напрямую и бесплатно, как OVH), вам просто нужно выбрать тему и запустить свой сайт . Простой. Вы можете создавать различный контент, перейдя непосредственно через текстовый редактор. Не нужно знать, как кодировать. Конкретные потребности? Вы, вероятно, найдете то, что вам нужно, в различных предлагаемых приложениях; более того, базовые приложения бесплатны… просто и легко в освоении и это главное преимущество…
… но со многими недостатками
Как только вы захотите улучшить безопасность и использовать более специфические функции, приложения могут быстро стать дорогими, или вам придется разрабатывать нужные вам функции (и вы получите недостатки «С нуля» и CMS…).
Чтобы вернуться к безопасности, CMS может вызвать проблем с безопасностью . Действительно, когда на сайте From Scratch есть изъян, ошибку будет не так легко обнаружить, как если бы она была воспроизведена на тысячах, даже миллионах сайтов, использующих одну и ту же CMS, одно и то же приложение, оставляющее бэкдор. С CMS вы не имеют полного контроля над вашей безопасностью (до того, как патч будет создан, тысячи сайтов могут быть заражены, поэтому обновления очень важны).
Кроме того, приложения, плагины и различные патчи, которые вы добавляете на свой сайт, утяжеляют ваш код, в дополнение к функциям, которые вы не используете. Более тяжелый код означает более длительное время загрузки . И долгое время загрузки ваших страниц плохо влияет на SEO…
Вдобавок ко всему, вы должны добавить, что дизайн очень похож и что на вашем сайте может появиться определенная форма дезинфекции, отнявшая значительную часть вашего оригинальность и, возможно, часть ДНК вашей компании…
Подытожим преимущества и недостатки From Scratch и CMS
С нуля | |
+ | – |
Полный контроль | Долго создавать |
Навыки безопасности и SEO | навыки программирования |
Индивидуальный дизайн и особенности | Стоимость |
CMS (система управления контентом) | |
+ | – |
Скорость создания | Небольшая гибкость |
Легкость и простота | Вопросы безопасности и SEO |
Дизайн |
Заключение
Итак, если вы хотите сделать небольшой и простой веб-сайт с несколькими страницами без дополнительных функций, то вы можете использовать CMS, например WordPress (или создать блог, как здесь) без любая проблема.