CMS PTC

Собираем здесь завершённые проекты, использующие Yii. Один проект — одна тема.
vladikamira
Сообщения: 92
Зарегистрирован: 2013.01.11, 23:13

CMS PTC

Сообщение vladikamira »

Доброе время суток формучани.

Откровенно говоря решил похвастаться разработанной CMS, разрабатывал его примерно 3 месяца, и она пока сыровата (в моём понимание продукта она еще будет долго "сырой"), в процессе разработки сделал на ней 3 сайта. Цели которые я ставил для себя, сделать более менее универсальную CMS на которой я мог бы довольно быстро разрабатывать не большие сайты (новостные, блог, каталог\интерент магазины) + доп. функционал который нужен конкретно заказчику (аля ERP система). Демо версии пока нету, ни как не дойдут руки, но выложу скриншеты и ссылки на завершенные проекты ( дизайны и верстка сайтов не обсуждаются, что было на том и делал ).

Что она умеет:
- создавать меню, с разделами сайта (древовидная структура)
- создавать в разделе каталог с отдельным разделами (древовидная структура)
- гибкая настройка каталога, группировка товара, для разделов можно указывать группу товаров, производители, параметры для раздела каталога с наследием и без, способы отображения карточек товаров и так далее.
- работа с формами как с заявками (см. первый скрин), но это не до конца еще реализована, хочу дописать универсальный конструктор форм, а пока каждая форма = модели, которую надо добавлять в ручную.
- добавления: текст, материал, фотогал., формы в раздел меню сайта или в раздел каталога.
- модуль материалы (см. на http://pogruzon.ru )
- SEO: сайта работает полностью на ЧПУ (реализовал свои URLManager для этих целей), возможность редактирование META информации для любой страницы сайта.

В итоге сейчас при создании нового сайта я в основном изменяю только view-ки, т.е. по сути шаблоны под конкретный дизайн сайта, что делает очень удобно (для меня по крайне мере) + если вношу доработки которые затрагивают модель БД или уже существующею логику работы того или иного функционала, всё это мержится в основную ветку CMS.

Что планирую сделать в ближайшие время:
- поддержку поддоменов\мультсайтность, региональные поддомены (это когда один дизайн и куча поддоменов с различной ифнф. на каждом поддомеене)
- поддержка разделения прав пользователей;
- переделать формы (create\upate) в модальные окна;
- универсальный конструктор форм. За пилю свой с блэкджеком и шлюхами, или посмотрю что есть в расширениях для yii
- отдельный модуль для uploader-а и динамической работы с изображениями, который будет полностью реализовывать функционал http://www.yiiframework.com/extension/image (обрезка, увлечение, ротация, водяной знак и так далее ), для этой работы скорей всего буду нанимать людей, так как там будет много очень JS кода + AJAX , а у меня времени на это вряд ли хватит в ближайшие время.

з.ы. спасибо создателям Yii Framework, за очень хорошую документацию и лаконичный, быстрый код)

завершенные проекты:
http://www.kvintstroj.ru/ (первый, надо было делать много правок на нём для SEO оптимизации, а там чё то лес PHP кода в фунционального да и ?d=1&r=3a&t=ttt... везде, по этому пришла идея сделать отдельно для него CMS)
http://kaminplaza.ru/ ( хорошо получилось, особенность в том что на нём по сути два разных каталога )
http://pogruzon.ru/ (новостной портал, с развитием фунционала блока ... плюс для него будет в дальнейшем созданна поддержка rss ленты для материалов + YBlog )


По требованиям к платформе хостинга:
PHP 5.3+ ( 5.2 как старшный сон если честно)
БД MySQL myisam, ибо innodb не поддерживается на многих хостингах, но в перспективе кончено хотелось перейти на модель innodb, хотя я чего-то в последние время смотрю в сторону postgresql.

Производительность:
В принципе забивал каталог до 2000 товарных позицией, в 30 разделах каталога, всё собиралось примерно около 0.5-0.7 секунды, я имею вывод на странице сайта, в АП подольше. Хотя вопрос по производительности я пока не ставил.
Вложения
Раздел сайта с модулями на странице
Раздел сайта с модулями на странице
Image 4.png (95.57 КБ) 11501 просмотр
Разделы меню
Разделы меню
Image 3.png (91.54 КБ) 11501 просмотр
Главная страница
Главная страница
Image 2.png (52.14 КБ) 11501 просмотр
Последний раз редактировалось vladikamira 2013.04.07, 22:27, всего редактировалось 2 раза.
vladikamira
Сообщения: 92
Зарегистрирован: 2013.01.11, 23:13

Re: CMS PTC

Сообщение vladikamira »

