Объектно ориентированный подход к построению CMS на PHP
24.10.2008estdomains почил в бозе предшествовала запись на блоге Программы для блогов. Закончив читать очередной роман про драконов, коим себя не ощущаю, но симпатизирую, в час ночи, я проснулся еще не было шести. Покрутившись и так и сяк, я понял, что не усну - все мои мысли занимает новая CMS - уже слишком много придумано, чтобы было легко отделаться от столь пагубной идеи. Я наверно страшно старею, раз мне хватило менее 5 часов для сна, а раньше бывало и 10 не хватало...
Засев со сранья за писание движка, подтянул свое плохое знание php - я его действительно знаю средне, так как считаю его недоязыком, и не уделял пристальное внимание, вот до сих пор не совсем понимаю механизм ссылок в этом языке - они там являются не совсем ссылками, а точнее я не догоняю в какой приблизительно ассемблерный код (о ужас! я даже асм понимаю!!) превращается скрипт. На дельфи мне просто - я знаю как писать оптимизированные программы, которые путем использования простых приемов написания кода работают быстро и не требуют лишних ресурсов. В php оптимизация кода для меня темный лес.
Реализовал сегодня механизм событий. В результате например подписка плагином на изменение постов выглядит следующим образом: Posts->OnPostEdit = Plugin-
>EventPostChanged; Расшифровывая внутреннею работу получаем следующий алгоритм:
- присваивание происходит через метод __set класса TPost, и добавляется в список событий для PostEdit
- пост вызывает событие у своего владельца Post->DoPostEdit, DoPostEdit проходит по всему списку событий, среди которых вызывает Plugin->PostChanged
Чтобы это было возможно принимается соглашение об именовании функций и свойств:
OnEventName - обработчик события EventName
DoEventName - вызывает подписанные на событие EventName функции классов
EventMyHandler - имя функции, которое подписали на событие.
Другими словами принимаются три префикса имен On, Do, Event для автоматического управления событиями. Попозже остановлюсь более подробно о механизме обработки событий.
Следующим открытием для меня явилось возможность использования похожего механизма для обработки тем. Не вдаваясь в теорию, на практике это будет следующим образом, например в теме пишем
head
title[title]/title
...
в квадратных скобках значение title, которое должен подставить обработчик тем. Например CodeIgniter предлагает обыкновенную замену из уже заполненного массива. Я предлагаю вызов функции title, которая может быть в каком либо классе, например TThemes. Для большей гибкости можно породить потомков от этого класса для перекрытия метода или повесит событие OnGetTitle - выбор широкий.
Идея состоит в том, чтобы максимально сделать прозрачным шаблон, разгрузив, но не исключив, от использования конструкции вида - и это в лучшем случае. Мне показался мой подход очень интересным и перспективным, уже при наличии реализованных стандартных функций, типа приведенного выше. Темами я не занимался вплотную, следует изучить подходы принятые в Wordpress, у Макса и в зебруме - по сусекам и сделать компиляцию идей.
Постовой: в блогах появились новые записи
• Постовой - плагин взаимного цитирования ссылок на новые записи
• Восстановление удаленных комментариев
Мой блог находят по следующим фразам
• как восстановить базу mysql
• utf-8 кодировки mysql
• настройка OpenVPN
• wordpress crosspost blogger
• delphi 7 скачать
• проблема с кодировкой в базе данных
← Ранее Про CMS и не только
Позже Как назвать движок блога? →
Комментарии (23) на запись “Объектно ориентированный подход к построению CMS на PHP”
Пингбеки
Оставить комментарий
Как сказать, себе дал неделю срок - если не будет первой работающей версии то выкину без жалости. Не все так уж и сложно - у меня есть одна самописная CMS: используется только на одном сайте, нигде не выкладывал и не планирую выкладывать исходники. Когда ее писал, то думал, что пишу движок сайта под конкретную задачу. Есть шансы, что уложусь в этот срок, движок планирую без базы, на файлах.
Да кстати почему умиляет OnPostEdit? На мой взгляд очень удачная находка. Изложил правда несколько сумбурно.
У меня в текстовом редакторе (там где проверка на ошибки) нет русского языка.Не подскажете,как быть?
И без баз! Вдохновенья тебе и идей!!!
Хочется сделать движок не привязанным к наличию или отсутствию баз данных. С базами, безусловно, проще, ну а иначе бы они не были так нужны. Для простых задач можно попытаться обойтись без баз. Обуревают меня подозрения, что придется городить огород на пустом месте, где цена вопроса один sql запрос.
"Как называется редактор? Или где он? А то на спм похоже, но е уверен"
если не в тот раздел значит спам))))?
обычный редактор в админке,там где пишем статью.Есть кнопочка "проверить на ошибки" там куча языков н русског нет.
Ничего не знаю изнать не хочу про админку, пользуюсь своим блог клиентом, скачать отсюда:
<a href="http://blogclient.ru/download/socialblogclientsetup.exe" rel="nofollow">http://blogclient.ru/download/socialblogclientsetup.exe</a>
про него и могу дать ответы, про остальное - увольте, вы бы еще про Windows и MS-Word что нибудь спросили...
После этого напрочь отбило читать дальше. Можно хоть один аргумент о "недоязычности" пхп?
Это очень серьезные недостатки для больших проектов, и совсем не имеет значение дляскриптов в 10 строк.
По молодости лет я специально заучивал подобные фразы, чтобы при случае блеснуть своей эрудицией...
Мое почтение! :)
>> Да кстати почему умиляет OnPostEdit? На мой взгляд очень удачная находка.
Для аля-событий давным-давно используют механихм хуков/ловушек. ;)
Вообще, если нет опыта работы с php и возникает ощущение «недоязыка», то я бы посоветовал не кидаться во что-то сложное, вроде CMS, а начать с чего-то простенького. Ну там обработка форм, оболочка для sql, вывод данных и т.п. И лишь когда вы поймете, что php с лихвой перекроет ваши потребности, тогда уже можно и браться за что-то стоящее.
Хуки неоднократно встречал в исходниках php - они всегда раздражали, так как прозрачный код должен сам себя описывать, а вызов функции с несколькими параметрами - стиль середины прошлого века. Тут скорее дело в религии. Кстати описанный мной стил обработки событий я уже реализовал - ничего сложного.
Свою способность писать грамотный php код я оцениваю на 4 из 5. Дело совсем не в знании языка и его библиотек, скорее в подходе к планированию алгоритмов, структур данных и прочего, что не имеет непосредственного отношения к кокнретному языку. Для всего остального достаточно справочника функций php под рукой. Чтобы не быть голословным - я выложу написанное на вселенский суд :)
Было бы здорово выводить ссылку на rss-ленту комментариев записи. А то тяжеловато отследить новые комменты. ;)
Но вообще, конечно, разговор беспредметный. Будет код, будет и что обсуждать. Я у себя тоже начинал с мыслей вслух и, оглядываясь назад, могу сказать, что получилось немного по-другому. Так что ждем-с!
:)
http://blogclient.ru/comments/feed