помощь с организацией ЧПУ

djkoff

Новичок
Уважаемые опытные и знающие программисты.
Подскажите, пожалуйста, решения такой задачи.

Есть сайт с ЧПУ. Без ЧПУ ссылки на страницы выглядят так domain.ru/index.php?p=all или domain.ru/index.php?p=post? а с ЧПУ domain.ru/all или domain.ru/post .
В .htaccess правило прописано так RewriteRule ^([-a-zA-Z0-9_]+)$ index.php?p=$1 [L]

Всё работает превосходно, но требуется, чтоб у некоторых разделов были разные шаблоны страниц, но при этом ссылка ЧПУ имела похожий вид. Например как это реализовано в вконтакте. Там у групп, у личных страниц, сообщений и т.д. шаблон страницы разный, но ссылка имеет по сути одинаковый вид.
 

ksnk

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

djkoff

Новичок
ksnk, да. в принципе вы описали научными и правильными словами то, что я написал выше.
но как это реализовать в php коде и в настройках .htaccess ?
 

ksnk

прохожий
Ну я же описал. Каждый элемент страницы может оставлять свои "пожелания" по виду основного шаблона. К примеру, при выводе погодного плагина может выполнится примерно такой код
PHP:
class weather_plugin {
...
    function init(){
        $month=date('n');
        if(in_array($month,array('1','2','12'))
           $this->application->options('template.season','winter');
...
        if(!empty($this->data['precipitation']))
            $this->application->options('template.precipitation',$this->data['precipitation']);
    }
Сначала выбираются все данные, которые нужно будет отобразить, потом, перед началом рендеринга основного окна, по параметрам выбирается нужный шаблон.
Если выводятся данные какой-то персональной страницы, эти данные должны оставить параметр template.style='personalpage' и так далее.
 

djkoff

Новичок
спасибо большое за разъяснения! вы мне очень помогли.
 
Сверху