еще 3 скрина
Вложения
Публикация материалов
Публикация материалов
Image 7.png (97.32 КБ) 11500 просмотров
Просмотр материалов
Просмотр материалов
Image 6.png (118.35 КБ) 11500 просмотров
Добавление модуля материалов
Добавление модуля материалов
Image 5.png (63.89 КБ) 11500 просмотров
vladikamira
Сообщения: 92
Зарегистрирован: 2013.01.11, 23:13

Re: CMS PTC

Сообщение vladikamira »

Еще пожалуй парочку.
- добавления материала с если модуль работе в режиме ЧПУ
- параметры товаров группы раздела каталога
Вложения
Image 15.png
Image 15.png (104.68 КБ) 11493 просмотра
Image 14.png
Image 14.png (75.79 КБ) 11493 просмотра
Image 9.png
Image 9.png (100.53 КБ) 11493 просмотра
yan
Сообщения: 942
Зарегистрирован: 2011.03.23, 09:28
Откуда: Уфа

Re: CMS PTC

Сообщение yan »

Красиво, аккуратно - это большой плюс, но я думаю большинству форумчан было бы интересней посмотреть как это сделано, а ни как это выглядит :)
vladikamira
Сообщения: 92
Зарегистрирован: 2013.01.11, 23:13

Re: CMS PTC

Сообщение vladikamira »

yan писал(а):Красиво, аккуратно - это большой плюс, но я думаю большинству форумчан было бы интересней посмотреть как это сделано, а ни как это выглядит :)
Я пока не доведу часть кода "до ума" выкладывать его не буду, а когда доведу, ради критики выложу кончено, ибо критика без ценна :) Когда починю dbForge for MySQL (сломался после обновления), выложу диаграмму БД еще (да да я пока не нарисую таблички со всеми связями, модели не создаю).
Не скрою, некоторые вещи я делал через одно место на букву ж, так как был в ситуации: "пишу на колене сидя на табуретке" :roll:
Код пишу примерно так:

Код: Выделить всё

    public function actionUpdate( $id ) {
        $this->pageTitle = CMSController::$title_prefix . 'Редактирование текста';
        $image = new Images( 'search' );
        $image->module_id = $id;
        $model = TextNote::model()->find( 'module_id = :id', array( ':id' => $id ) );
        $this->addItems = CMSController::ProvideImagesList( $id );
           
        if ( isset( $_POST['TextNote'], $_POST['Module'] ) ) {
            $model->attributes = $_POST['TextNote'];
            $model->module->attributes = $_POST['Module'];
            
            $model->module->visible = ( isset( $_POST['Module']['visible'] ) ) ? 1 : 0;
            $model->module->is_show_title = ( isset( $_POST['Module']['is_show_title'] ) ) ? 1 : 0;
            $model->is_show_rm = ( isset( $_POST['TextNote']['is_show_rm'] ) ) ? 1 : 0;
            
            $success = $model->validate() && $model->module->validate();            
            if ( $success ){
                $model->save( false );
                $model->module->save( false );
                Yii::app()->user->setFlash('success',"Информация успешно сохранена." );
                if( $model->module->category_id )
                    $this->redirect( array( '/admin/category/view/','id' => $model->module->category_id) ); //TODO: поправить создание УРЛ-а.
                elseif( $model->module->catalog_id )
                    $this->redirect( array( '/admin/catalog/view/','id' => $model->module->catalog_id ) );

            }
        }

        $this->render( 'update', array(
            'model' => $model,
            'image' => $image,
        ) );
    }
 
В модели всегда вношу все атрибуты в комментарий в начале, ибо очень удобно работать с ним потом в IDE, аналогично со всеми view.
Сейчас максимально принципиально придерживаюсь MVC модели написания кода.
Ну и protected с исключениями у меня в git + ide NetBeans IDE + denwer + realsync, облегчают мне очень сильно процесс разработки на dev и production окружение.
В принципе на будущие планирую встроить прям в CMS обновление новых доработок через git + синх. объектов БД
Вложения
Image 16.png
Image 16.png (162.6 КБ) 11462 просмотра
yan
Сообщения: 942
Зарегистрирован: 2011.03.23, 09:28
Откуда: Уфа

Re: CMS PTC

Сообщение yan »

vladikamira писал(а):

