В последнее время почему-то активизировалась тема о том, что якобы MaxSite CMS идеологически неверно построена. Нужно было делать по туториалу CodeIgniter, а я, подлец, сделал по-другому и теперь, якобы нельзя совместно с MaxSite CMS делать «классические» CodeIgniter-приложения.
Основные претензии сводятся к тому, что в MaxSite CMS используется единый контролер, что не нравится фанатам CodeIgniter, которые не в состоянии продвинуться дальше прочтения хелпов.
Я решил, вместо того чтобы крутить пальцем у виска, объяснить и продемонстрировать использование MaxSite CMS с «классическим» CodeIgniter-приложением.
Но, для начала немного объяснялок.
Устройство CodeIgniter таково, то методы с контролерами определяются из URL вот по такой схеме:
example.com/class/function/id
Контролер - это файл с классом, который ассоциируется с URL. Например
example.com/blog/
Будет вызван файл controllers/blog.php в котором должен быть класс Blog. Если мне нужно вызвать контролер с явно указанным методом, то вызываем так:
example.com/blog/page
То есть контролер/класс Blog, в нем метод page. Еще можно указать прочие параметры, например id:
example.com/blog/page/id
В данном случае id будет передан как параметр метода page.
Это «классическая» схема работы CodeIgniter, где контролеры и их методы имеют жесткую структуру и, соответственно, предопределенный набор URL.
Любой, мало-мальски мыслящий человек понимает, что при таком подходе невозможно задать произвольные URL. Например я хочу, чтобы
example.com/hello
Выводилась страница с короткой ссылкой hello. А также
example.com/contact
Подгружался файл contact.php.
Потом появится другой клиент и скажет, что его не устраивает hello, пусть это будет about, а contact заменить на you_message. Потом появится третий и скажет вообще всё поменять к чёртовой матери и убрать этот contact, как источник спама.
Таким образом уже на этапе разработки необходимо предусмотреть возможнось произвольных методов/контролеров. Именно по этой причине в MaxSite CMS используется _remap(), метод который перекрывает «стандартное» определение методов контролера.
То есть мы можем определить один контролер и в его _remap() получать вызываемый метод. Дальше мы анализируем этот метод и решаем что с ним нужно делать.
Также в CodeIgniter можно задать дефолтный контролер. То есть вместо того, чтобы вызывать
example.com/blog/page/id
Мы можем указать в качестве дефолтного контролера - blog и тогда запросы сократятся до вида:
example.com/page/id
Делается это через роутинг в файле конфигурации routes.php. Для MaxSite CMS указан дефолтный контролер maxsite. Соответственно у нас есть и controllers/maxsite.php. В нем уже используется _remap(), дальше идет инициализация ядра системы и т.д.
Если вы дочитали до этого места и вы все равно не поняли, то вы либо невнимательны, либо не знаете даже азов CodeIgniter. Потому что уже сейчас вы должны сообразить как подключить произвольное CodeIgniter-приложение.
Продемонстрирую.
В комплекте CodeIgniter есть контролер welcome. Соответственно скопируем файл welcome.php в application/controllers и welcome_message.php в application/views. Я понятия не имею (условно) как и что там реализовано, но мне нужно вызвать по адресу example.com «содержимое» welcome.
Идем в routes.php и пишем:
$route['default_controller'] = "welcome";
Обновляем наш example.com и вуаля!, видим «Welcome to CodeIgniter! бла-бла-бла».
Ок, скажете вы, но теперь мы хотим получить доступ к MaxSite CMS! И будете правы, потому что роутер для MaxSite CMS настроен так, что если адрес содержит несколько сегментов, разделенных слэшем «/», то управление передается в контролер maxsite. Вы можете набрать example.com/admin и убедиться, что прекрасно попадает в админку MaxSite CMS.
Видите, изменили одну строчку, и уже какой результат!
Но, если вы делаете свое CodeIgniter-приложение, то скорее всего у вас должен быть другой роутер, например могут быть «blog», «post» и т.д. и всё это отдельные контролеры и их методы. Так что нужно сделать? Правильно, просто переписать условия в роутере!
Например мы хотим получать все запросы на welcome. Делается так:
$route[':any'] = "welcome";
Давайте теперь переиграем задачу. Пусть по умолчанию будет работать MaxSite CMS, а для перехода к welcome будем использовать адрес вида:
example.com/my
Меняем роутер так:
$route['default_controller'] = "maxsite"; $route['my:any'] = "welcome";
Переходим на заданный адрес и замечательно видим, как работает наш уже любимый welcome. При этом у нас также замечательно работает и MaxSite CMS.
Надеюсь, что данный экскурс в routes.php поставит большую и жирную точку на тех, кто утверждает, что в MaxSite CMS нельзя использовать «классические» CodeIgniter-приложения.
Комментариев: 14 RSS
1DVF04-09-2009 15:13
Отослал бы сразу к http://code-igniter.ru/user_guide/general/routing.html. Кому нужно, поймёт.
2TX04-09-2009 15:34
очень забавное объяснение. А главное -- раскрывает суть обвинений в сторону движка...
Скорее всего, большинство обвинений в своей основе сводятся к тому, что Вы в своем движке отошли от ООП. Ваш движек просто использует роутинг для запуска своего котроллера и.... и все. Ну еще часть библиотек используются.
Лично для меня -- уход от ООП -- вот главный момент. Но это уже дело вкуса и стиля программирования.
3Admin04-09-2009 15:38
Еще что-нибудь скажете? Я как раз собираю подобный бред в коллекцию. :coolsmirk:
4JiLiZART04-09-2009 18:03
Я бы назвал MaxSite одной из примочек\плагинов\библиотек, коих полно на официальном ресурсе фраемворка, просто MaxSite базируется как CMS со своей структурой. И никаких правил она в принципе не нарушает. Подключается также как и множество других рюшечек для CI.
@TX: перед автором стояла задача сделать Wordpress подобную систему, но намного лучше. Свою задачу он выполнил.
PS
Нравится новаторская система регистрации, через 1 комментарий =). Нигде такого не встречал, впервые увидел когда поставил mso.
5Аноним05-09-2009 08:30
Извините, что не в теме просто отчаялся уже, моя проблема изложена вот здесь: http://mywordpress.ru/support/viewtopic.php?pid=52198
Сайт http://www.blog.khlyupin.ru
Помогите, чем можете!
6Admin05-09-2009 08:50
Хм... Я с автообновлением никогда не работал, но наверное нужно откатить версию WordPress назад, чтобы его обмануть и попробовать еще раз автообновление.
Скорее всего WordPress хранит данные о результатах обновления в своих опциях в БД. Можно попробовать вручную изменить это значение. Так на вскидку это «update_core». Точнее не скажу.
7Аноним05-09-2009 10:49
Систему не ставил, но судя по этому посту, ничего страшного при интеграции не должно происходить, так как всё сделанно используюя именно стандартные возможности CI.
8Zmei07-09-2009 08:49
Молодец Максим! Честно говоря у меня терпения бы не хватило на "разжёвывание" подобных вопросов. Считаю подобные статьи крайне полезными, не будем забывать о начинающих разработчиках.
9Аноним13-09-2010 12:31
уже два часа как я услышал про MaxSite CMS ...
первый час небыло пределов радости, неужели я нашёл под код игнитер CMS-ку как базис под будущие проэкты, которую смогу расширять .... почитал .. полазил в админке и тп ... с точки зрения пользователя - прекрасный текстовый процессор...
второй час это час разачарований ....
сперва наткнулся на эту статью в блоге автора
http://maxsite.org/page/maxsite-cms-and-codeigniter#cut
почитал ... вроде как правильно написано всё, сразу и непонятно к чему придераются и почему кто то где то нападает что maxsite нарушает идеологию CI ... ведь можно использовать рутинг как там и написано ...
и дальше поигравшись как пользователь я полез смотреть в код с профессиональной точки зрения как программист который использует CI как основной фрэймворк вот уже на протяжении 5-6 лет... тут то я пожалуй понял за что упоминались нападки ....
заходя в каталог templates я совершенно не ожидал увидь НЕ темплейты а микс пхп+хтмл в стиле 90х годов ... при чём идеалогия темплейтов искажена абсолютно (а про MVC подход то я вообще молчу - его просто нет)
это полнейший откат к стилю 90х ... вопрос - зачем понадобился CI ? можно использовать пир библиотеки или просто набор функций и писать в стиле 90х смешивая всё в одну кучу ... это к сожалению было полное разочарование
[b]Почему ? вот объективный взгляд:[/b]1) темплейты это микс хтмл+пхп во всех возможных вариациях - нет единого стиля да и темплэйтами это сложно назвать. почему ? объясню чуть ниже...
1.а) используется альтернативный синтаксис пхп
1.б) используются хтмл тэги через echo ''.$variable.'';
1.в) используется хтмл с просто огромными вставками пхп в котором есть пункт 1.б)
2) есть один офигенно-здоровенный common.php (сорри если ошибся пишу по памяти) в котором намешано абсолютно всё и хтмл тэги по типу 1.б) и функциональный подход и ООП подход и всё в одном файле - просто явные 90е годы
я так думаю что это должно бы было быть моделью раз там сосредоточение и формирование запросов к базе ... но это не модель а всё вместе... просто кусок олд-стайл и бэд-стайл пхп в котором намешано всё до кучи ... :(
3) ну думаю ... может остальные файлы хоть на контроллеры будут похожи ... и снова промах и снова в них намешано всё ...
то есть MVC отсутствует - как сказали бы при СССР - как классовый враг :)
это я могу назвать ни как иначе как откат ко временам Советского Союза в программировании...
теперь возвращаясь к так называемым темплэйтам ... я никого учить нехочу - мы тут все грамотные ... но может вспомните для чего темплэйты создавались ? что бы облегчить жизнь дизайнерам(или веб-мастерам называйте как хотите) и отойти от самого программного кода ... что бы человек имеющий весьма смутное представление о программировании пользуясь простейшими логическими операторами и единым подходом/стилем к данным операторам мог работать с дизайном ... в папке же "templates" понятие темплэйты в классическом понимании этого подхода отсутствует как второй идеологический и классовый враг. как я написал выше там всё намешано и логика и функции и хтмл и всё с разными подходами и даже пару коннектов к базе нашёл ... ну и понятное дело пхп ООП в темплэйтах, пойдите расскажите НЕ программисту про ООП, пусть пользуется :)
ребята, я глубоко уважаю ваши старания и я понимаю сколько вы вложили труда в эту ЦМС НО опять таки мой вопрос заданный выше [b]"а зачем вам CodeIgniter ?"[/b]
ради класса коннекта к базе и паре других классов с хелперами ?
с таким подходом CI ненужен вообще ...
почитайте пожалуйста ещё раз вот тут (первая ссылка по запросу в гугле "зачем нужны фреймворки") http://www.simplecoding.org/kak-sozdat-svoy-site.html
и обратите [b]внимание НА "А фрэймворк кроме того определяет архитектуру приложения."[/b]
к сожалению данная CMS ничего общего с архитектурой CodeIgniter-a и MVC не имеет. это просто готовое решение которое с код-игнитером не должно иметь ничего общего :(
фрэймворки создавались для того что бы объеденить группы единомышленников и задать определённые стандарты в написании кода используя определённую структуру, определённые программные решения, пусть даже весьма расплывчатые (всегда найдётся индус который с радостью во вьюхе напишет функцию, обратится на прямую к базе или напишет кучу пхп ООП кода) НО стандарты (жаль что пхп не питон)... когда другой программист работая с системой будет себя чувствовать почти как дома ...
так что вот так ... такое вот глубокое разачарование меняпостигло ... и это не просто нападка, как мне кажется это вполне аргументированная критика ...
10Аноним13-09-2010 14:10
Мда, тянет на целую статью. Аргументация, правда, слега все таки хромает. Во-первых Maxsite все таки работает и может дать сто очков вперед многим другим. Во-вторых, почему Вы решили, что автор ничего своего не должен вкладывать, а слепо следовать идеологии CI и на шаг от нее не отступать? Собственно потому это Maxsite с использованием CI, а не CIю Ну и в-третьих, если Вы так давно используете CI, у Вас должно быть море своих наработок с ним, зачем Вам понадобился MaxSite?
Ну а по поводу шаблонизации, мда, тут я согласен, надо упрощать, максимально. В общем я так понял, что главные Ваши претензии именно к шаблонизации, но это же можно было короче написать ;)
11Аноним13-09-2010 14:17
Максим, в общем не слушайте никого по поводу идеологий CI. Продолжайте развивать СВОЮ CMS, она получается добротной. Но шаблонизацию, я бы тоже попросил упростить, для дизайнеров действительно, чем проще и меньше программного кода, тем он лучше состряпает обертку. Идеально было бы вообще в единственном файле весь HTML код сосредоточить, а для блоков, модулей, виджетов уже и отдельные шаблончики со своим HTMl кодом/ Но это так, пожелание :)
12Admin13-09-2010 14:25
Я признателен вам за столь большой комментарий. :) Отлично понимаю, что CodeIgniter-программист хочет во всем видеть только реализацию по примерам хелпа, но главная притягательность CodeIgniter, как раз и заключается в его гибкости. Если вы потратите еще два часа на изучение MaxSite CMS, то увидите, что система достаточно активно использует CodeIgniter-библиотеки, хелперы да и само «ядро» CodeIgniter. Поэтому ваш вывод относительно нужности CodeIgniter MaxSite CMS ошибочен. Даже если отказаться от CodeIgniter, то нужно будет изобретать/заимствовать аналогичные библиотеки и хелперы. По-моему и ёжику понятно, что мы получим такой же фреймворк, как и CodeIgniter.
А вот, что касается CodeIgniter, то стоит отметить, что он заточен под одиночный сайт (аля-хомяк), где используется строгое именование ссылок, простенькая выборка из базы, шаблон с фиксированной структурой и т.п. Для CMS нужен совершенно другой подход, поэтому в MaxSite CMS и используется собственная архитектура, где CodeIgniter отведена роль, ради которой он, собственно, и создавался: предоставить в распоряжение приложения свои «кирпичики».
13Gor27-09-2010 07:58
удивляюсь над "дэбилами" которые критикуйт этот движок!
тот же вордпресс который родился в 2000-ом нууу оооочень современный работает 10 раз медленнее... лично проверял!!!
Прелесть максайта в том что даже чайники могут им управлять с лёгкостью и самый большой + что на максайте можно учится!!!
критикавать максайт должны его пользовотели, а таких я не видел и никак не пойму как могут такие "продвинуте" программист критикавать движок!
для меня самое главное в максаете:
1. Скорость офигенная!!! даже на самом дешёвом хостинге работает как ферари!!!
2. Очень простой! можно использовать и учится на нём одновременно!
3. И самое главное то что на нём можно сделать великолепный блог/сайт и зарабатывать деньги!!! вот и всё...
Максайт будет одним из лучших движков в будущем! (имхо)
п.с. сори за г.а. :)
14Aleksandr Stepanov21-10-2011 09:49
Спасибо за статью!