Кто писал свою CMS - есть вопрос

ONK

Пассивист PHPСluba
440hz, примитивный ляп бросается в глаза

.....Warning: array_merge() [function.array-merge]: Argument #2 is not an array in /usr/home/440hz/www.art.440hz.spb.ru/oops/trees.inc on line 165

Warning: Invalid argument supplied for foreach() in /usr/home/440hz/www.art.440hz.spb.ru/htdocs/start.inc on line 160.....

потом в файле start.inc потенциальная дыра:

if(!empty($_SERVER)) extract($_SERVER);
if(!empty($_GET)) extract($_GET);

ведь говорят же, не пользуйте глобальные переменные, меньше проблем.

В целом код выглядит не плохо, есть много решений совпадающих с моими. Но ещё есть куда расти и развиваться ;)
 

440hz

php.ru
ONK
это старая рыба для заказчика. ошибки появились с переходом на новый PHP. Исправлять было лень ... Прикол был в объектной настройке и разработке модели "на лету". заказчику понравилось.

использование глобальных переменных пока не привело к краху или взлому сайтов. так, что слово "потенциальная" таким и остается.

растем ... развиваемся ...
 

Alesto

Новичок
Автор оригинала: Royal Flash
ООП подходит для написания CMS коммандой программистов. Одиночке лучше его не использовать.
Не обязательно. Вы выбирает ООП чтобы было удобно работать командой, хотя тот используется для хорошей структурированности и оптимизации кода.
 

Royal Flash

-=MaestrO=-
Alesto
А что мешает структурировать и оптимизировать код без ООП?!

P.S. Использовать ООП, или нет - похоже на вопрос, о использовании ядерной энергии в мирных целях - каждый делает так, как считает нужным, "правых" или "левых" в этом вопросе не бывает.
 

Alesto

Новичок
Я смеюсь над спорами медду ООП-программерами и процедурными. Использую все, что удобно в данном продукте.
 

zk

Новичок
Это всё хорошо.
А никто не видел какого-либо руководства или хотябы общего списка рекомендаций по написанию CMS или её ключевых элементов.

Ну или просто подробного описалова внутренней структуры какой либо CMS?

Сам я CMS конечно-же писал. Но это всё было на ламерском уровне.
Теперь есть серьёзная задача, и хочется узнать как это делаеться правильно. Чтобы была хорошая расширяемость, модульность и проч...
 

Demetrius

Новичок
Автор оригинала: zk
А никто не видел какого-либо руководства или хотябы общего списка рекомендаций по написанию CMS или её ключевых элементов.
Ну или просто подробного описалова внутренней структуры какой либо CMS?
Теперь есть серьёзная задача, и хочется узнать как это делаеться правильно. Чтобы была хорошая расширяемость, модульность и проч...
Гм. Если я правильно понимаю суть, то CMS - это система управления контентом. Следовательно, какой контент - такая и система нужна для управления им. :) Есть много попыток создания "универсальной" CMS, но IMHO до такого ещё как до Пекина [зацензурено мной] :), поскольку максимум, чего можно добиться сейчас - это админки для статических страничек, структуры сайта, дизайн там всякий, ну и подключение модулей. С последними как раз и получается нестыковка, т.к. мало ли что может понадобиться. Если сайт нетривиальный, то скорее всего его основная функциональная часть потребует своего эксклюзивного модуля. Есть решения движка, которые позволяют "администратору" сайта пихать в базу свои скрипты и исполнять их с помощью eval(), но IMHO это бред, по ряду причин. Посему, считаю необходимым грамотное проектирование сайта, по результатам которого можно однозначно определить, какой будет контент и как им можно управлять.
 

440hz

php.ru
zk
при больших проектах от стандартной CMS остается практически 0, т.к. всё приходится писать руками. Я давно таскаю "ядро", а всякие там "модули" пишу под конкретную задач ибо даже новости на разных сайтах разные не говоря уж о других, более сложных данных.
 

Popoff

popoff.donetsk.ua
440hz
а я всегда думал, что везде все одинаковое. в чем, например, отличие новостей на разных сайтах? может, можно написать эту службу так, чтобы ее можно было адаптировать под разные варианты?
 

440hz

php.ru
Popoff
на 1 сайте:
заголовок+текст
на 2 сайте
заголовок+лид+текст
на 3 сайте
заголовок1+заголовлк2+лид1+лид2+текст+картинка
на 4 сайте
еще больше+что-нить еще.

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

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

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

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

zk

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

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

В последнем выпуске phpInside рассматривался пример написания модуля, почитать было интересно, так вот интересен собственно пример написания ядра.

2-440Hz, я согласен что таскание полей для универсальности с одной стороны не есть гут, но с другой стороны это незначительно понижает производительность, и выгод от такого подхода очень много. А переписывание одного и того же кода, это конечно хорошо =))), но всё же повторное использование кода гораздо более выгодно.
 

zarus

