Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > проектирование CMS


Автор: fesor 23.7.2009, 00:21
Где-то с пол года назад пришла в голову идея написать свою недоCMS для своих проектов. Ну идея развивалась и стала перерастать в что-то вроде мегапроекта в целях самообучения (коммерческий успех сомниваюсь что будет).
Собственно стал проектировать свою CMS (ООП, MVC) и задумался о ее архитектуре (уже есть версий 8, и все они чем-то не устраивают).


Начнем с собственно приложений:
Код

class GuestbookController extends Controller
{
    
    public function actionIndex()
    {
        $data = Posts::model()->limit( $this->params('PerPage')*($_GET['page']-1), $this->params('PerPage') )->findAll();
        if($data === false)
            view::error(404);
        else
        {
            view::Render( 'list', $data );
            view::RenderPaginator( $this->params('PerPage'), $_GET['page'], Posts::model()->count() );
        }
        
    }
    
    public function actionAdd()
    {
        new BBCodeParser;
        $data = array();
        $data['name'] = $_POST['name'];
        $data['email'] = $_POST['email'];
        $data['website'] = $_POST['website'];
        $data['text'] = $_POST['text'];
        $data['time'] = time();
        if( Posts::model()->add($data) )
            view::setFlashMessage($this->message("Post added successfully"), $_POST['currenturi']);
        else
            view::setFlashMessage($this->message("Error during post submission"), $_POST['currenturi']);
    }
    
}

//Generated by Helly SDK
class Posts extends Model
{
    
    public function TableName()
    {
        return 'guestbook_posts';
    }
    
    public function rules()
    {
        return array(
            array( 'id', 'type'=>'int', 'uniq'=>true ),
            array( 'email', 'type'=>'email', 'lenght'=>128 ),
            array( 'date', 'type'=>'date'),
            array( 'website', 'type'=>'url', 'lenght'=>128 ),
            array( 'name', 'type'=>'string', 'lenght'=>64 ),
            array( 'text', 'type'=>'text'),
        );
        
    }
    
    //execute only on add/update row
    public function beforeValidate()
    {
        new BBCodeParser;
        $this->data['text'] = BBCodeParser::parse($this->data['text'];
    }
    
}

Этот простой НЕРАБОЧИЙ пример просто демонстрирует основное строение приложения для моей CMS.
Собственно там не все еще ясно. Очень важный момент - избавление от зависимостей. Допустим можно сделать в контроллере вызов функции через view::Render() а можно через $this->view->Render(). Я немогу решить какой способ более простой и удобный.

Также вопрос относительно реализации админки. Собственно как сделать админ интерфейс для приложенйи? Сделать отдельный файл типа backend.php в котором будет класс с функциями и параметрами? Но это неудобно.... хотя может это добнее чем писать/верстать все самому. А так будет все работать на примере админки из Симфони. Может где можно подсмотреть хорошую реализацию?

Автор: nerezus 23.7.2009, 01:10
Вопрос: устройство каких существующих CMS ты уже изучил?
Почему ты не используешь CMF для написания CMS?

Ответь.

Автор: fesor 23.7.2009, 11:24
Устройство DLE (врага назо днать в лицо), Joomla 1.5, Drupal, MediaWIKI, IPB... собственно все...

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

Автор: nerezus 23.7.2009, 16:59
fesor, это CMS.

Попробуй для начала создать проекты на ZF/Symfony/Kohana. Потом сравни с RoR/Django.
И только потом пиши свое, иначе тупо убъешь свое время без получения *полезного* опыта.

Автор: fesor 23.7.2009, 17:39
Приходилось работать с Django, пару проектов писал на таких фреймворках как CAKEPHP и MZZ. YII больше всех пока нравится.

Собственно вопрос не стоит "надо или нет и где черпать вдохновение". Просто... нету идей как реализовать админ интерфейс красиво и стандартизированно.

Автор: nerezus 24.7.2009, 05:33
fesor, Структура модулей с отображением в виде композита(т.е. модуль может отображать в себе другие модули).

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

Это советы. А вопроса не понял.

Автор: NetJunky 24.7.2009, 07:04
fesor, интерфейс для админки посоветовал бы брать из WP но чую, что там достаточно сложно написано. Пару раз открыл файлы, но особо не вникал. Визуально там все достаточно удобно.

Также интерфейс админки IPB посоветовал бы. Всё остальное как-то не очень. Хотя почём мне знать. Это только ИМХО.

Автор: MoLeX 24.7.2009, 07:44
Цитата(NetJunky @  24.7.2009,  07:04 Найти цитируемый пост)
интерфейс для админки посоветовал бы брать из WP

вордпресс?

Автор: NetJunky 24.7.2009, 07:55
Да. Он щас там достаточно симпотичный.

Автор: fesor 24.7.2009, 09:58
ну тырить сам интерфейс я не собираюсь. Вариант с WP наверное я рассмотрю так как по удобству мне эта система очень нравится.

nerezus, вопрос состоит в том, чтобы придумать как разработчик будет создавать админинтерфейс для своих приложений и как различные компоненты будут встраиваться в него (по мере необходимости). Ну типа как генератор админ интерфейса у Symphony

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)