Yii catalog
-
- Сообщения: 350
- Зарегистрирован: 2009.09.17, 16:47
- Откуда: Санкт-Петербург
- Контактная информация:
Re: мой первый проект на Yii
Видимо при выводе value в гриде идет смешение на в зависимости от уровня вложенности.
str_repeat(' ', $level).' '.$name;
str_repeat(' ', $level).' '.$name;
Предупрежден - значит вооружен.
devKP.ru
devKP.ru
Re: мой первый проект на Yii
Вот код, который использовал для вывода статистикиMMM_Corp писал(а):Круто, однозначно!
Эх, так и хочется попросить посмотреть сорцов, но это уже будет наверное наглость(((
П.С. Как сделали вывод к-ва запросов к БД? (про время генерации и память в курсе, знаю...)
Еще если не затруднит роскажите побольше как сделали каталог, у меня подобная задачка, вроде сделал, но моя нубская сущность не дает покоя, что сделал как попало, если не затруднит росскажите плиз
Код: Выделить всё
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 проект на основе моего проекта и вместе написать его нормально, в виде модуля скажем
Re: мой первый проект на Yii
Вот методы которые я придумал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(' ', ($this->level - 1) * 4) . $this->name;
else
return str_repeat(' ', ($this->level - 1) * 4) . "<b>" . $this->name . "</b>";
}
Последний раз редактировалось alexk984 2011.03.31, 21:40, всего редактировалось 1 раз.
Re: мой первый проект на Yii
Тут еще возникла проблема что надо парсить товары с яндекса, чтобы полноценно протестировать проект
Re: мой первый проект на Yii
можно и не парсить, а забить бд левыми данными. с соблюдением связей конечно же
Re: мой первый проект на Yii
так не интересноrak писал(а):можно и не парсить, а забить бд левыми данными. с соблюдением связей конечно же
Re: мой первый проект на Yii
Представьте что вы показываете заказчику этот проект в качестве своего портфолио, он смотрит и видит набор букв и цифр, вы можете сколько угодно рассказывать про его гениальность, но думаю отношение будет уже совсем другоеrak писал(а):зато на порядок быстрее;)
Re: мой первый проект на Yii
ну если нужно не протестировать проект, а подготовить на показ заказчику - тогда другое дело:)alexk984 писал(а):Представьте что вы показываете заказчику этот проект в качестве своего портфолио, он смотрит и видит набор букв и цифр, вы можете сколько угодно рассказывать про его гениальность, но думаю отношение будет уже совсем другоеrak писал(а):зато на порядок быстрее;)
Re: мой первый проект на Yii
Еще проблема с которой столкнулся - не получилось объединить все фильтры в один запрос, сделал тупо, по каждому фильтру вытаскиваются все товары и потом выбирается пересечение этих множеств, такой вариант конечно никуда не годиться, может кто-то подскажет как их объединить, если там значение характеристики товара - отдельная строка таблицы?
Re: мой первый проект на Yii
Не совсем понял, что имеется в виду под "все фильтры в один запрос". Имеется в виду ?
Или имеется в виду поиск?
Код: Выделить всё
Good::model()->recent()->brand(10)->till(250)->findAll();
Или имеется в виду поиск?
Код: Выделить всё
$good = new Good();
$good->attributes = $_POST['Good'];
$good->search();
Конференция: yii@conference.jabber.ru
Re: мой первый проект на Yii
Я имею ввиду основной метод который по пользовательским ограничениям возвращает нужную страницу результата. Например пользователь задал 2 ограничения на расширение монитора и на диагональ. Есть таблицыjohnatanb писал(а):Не совсем понял, что имеется в виду под "все фильтры в один запрос".
----goods----
id-------name
1-----монитор1
2-----монитор2
----good_attr_value----
id-------good_id------attr_id------value
10---------1--------------1-----------21
11---------2--------------1-----------24
12---------1--------------2---------1024x768
13---------2--------------2---------1920x1280
примерно так (но не в точности). Тут attr_id=1 для диагонали и attr_id=2 для расширения, когда пытаешься объединить запросы то он возвращает список id из второй таблицы а не из первой.
-
- Сообщения: 77
- Зарегистрирован: 2010.10.17, 11:00
- Откуда: Днепропетровск
- Контактная информация:
Re: мой первый проект на Yii
Мне кажется для этих целей нужно использовать DAO то есть обычный sql
им проще написать сложные запросы и все получается понятней. Ну это мое мнение,
может я и не прав)
им проще написать сложные запросы и все получается понятней. Ну это мое мнение,
может я и не прав)
Мой блог http://blog.rapository.com
Re: мой первый проект на Yii
Выражаю респект твоей работе.
Попробуй Good::model()->findBySql($sql)
с таким запросом:
items - таблица товаров
test - таблица аттрибутов
Как видишь - для каждого фильтра inner join с таблицой аттрибутов. Первый join отсеевает по диагонали, второй - по расширению (условно написал 1024)
Но: 1 если для монитора не задан какой-то параметр - не найдет.
2. Возможно запрос не оптимальный (по производительности). Эт я быстренько набросал, так что над производительностью нужно подумать
Попробуй Good::model()->findBySql($sql)
с таким запросом:
Код: Выделить всё
SELECT
t.item_id,
t.title
FROM
items AS t
Inner Join test ON t.item_id = test.item_id AND test.attr_id = 1 AND test.value = 21
Inner Join test AS test1 ON test.item_id = test1.item_id AND test1.attr_id = 2 AND test1.value = 1024
test - таблица аттрибутов
Как видишь - для каждого фильтра inner join с таблицой аттрибутов. Первый join отсеевает по диагонали, второй - по расширению (условно написал 1024)
Но: 1 если для монитора не задан какой-то параметр - не найдет.
2. Возможно запрос не оптимальный (по производительности). Эт я быстренько набросал, так что над производительностью нужно подумать
Re: мой первый проект на Yii
Если не трудно - плиз кусок кода, который заполняет `lft`, `rgt` в таблице `category`
Я про эту штуку здесь читал (если кому интерестно будет) http://alexvaleev.ru/margin-sections-bitrix/
..после того как подглядел в мюскле саму структуру таблицы каталога у битриксовцев )
Я про эту штуку здесь читал (если кому интерестно будет) http://alexvaleev.ru/margin-sections-bitrix/
..после того как подглядел в мюскле саму структуру таблицы каталога у битриксовцев )
CPU comparison platform: CPU Boss Multi language, Yii2 powered.
Re: мой первый проект на Yii
Поработав долгое время с 1С Битриксом мне ваша логика что-то напоминает
Re: мой первый проект на Yii
а я к сожалению (или к радости) с битриксом не успел дело поиметь )
а до NestedSets добраться еще не успел (
а до NestedSets добраться еще не успел (
CPU comparison platform: CPU Boss Multi language, Yii2 powered.
Re: мой первый проект на Yii
извиняюсь, а что за программка такие красивые схемы БД рисует? http://www.yiiframework.ru/forum/viewto ... =10#p16688
Re: мой первый проект на Yii
mysql workbenchjackal писал(а):извиняюсь, а что за программка такие красивые схемы БД рисует? http://www.yiiframework.ru/forum/viewto ... =10#p16688