Код: Выделить всё

    public function actionUpdate( $id ) {
        $this->pageTitle = CMSController::$title_prefix . 'Редактирование текста';
        $image = new Images( 'search' );
        $image->module_id = $id;
        $model = TextNote::model()->find( 'module_id = :id', array( ':id' => $id ) );
        $this->addItems = CMSController::ProvideImagesList( $id );
           
        if ( isset( $_POST['TextNote'], $_POST['Module'] ) ) {
            $model->attributes = $_POST['TextNote'];
            $model->module->attributes = $_POST['Module'];
            
            $model->module->visible = ( isset( $_POST['Module']['visible'] ) ) ? 1 : 0;
            $model->module->is_show_title = ( isset( $_POST['Module']['is_show_title'] ) ) ? 1 : 0;
            $model->is_show_rm = ( isset( $_POST['TextNote']['is_show_rm'] ) ) ? 1 : 0;
            
            $success = $model->validate() && $model->module->validate();            
            if ( $success ){
                $model->save( false );
                $model->module->save( false );
                Yii::app()->user->setFlash('success',"Информация успешно сохранена." );
                if( $model->module->category_id )
                    $this->redirect( array( '/admin/category/view/','id' => $model->module->category_id) ); //TODO: поправить создание УРЛ-а.
                elseif( $model->module->catalog_id )
                    $this->redirect( array( '/admin/catalog/view/','id' => $model->module->catalog_id ) );

            }
        }

        $this->render( 'update', array(
            'model' => $model,
            'image' => $image,
        ) );
    }
уже интересней :)
вместо find( 'module_id = :id', array( ':id' => $id ) ); красивей findByAttributes
$this->pageTitle = CMSController::$title_prefix . 'Редактирование текста'; это дело представления
CMSController::ProvideImagesList( $id ) CMSController::$title_prefix CMSController - странное место для хранения всякой всячины :)
vladikamira
Сообщения: 92
Зарегистрирован: 2013.01.11, 23:13

Re: CMS PTC

Сообщение vladikamira »

yan писал(а): уже интересней :)
вместо find( 'module_id = :id', array( ':id' => $id ) ); красивей findByAttributes
$this->pageTitle = CMSController::$title_prefix . 'Редактирование текста'; это дело представления
CMSController::ProvideImagesList( $id ) CMSController::$title_prefix CMSController - странное место для хранения всякой всячины :)
1) я сейчас CDbCriteria использую в основном, но для такого случая действительно findByAttributes можно использовать.
2) я же говорил через "Ж" :roll:
3) Там у меня пока весь "мусора" много, скоро займусь разгребанием, Tool:: всякие сделую и в компоненты модуля cms вынесу.

Так как с yii я работаю совсем не много, последних 4 месяца, есть вещи которые идеологический не правильно реализованы (особенно то что делал сначала), однако не всё так плачевно) рефакторинг рефакторинг и еще раз рефакторинг, после того как приведу в порядок код, выложу его в сеть.

В принципе сейчас понимаю что некоторые вещи обобщенные лучше выносить вообще в extensions, скажем сделать отдельный extensions/cms.
Аватара пользователя
xoma
Сообщения: 641
Зарегистрирован: 2009.04.02, 15:24
Откуда: Ногинск
Контактная информация:

Re: CMS PTC

Сообщение xoma »

Код: Выделить всё

$model->save( false );
$model->module->save( false ); 
Такие штуки лучше оборачивать в транзакцию....иначе может быть плохо =)
puritania
Сообщения: 43
Зарегистрирован: 2012.04.18, 06:26
Откуда: Челябинск
Контактная информация:

Re: CMS PTC

Сообщение puritania »

Еще интересно каталог товаров реализован ч/з EAV ?

P.S. Тип "Списики" порадовал))
vladikamira
Сообщения: 92
Зарегистрирован: 2013.01.11, 23:13

Re: CMS PTC

Сообщение vladikamira »

xoma писал(а):

Код: Выделить всё

