Yii catalog

Собираем здесь завершённые проекты, использующие Yii. Один проект — одна тема.
Аватара пользователя
alexk984
Сообщения: 433
Зарегистрирован: 2010.10.21, 15:03
Контактная информация:

Yii catalog

Сообщение alexk984 »

Хочу поделиться своим первым проектом доведенным до рабочей версии http://yiicatalog.px6.ru/catalog/display, который я делал в рамках изучения фреймворка и веб-разработки в целом (это первый веб-фреймворк который я изучаю). Дизайн в основном взял с яндекс-маркета, реализацию фильтрации тоже взял оттуда но целиком скопировать конечно не получилось.
Использовал следующие расширения
  • 1. image для нарезки превью-фоток
    2. prettyphoto для галереи изображений. Столкнулся с проблемой когда залил на хостинг, пришлось править код. В целом это не совсем то что я хотел
    3. Nested Set никаких проблем у меня с ним не было, правда пришлось делать свои методы для вывода массива который потом можно было бы передать в dropdownList, не знаю можно ли включить это в расширение, если можно то готов это сделать сам. И еще долго искал несколько раз ошибку когда забывал в конце ставить findAll() :)
    4. shoppingCart оттуда же, вроде все работает, но назвать контроллер ShoppingCartController было ошибкой))
Для авторизации использовать модуль yii-user.
Админка сделана модулем. Когда делал админку подумал что неплохо было бы иметь не стандартный CRUD-шаблон gii а свой для небольших моделей где все лучше иметь на одной странице, например тут
Изображение
Или например было бы удобнее взять существующую модель, немного изменить ее и сохранить как новую. Кто-нибудь писал такие шаблоны?
Вот еще скриншот админки, тут я использовал аякс, когда добавляешь модель, но переход не view не осуществляется а появляется надпись об успешности добавления модели
Изображение

UPDATE:
Была пара свободный дней, переписал часть кода сайта (все-таки тогда я еще многого не понимал), выложил его на новый адрес http://yiicatalog.px6.ru/catalog/display, заполнил БД, для этого пришлось парсить яндекс-маркет :)
Для парсинга использовал phpQuery, довольно удобно. Сначала хотел попробовать nokogiri, но быстро обнаружил в нем баг.
Также я выложил исходный код на github, возможно новичков что-то заинтересует. смотрим
Конечно много еще нужно доделывать переделывать, когда будет время закончу его.
Последний раз редактировалось alexk984 2011.08.07, 16:56, всего редактировалось 1 раз.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: мой первый проект на Yii

Сообщение samdark »

Неплохая задачка и практически применимая для многих приложений. Хорошо выбрали тестовый проект.
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: мой первый проект на Yii

Сообщение rak »

alexk984 писал(а):Когда делал админку подумал что неплохо было бы иметь не стандартный CRUD-шаблон gii а свой для небольших моделей где все лучше иметь на одной странице
Или например было бы удобнее взять существующую модель, немного изменить ее и сохранить как новую. Кто-нибудь писал такие шаблоны?
ага, 1 раз потратил пару часов на написание своего шаблона для crud, и с админкой теперь почти не заморачиваюсь :)
Аватара пользователя
xoma
Сообщения: 641
Зарегистрирован: 2009.04.02, 15:24
Откуда: Ногинск
Контактная информация:

Re: мой первый проект на Yii

Сообщение xoma »

rak писал(а):
alexk984 писал(а):Когда делал админку подумал что неплохо было бы иметь не стандартный CRUD-шаблон gii а свой для небольших моделей где все лучше иметь на одной странице
Или например было бы удобнее взять существующую модель, немного изменить ее и сохранить как новую. Кто-нибудь писал такие шаблоны?
ага, 1 раз потратил пару часов на написание своего шаблона для crud, и с админкой теперь почти не заморачиваюсь :)

Поделитесь шаблоном?
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: мой первый проект на Yii

Сообщение rak »

могу выслать, только вот смысл? он же заточен под определенную верстку
Аватара пользователя
Tokolist
Сообщения: 113
Зарегистрирован: 2010.03.01, 22:03

Re: мой первый проект на Yii

Сообщение Tokolist »

alexk984
Если это просто Ваш тестовый проект, то думаю есть смысл выложить куда-нибудь исходники (на гуглкод, например), чтобы другие могли поучится на вашем проекте.
chang
Сообщения: 125
Зарегистрирован: 2010.12.03, 20:01

