Все Запросы На Один Метод

всем привет

зародилась крамольная мысль: а можно ли сделать так, чтобы не создавать каждый раз экшн под новый раздел сайта?

по идее - каждый раздел сайта это отдельный экшн (или может даже контроллер)

то есть заведение нового раздела подразумевает манипуляции с php-кодом и настройками путей

лень…

может задать все разделы-подразделы-страницы подразделов через GET-параметры?

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

какие меня могут ожидать [color="#FF0000"]подводные камни и сложности[/color]?

в качестве эксперимента, создал один метод =


public function actionHandler($sect='',$subsect='',$page='')

{

	if(!empty($sect) and empty($subsect) and empty($page))

	{

		$this->render('/site/handler/sect');

	}

	elseif(!empty($sect) and !empty($subsect) and empty($page))

	{

		$this->render('/site/handler/subsect');

	}

	elseif(!empty($sect) and !empty($subsect) and !empty($page))

	{

		$this->render('/site/handler/page');

	}

	else

	{

		$this->render('index');

	}

}

настроил URLы в конфиге =


'/' => 'site/index',

'/page/<view:\w+>' => 'site/page',

'/<_a:(page|contact|login|logout|captcha|error)>' => 'site/<_a>',

'/<sect:[a-z0-9\_\-]+>/<subsect:[a-z0-9\_\-]+>/<page:[a-z0-9\_\-]+>' => 'site/handler',

'/<sect:[a-z0-9\_\-]+>/<subsect:[a-z0-9\_\-]+>' => 'site/handler',

'/<sect:[a-z0-9\_\-]+>' => 'site/handler',

'/handler' => 'site/handler',

создал пункты в меню =


array('label'=>'раздел', 'url'=>array(

    '/site/handler', 

    'sect'=>'publications')

    ),

array('label'=>'подраздел', 'url'=>array(

    '/site/handler', 

    'sect'=>'publications',

    'subsect'=>'articles')

    ),

array('label'=>'статья подраздела', 'url'=>array(

    '/site/handler', 

    'sect'=>'publications',

    'subsect'=>'articles',

    'page'=>'very-long-page-name')

    ),

вроде бы работает…

что скажете, народ?

p.s. речь идет о фронтенде

первое с чем столкнулся - отлов ошибок при запросе несуществующих страниц

в силу того, что методы и настройки УРЛов заданы максимально прозрачно

отлов таких ошибок возможен только по проверке данного ключа GET-запроса на наличие в БД

Зачем оно вам? :blink:

Первый камень это то что видел своими глазами). Сайт делалася на CI c 1 контроллером на все, который в итоге вырос до 20к строк кода. Поверьте лучше такого не делать. Через ftp с ним работать стало невозможно (ide падали и жутко тормозили), дублирование переменных и функций стало ночным кошмаром, ну и еще много чего неприятного. В итоге были сделаны контроллеры для каждого раздела сайта.

Ну и я уверен что это не единственная проблема, вылезут и прочие. Зачем переизобретать колесо? Я делаю все разделы в виде контроллеров, некоторые модулей, практика показывает что работать с такой структурой очень удобно.

  • хочется свести к минимуму колдовство с кодом

  • управлять сайтом через БД = хотя бы скрыть/показать пункт(раздел/подраздел/подподраздел) сайта в меню

  • вообще хочется иметь "домашний" движок/CMS для оперативных различных личных нужд с минимальными первичными настройками и всем управлением из админки

фильтры, опять же, с accessRules

А оно вам сильно надо через ДБ управлять структурой сайта?

Вы не пытаетесь сделать фреймворк для создания фреймворков по созданию сайтов?

в принципе - нет: ведь есть готовые решения в виде Drupal или WordPress

нееее… что вы! я бы предпочел задействовать фреймворк для создания CMS для создания сайтов

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

я больше чем на 50% завершил работу по созданию такой плюшки но там много подводных камней и очень далеко от совершенства так что я отказался далее разрабатывать проект

но я увидел прекрасные возможности в компосере и лёгкой сборке проекта и поддержке

скоро выпушу статью полноценную с примерами

в 2 словах

я не стал делать CMS я разработал ряд приложений которые позволяют удобно настроить работу + возможность разделения бэкенд фронтенд в принципе всё что необходимо для работы + ещё не доделал работа с языковыми пакетами но уже скоро

согласен - что все не просто

и архитектуру надо продумать и стандарты всякие

инсталлер делать не хотелось бы - разве, что придется разработать относительно унифицированную базу данных и инсталлировать только ее, ну еще соединение с ней настроить (в конце концов в ВордПрессе вручную же соединение настраивают в конфиге)

зачем CMS-ку инсталлировать? залил на сервер и дело с концом

удачи и ждем!

p.s. хабрить будете?

Мне кажется, или вы изобрели CViewAction? :) Хотя я им всё равно не пользуюсь, т.к. у меня простые страницы хранятся в базе данных и загружаются по переданному id или url.

да вряд ли… :)

CViewAction, насколько я понимаю, принимает только один GET-параметр (или ошибаюсь?), который служит для определения вызываемого вида статичной страницы — то есть передать ему цепочку из 2-4 ключей = не получится, а надо именно так…

ограничение, что первый символ должен быть буквой, видимо справедливо — пока не знаю

p.s. другой разговор, что типы отображаемых материалов могут содержать контент, который может сильно отличаться по способу его формирования — это да! и впихнуть "невпихуемое" может не получиться — когда попробую и осознаю, то поделюсь результатами