$model->save( false );
$model->module->save( false );
Такие штуки лучше оборачивать в транзакцию....иначе может быть плохо =)
транзакции это хорошо, но блин нет их в myisam (((( а решил использовать потому что на многих хостингах только такой тип БД.
vladikamira
Сообщения: 92
Зарегистрирован: 2013.01.11, 23:13

Re: CMS PTC

Сообщение vladikamira »

puritania писал(а):Еще интересно каталог товаров реализован ч/з EAV ?
честно, первый раз услышал что это такое.

Каталог реализован как то так:
tbl_catalog <- tbl_catalog_items <- tbl_params_value
puritania
Сообщения: 43
Зарегистрирован: 2012.04.18, 06:26
Откуда: Челябинск
Контактная информация:

Re: CMS PTC

Сообщение puritania »

Видимо так оно и есть... http://techportal.inviqa.com/2010/10/21 ... ata-model/

Ишчо пару вопросиков:-)
Все значения параметров в текстовом поле храните или в разных полях согласно типу? Поиск по атрибутам есть?
vladikamira
Сообщения: 92
Зарегистрирован: 2013.01.11, 23:13

Re: CMS PTC

Сообщение vladikamira »

puritania писал(а):Видимо так оно и есть... http://techportal.inviqa.com/2010/10/21 ... ata-model/

Ишчо пару вопросиков:-)
Все значения параметров в текстовом поле храните или в разных полях согласно типу? Поиск по атрибутам есть?
в текстовых в текстовых.
Я понимаю о чём Вы хотите сказать, но я делал как мне было удобно и быстро, вопрос и проблемы которые могут возникнуть потом тоже ясны, и узкие места мне тоже известны, для меня это не является проблемой, по очевидным причинам. Поиск по атрибутам есть: http://www.kaminplaza.ru/catalog/furnace/steel/
сильно тормозит? вот именно что нечему там тормозить, а вот когда мне надо будет сделать каталог с 20к позициями, тогда ясен пень буду узки места делать. И вообще я советую, даже в реальной жизни всем, поступать как то так: "Решать проблемы по мере их поступления" ;)
vladikamira
Сообщения: 92
Зарегистрирован: 2013.01.11, 23:13

Re: CMS PTC

Сообщение vladikamira »

адд. и вот еще что, мне интересно как быстро будет работать запрос

param_id = 23 and value="текст" and item_id=3

param_id and item_id поля с индексом, value varcahr128, тоже в принципе индекс можно тоже добавить.
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: CMS PTC

Сообщение rak »

vladikamira писал(а):адд. и вот еще что, мне интересно как быстро будет работать запрос

param_id = 23 and value="текст" and item_id=3

param_id and item_id поля с индексом, value varcahr128, тоже в принципе индекс можно тоже добавить.
дык если будет много товаров, то по eav искать и не стоит
в сфинксе вот как раз недавно появились json атрибуты, так что при надобности можно немного переделать хранение и фильтровать сфинксом
puritania
Сообщения: 43
Зарегистрирован: 2012.04.18, 06:26
Откуда: Челябинск
Контактная информация:

Re: CMS PTC

Сообщение puritania »

vladikamira писал(а): в текстовых в текстовых.
Я понимаю о чём Вы хотите сказать, но я делал как мне было удобно и быстро, вопрос и проблемы которые могут возникнуть потом тоже ясны, и узкие места мне тоже известны, для меня это не является проблемой, по очевидным причинам. Поиск по атрибутам есть: http://www.kaminplaza.ru/catalog/furnace/steel/
сильно тормозит? вот именно что нечему там тормозить, а вот когда мне надо будет сделать каталог с 20к позициями, тогда ясен пень буду узки места делать. И вообще я советую, даже в реальной жизни всем, поступать как то так: "Решать проблемы по мере их поступления" ;)
Я Вам не собирался ничего предьявлять)) Просто интересуюсь как сделано и насколько данное решение универсально 8-)
vladikamira
Сообщения: 92
Зарегистрирован: 2013.01.11, 23:13

Re: CMS PTC

Сообщение vladikamira »

puritania писал(а):
vladikamira писал(а): в текстовых в текстовых.
Я понимаю о чём Вы хотите сказать, но я делал как мне было удобно и быстро, вопрос и проблемы которые могут возникнуть потом тоже ясны, и узкие места мне тоже известны, для меня это не является проблемой, по очевидным причинам. Поиск по атрибутам есть: http://www.kaminplaza.ru/catalog/furnace/steel/
сильно тормозит? вот именно что нечему там тормозить, а вот когда мне надо будет сделать каталог с 20к позициями, тогда ясен пень буду узки места делать. И вообще я советую, даже в реальной жизни всем, поступать как то так: "Решать проблемы по мере их поступления" ;)
Я Вам не собирался ничего предьявлять)) Просто интересуюсь как сделано и насколько данное решение универсально 8-)
я не много не это имел ввиду. Вообщем меня пока устраивает то что есть сейчас, проверю на выходных с 5000 позициями, как это всё при нагрузке будет работать и потом уже буду думать, хотя мне это сейчас не важно.
Допиливать параметры всё ровно, рано или поздно надо будет, так как они должны быть все строго типизированные и с возможностью быть обязательные\не обязательные при заполнение.
Аватара пользователя
yuran
Сообщения: 77
Зарегистрирован: 2010.11.04, 22:50
Контактная информация:

Re: CMS PTC

Сообщение yuran »

vladikamira писал(а):Я пока не доведу часть кода "до ума" выкладывать его не буду, а когда доведу, ради критики выложу кончено, ибо критика без ценна
Когда примерно можно будет посмотреть?
puritania
Сообщения: 43
Зарегистрирован: 2012.04.18, 06:26
Откуда: Челябинск
Контактная информация:

Re: CMS PTC

Сообщение puritania »

vladikamira писал(а):проверю на выходных с 5000 позициями, как это всё при нагрузке будет работать
не удалось пока затестить? :-)
vladikamira
Сообщения: 92
Зарегистрирован: 2013.01.11, 23:13

Re: CMS PTC

Сообщение vladikamira »

puritania писал(а):
vladikamira писал(а):проверю на выходных с 5000 позициями, как это всё при нагрузке будет работать
не удалось пока затестить? :-)
лето)

Может кто подскажет есть "модный" генератор данных, в котором есть возможность вставлять в смежные таблицы?
Ответить