Хитрожопый макак
>>А переписывание одного и того же кода, это конечно хорошо, но всё же повторное использование кода гораздо более выгодно
Copy&Paste - величайшее изобретение человечества в процессе борьбы с ленью... Берешь ядро, берешь подходящую предыдущую CMS и... считай, переписываешь с нуля. Может даже где и ошибки найдешь...
 

Popoff

popoff.donetsk.ua
440hz
Дело в том, что ты не первый (из людей, у которых есть опыт и кому можно доверять в подобном вопросе) говоришь, что проще написать заново.

Я понимаю, о чем ты говоришь, когда говоришь о ресурсах. Лишнее поле - лишнее время выполнения - лишняя нагрузка на сервер - лищнее занимаемое дисковое пространство.

Мне только не совсем понятно, почему те, кто борется за ООП, как одну из заслуг ООП ставят возможность повторного использования кода, а когда речь доходит до реальных проектов, то почему-то начинают говорить, что проще написать заново?

Я же использую у себя процедурный подход из тех соображений, что подавляющее большинство задач, решаемых на РНР, строятся по одной из двух схем: 1) пришли данные - записали - вывели сообщение и 2) пришли данные - вывели данные. В очень редких случаях возникает необходимость моделирования сложных объектов. Например, прямо сейчас я могу припомнить работу с мылом, мастер оплаты (это как в винде есть несколько окошек, где пользователю задают вопросы и он может между ними ходить, нажимая вперед-назад и после последнего окошка выполняется действие - оплата выбранным способом в выбранной валюте и т.п.). Но это очень-очень редкие случаи.

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

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

Что еще интересно, противники ООП обычно говорят, что объекты - тормознутее процедур и функций. Вон даже в статье по приведенной выше ссылке подобная мысль высказывалась. Я, используя функции, вообще говоря, сомневаюсь, что эта "тормознутость" сколько-нибудь значительна; использовать процедуры вместо ООП из соображений скорости - это значит экономить на спичках; я использую процедуры исключительно_только потому, что ООП мне не видится нужным (в большинстве задач). Но мне почему-то кажется, что стремление к экономии ресусов за счет удаления нескольких условий (какие из полей показывать, а какие - нет) и за счет удаления нескольких полей (пустой blob, если я не ошибаюсь, занимает 4 байта на запись) - это тоже экономия на спичках. Несравнимо больше ресурсов уходит из-за непродуманных алгоритмов, запросов, неправильно расставленных индексов.

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

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

А еще мое внимание привлек такой вопрос: вы действительно считаете, что сделать клики в настройках модуля - это сложнее, чем написать модуль с нуля? Может, Вы как-то не так модули пишете, что их настрока столь сложна? У меня никогда никаких проблем с настройками не было и я как-то не думал, что они могут возникнуть.

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

zarus

Хитрожопый макак
[offtop]
>> с очень низкой посещаемостью
Какую посещаемость считать "низкой" и "высокой"? Не праздный вопрос. Есть какая-нибудь более-менее "официальная" градация посещаемости по количеству обращений к сайту в день/месяц?
[/offtop]
 

Popoff

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

-~{}~ 28.12.05 14:11:

zarus
Низкая - до 1000 человек в день. Мой popoff.donetsk.ua в этом месяце посещают 104 человека в день.
 

440hz

php.ru
Автор оригинала: zk
То есть мне было бы интересно узнать как люди реализуют подобные системы, и как обычно пишется само ядро
исходники тут. уже постил, но для тебя персонально ...

-~{}~ 28.12.05 15:17:

Автор оригинала: Popoff
Может, Вы как-то не так модули пишете, что их настрока столь сложна? У меня никогда никаких проблем с настройками не было и я как-то не думал, что они могут возникнуть.
я не занимаюсь написанием модулей в понимании "модуля CMS" о чем уже говорил. я пишу разу то, что надо под конкретную задачу с учетом прошлого опыта.

может просто еще не дорос до построения модульной системы. 8)
 

Popoff

popoff.donetsk.ua
Вот еще скрипты обменника - там настраивается все, что только возможно настроить, вплоть до списка валют, всех процентных ставок, в зависимости от суммы, способов округления, способов оплаты, разделов (обычные-игровые-какие-нибудь еще), можно любому выдать привилегии на управление несколькими или какой-то одной конкретной настройкой, настраиваются все выводимые сообщения. Это все сделано на неограниченном числе разных языков и в разных шаблонах. Никакой проблемы с настройками не существует. Или я чего-то не понимаю?
 

440hz

php.ru
Автор оригинала: Popoff
Никакой проблемы с настройками не существует. Или я чего-то не понимаю?
да все в порядке. 8) ты классно пишешь и многие твои идеи мне близки. просто мы пишем чуток по разному. и НЕ более того ...
 

Popoff

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

дальше речь, видимо, нужно вести о том, что можно обобщать, а что - нет. но я думаю, что это такое же искусство, как выбор классов в ООП.
 
Сверху