Re: мой первый проект на Yii

Сообщение chang »

а нельзя ли немного подробней о том как организована фильтрация товаров ... привязка к ним характеристик ....
с виду вродь похоже на viewtopic.php?f=9&t=383
или это что-то другое?
Аватара пользователя
MMM_Corp
Сообщения: 19
Зарегистрирован: 2010.11.20, 03:15
Откуда: Украина, Тернополь
Контактная информация:

Re: мой первый проект на Yii

Сообщение MMM_Corp »

Круто, однозначно!

Эх, так и хочется попросить посмотреть сорцов, но это уже будет наверное наглость(((

П.С. Как сделали вывод к-ва запросов к БД? (про время генерации и память в курсе, знаю...)
Еще если не затруднит роскажите побольше как сделали каталог, у меня подобная задачка, вроде сделал, но моя нубская сущность не дает покоя, что сделал как попало, если не затруднит росскажите плиз :oops:
Мой сайт на Yii: http://redbird.te.ua
Аватара пользователя
xoma
Сообщения: 641
Зарегистрирован: 2009.04.02, 15:24
Откуда: Ногинск
Контактная информация:

Re: мой первый проект на Yii

Сообщение xoma »

Для вывода статистики можно использовать что-то типа вот такого виджета http://code.google.com/p/yupe/source/br ... Widget.php
johnluxor
Сообщения: 82
Зарегистрирован: 2010.09.10, 19:39

Re: мой первый проект на Yii

Сообщение johnluxor »

Подскажите, а вывод в таблице дерева как осуществили? на первом скрине
SpiLLeR
Сообщения: 350
Зарегистрирован: 2009.09.17, 16:47
Откуда: Санкт-Петербург
Контактная информация:

Re: мой первый проект на Yii

Сообщение SpiLLeR »

Видимо при выводе value в гриде идет смешение на   в зависимости от уровня вложенности.
str_repeat(' ', $level).' '.$name;
Предупрежден - значит вооружен.
devKP.ru
Аватара пользователя
alexk984
Сообщения: 433
Зарегистрирован: 2010.10.21, 15:03
Контактная информация:

Re: мой первый проект на Yii

Сообщение alexk984 »

MMM_Corp писал(а):Круто, однозначно!

Эх, так и хочется попросить посмотреть сорцов, но это уже будет наверное наглость(((

П.С. Как сделали вывод к-ва запросов к БД? (про время генерации и память в курсе, знаю...)
Еще если не затруднит роскажите побольше как сделали каталог, у меня подобная задачка, вроде сделал, но моя нубская сущность не дает покоя, что сделал как попало, если не затруднит росскажите плиз :oops:
Вот код, который использовал для вывода статистики

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

if (YII_DEBUG) {
        echo '<br/>Отработало за ' . sprintf('%0.5f', Yii::getLogger()->getExecutionTime()) . ' с.';
        echo 'Скушано памяти: ' . round(memory_get_peak_usage() / (1024 * 1024), 2) . ' MB <br>';
            $sql_stats = YII::app()->db->getStats();
            echo $sql_stats[0] . ' запросов к БД, время выполнения запросов - ' . sprintf('%0.5f', $sql_stats[1]) . ' c.';
            }
 
Про сам каталог я подробно не писал, потому что сделан он довольно не идеально и там нужно кое-что переделывать, но нет на это времени.
EAV я не стал использовать, есть примерно такая БД
Изображение
Не знаю что можно по ней понять, но в целом есть категории товаров, в каждую категорию входит несколько групп характеристик, в каждую группу несколько характеристик. В отдельной таблице (attr_val) задаются значения характеристик (например для расширения монитора это будут строки 1024x768, 1920x1280,...). И в таблице good_attr_val хранятся связи между моделями и значениями характеристик. Если характеристики типа да/нет или числовая (type), то значение храниться в таблице good_attr_val в поле value, а соответственно значение пуста.

Но в пример брать это я не советую :) Есть проблемы с представлениями характеристик - например ширина, высота, длина должны быть отображены по шаблону, но задаваться отдельно. Хотя это легко исправить. Но вот с типами характеристик мне кажется некрасиво сделано. Вообще много кто заинтересовался этим проектом, можно было бы вместе сделать каталог как open-source проект на основе моего проекта и вместе написать его нормально, в виде модуля скажем :)
Аватара пользователя
alexk984
Сообщения: 433
Зарегистрирован: 2010.10.21, 15:03
Контактная информация:

Re: мой первый проект на Yii

Сообщение alexk984 »

johnluxor писал(а):Подскажите, а вывод в таблице дерева как осуществили? на первом скрине
Вот методы которые я придумал

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

        public static function GetArrayForDropDownList() {
                $roots = Category::model()->roots()->findAll();
                $res = array();
                foreach ($roots as $root) {
                        if ($root->isLeaf())
                                $res[$root->id] = $root->name;
                        else
                                $res[$root->name] = Category::GetChildren($root);
                }

                return $res;
        }

        private static function GetChildren($elem) {
                $res = array();
                $roots = $elem->children()->findAll();
                foreach ($roots as $root) {
                        if ($root->isLeaf())
                                $res[$root->id] = $root->name;
                        else
                                $res[$root->name] = Category::GetChildren($root);
                }
                return $res;
        }

        public static function GetArrayForDropDownList2() {
                $roots = Category::model()->roots()->findAll();
                $res = array();
                foreach ($roots as $root) {
                        $res[$root->id] = $root->GetStringName();
                        if (!$root->isLeaf())
                                $res = $res + Category::GetChildren2($root, 1);
                }

                return $res;
        }

        private static function GetChildren2($elem, $i) {
                $res = array();
                $roots = $elem->children()->findAll();
                foreach ($roots as $root) {
                        $res[$root->id] = $root->GetStringName();
                        if (!$root->isLeaf())
                                $res = $res + Category::GetChildren2($root, $i + 1);
                }
                return $res;
        }

        public function GetStringName() {
                if ($this->isLeaf())
                        return str_repeat('&nbsp', ($this->level - 1) * 4) . $this->name;
                else
                        return str_repeat('&nbsp', ($this->level - 1) * 4) . "<b>" . $this->name . "</b>";
        } 
Выводят немного по-разному, но я хотел сделать как тут, но как он сделал курсивом так и не понял ;)
Последний раз редактировалось alexk984 2011.03.31, 21:40, всего редактировалось 1 раз.
Аватара пользователя
alexk984
Сообщения: 433
Зарегистрирован: 2010.10.21, 15:03
Контактная информация:

Re: мой первый проект на Yii

Сообщение alexk984 »

Тут еще возникла проблема что надо парсить товары с яндекса, чтобы полноценно протестировать проект :)
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: мой первый проект на Yii

Сообщение rak »

можно и не парсить, а забить бд левыми данными. с соблюдением связей конечно же
Аватара пользователя
alexk984
Сообщения: 433
Зарегистрирован: 2010.10.21, 15:03
Контактная информация:

Re: мой первый проект на Yii

Сообщение alexk984 »

rak писал(а):можно и не парсить, а забить бд левыми данными. с соблюдением связей конечно же
так не интересно :)
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: мой первый проект на Yii

Сообщение rak »

зато на порядок быстрее;)
Аватара пользователя
alexk984
Сообщения: 433
Зарегистрирован: 2010.10.21, 15:03
Контактная информация:

Re: мой первый проект на Yii

Сообщение alexk984 »

rak писал(а):зато на порядок быстрее;)
Представьте что вы показываете заказчику этот проект в качестве своего портфолио, он смотрит и видит набор букв и цифр, вы можете сколько угодно рассказывать про его гениальность, но думаю отношение будет уже совсем другое :)
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: мой первый проект на Yii

Сообщение rak »

alexk984 писал(а):
rak писал(а):зато на порядок быстрее;)
Представьте что вы показываете заказчику этот проект в качестве своего портфолио, он смотрит и видит набор букв и цифр, вы можете сколько угодно рассказывать про его гениальность, но думаю отношение будет уже совсем другое :)
ну если нужно не протестировать проект, а подготовить на показ заказчику - тогда другое дело:)
Аватара пользователя
alexk984
Сообщения: 433
Зарегистрирован: 2010.10.21, 15:03
Контактная информация:

Re: мой первый проект на Yii

Сообщение alexk984 »

Еще проблема с которой столкнулся - не получилось объединить все фильтры в один запрос, сделал тупо, по каждому фильтру вытаскиваются все товары и потом выбирается пересечение этих множеств, такой вариант конечно никуда не годиться, может кто-то подскажет как их объединить, если там значение характеристики товара - отдельная строка таблицы?
Ответить