mrcappuccino Posted April 18, 2014 Share Posted April 18, 2014 После обновления до 1.6.0.6 заметил ошибку При добавлении новой категории она не показывается в дереве категорий при добавлении/редактировании категории и при привязке товара к категориям. В списке категорий в админке и на в меню на сайте все категории отображаются Link to comment Share on other sites More sharing options...
[email protected] Posted May 12, 2014 Share Posted May 12, 2014 После обновления до 1.6.0.6 заметил ошибку При добавлении новой категории она не показывается в дереве категорий при добавлении/редактировании категории и при привязке товара к категориям. В списке категорий в админке и на в меню на сайте все категории отображаются Всего скорее дело в некорректном дереве вложенных множеств - колонки n_left и n_right. У меня было подобное, хлебные крошки сходили с ума. Исправил скриптом, который либо по расписанию либо запуском вручную исправляет значения прямо в базе. Link to comment Share on other sites More sharing options...
mrcappuccino Posted May 12, 2014 Author Share Posted May 12, 2014 Всего скорее дело в некорректном дереве вложенных множеств - колонки n_left и n_right. У меня было подобное, хлебные крошки сходили с ума. Исправил скриптом, который либо по расписанию либо запуском вручную исправляет значения прямо в базе. Похоже на то. Кодом не поделитесь? Или хотя бы алгоритмом Link to comment Share on other sites More sharing options...
[email protected] Posted May 12, 2014 Share Posted May 12, 2014 Похоже на то. Кодом не поделитесь? Или хотя бы алгоритмом Код только за деньги. Вернее готовый макрос, который только настроить под конкретный магазин. Алгоритм так опишу - выбираем диапазон min и max по умолчанию, например 50, затем рекурсией проходим по дереву категорий и по простым правилам укладываем те категории что есть в данный диапазон (присваиваем left и right). Если првило на каком то этапе не выполняется или категории не влезают в диапазон, то все начинаем сначала до тех пор пока не влезет. Жалко выкладывать халявой, просто сам разработал все писал и испытал, а такое видимо редко кто просто так выкладывает. Link to comment Share on other sites More sharing options...
mrcappuccino Posted May 12, 2014 Author Share Posted May 12, 2014 понял, значит тут подойдет алгоритм пересчета границ примерно как в Битрикс function ReSort($IBLOCK_ID, $ID=0, $cnt=0, $depth=0, $ACTIVE="Y") { global $DB; $IBLOCK_ID = IntVal($IBLOCK_ID); if($ID > 0) { $DB->Query(" UPDATE b_iblock_section SET TIMESTAMP_X=".($DB->type=="ORACLE"?"NULL":"TIMESTAMP_X")." ,RIGHT_MARGIN=".IntVal($cnt)." ,LEFT_MARGIN=".IntVal($cnt)." WHERE ID=".IntVal($ID) ); } $strSql = " SELECT BS.ID, BS.ACTIVE FROM b_iblock_section BS WHERE BS.IBLOCK_ID = ".$IBLOCK_ID." AND ".($ID>0? "BS.IBLOCK_SECTION_ID=".IntVal($ID): "BS.IBLOCK_SECTION_ID IS NULL")." ORDER BY BS.SORT, BS.NAME "; $cnt++; $res = $DB->Query($strSql); while($arr = $res->Fetch()) $cnt = CIBlockSection::ReSort($IBLOCK_ID, $arr["ID"], $cnt, $depth+1, ($ACTIVE=="Y" && $arr["ACTIVE"]=="Y" ? "Y" : "N")); if($ID==0) { $obIBlockRights = new CIBlockRights($IBLOCK_ID); $obIBlockRights->Recalculate(); return true; } $DB->Query(" UPDATE b_iblock_section SET TIMESTAMP_X=".($DB->type=="ORACLE"?"NULL":"TIMESTAMP_X")." ,RIGHT_MARGIN=".IntVal($cnt)." ,DEPTH_LEVEL=".IntVal($depth)." ,GLOBAL_ACTIVE='".$ACTIVE."' WHERE ID=".IntVal($ID) ); return $cnt+1; } т.е. проходимся рекурсивно вглубь категорий и присваиваем левую границу = счетчику, увеличивая его, а выходя, присваиваем правую границу Link to comment Share on other sites More sharing options...
[email protected] Posted May 12, 2014 Share Posted May 12, 2014 понял, значит тут подойдет алгоритм пересчета границ примерно как в Битрикс function ReSort($IBLOCK_ID, $ID=0, $cnt=0, $depth=0, $ACTIVE="Y") { global $DB; $IBLOCK_ID = IntVal($IBLOCK_ID); if($ID > 0) { $DB->Query(" UPDATE b_iblock_section SET TIMESTAMP_X=".($DB->type=="ORACLE"?"NULL":"TIMESTAMP_X")." ,RIGHT_MARGIN=".IntVal($cnt)." ,LEFT_MARGIN=".IntVal($cnt)." WHERE ID=".IntVal($ID) ); } $strSql = " SELECT BS.ID, BS.ACTIVE FROM b_iblock_section BS WHERE BS.IBLOCK_ID = ".$IBLOCK_ID." AND ".($ID>0? "BS.IBLOCK_SECTION_ID=".IntVal($ID): "BS.IBLOCK_SECTION_ID IS NULL")." ORDER BY BS.SORT, BS.NAME "; $cnt++; $res = $DB->Query($strSql); while($arr = $res->Fetch()) $cnt = CIBlockSection::ReSort($IBLOCK_ID, $arr["ID"], $cnt, $depth+1, ($ACTIVE=="Y" && $arr["ACTIVE"]=="Y" ? "Y" : "N")); if($ID==0) { $obIBlockRights = new CIBlockRights($IBLOCK_ID); $obIBlockRights->Recalculate(); return true; } $DB->Query(" UPDATE b_iblock_section SET TIMESTAMP_X=".($DB->type=="ORACLE"?"NULL":"TIMESTAMP_X")." ,RIGHT_MARGIN=".IntVal($cnt)." ,DEPTH_LEVEL=".IntVal($depth)." ,GLOBAL_ACTIVE='".$ACTIVE."' WHERE ID=".IntVal($ID) ); return $cnt+1; } т.е. проходимся рекурсивно вглубь категорий и присваиваем левую границу = счетчику, увеличивая его, а выходя, присваиваем правую границу К сожалению не знаком с битрикс как разработчик. Да, так в идеале. Только я применил немного другой подход, который подразумевает, что в дереве множества могут быть пустые места, что практически безвредно для рабочей выборки по нлефт и райт. Тогда можно задать диапазон сразу, потом рекурсивно проходя по дереву каждому вглубь, на каждом подуровне делить диапазон на количество подкатегорий и соответственно присваивать лефт и райт, на каждомом следующем подуровене - присваиваем номера границы оставшегося промежутка не парясь о том что остаются неиспользуемые номера. Не знаю понятно ли объяснил. Мне так было проще - за два вечера все заработало. Link to comment Share on other sites More sharing options...
[email protected] Posted May 12, 2014 Share Posted May 12, 2014 К сожалению не знаком с битрикс как разработчик. Да, так в идеале. Только я применил немного другой подход, который подразумевает, что в дереве множества могут быть пустые места, что практически безвредно для рабочей выборки по нлефт и райт. Тогда можно задать диапазон сразу, потом рекурсивно проходя по дереву каждому вглубь, на каждом подуровне делить диапазон на количество подкатегорий и соответственно присваивать лефт и райт, на каждомом следующем подуровене - присваиваем номера границы оставшегося промежутка не парясь о том что остаются неиспользуемые номера. Не знаю понятно ли объяснил. Мне так было проще - за два вечера все заработало. при этом если вдруг в каком то месте дерева номеров не хватило, то начинаем все с самого начала новую итерацию увеличив диапазон Link to comment Share on other sites More sharing options...
Kerm Posted May 12, 2014 Share Posted May 12, 2014 (edited) Вы бредите все!!! В престе просто кривое обновление с версии на версии, Сам недавно интернет-магазин существующий давно на 1.4, переносил на 1.5 и столкнулся с такой же проблемой, в админке есть, а на сайте. Все дело оказалось в кривых ключевых значениях в MYSQL базе. Первое что делаем лезем в "ps_configuration" и смотрим на значение полей: PS_ROOT_CATEGORY = 1 PS_HOME_CATEGORY = 2 Далее лезим в ps_category: Первые три строчки должны быть такими: Ключевые параметры там это id_parent, level_depth и is_root_category Далее в ps_category_group для категории с id = 1 не должно быть не чего задано. Далее в ps_category_lang должно быть так указано: Далее пожалуй самая важная таблица, это ps_shop, там должно быть вот так: Т.е. там указывается ID корня категории, это всегда ID = 2, т.е. home (домашняя) категория. Если все будет как на скринах то все будет работать! Edited May 12, 2014 by Kerm (see edit history) Link to comment Share on other sites More sharing options...
mrcappuccino Posted May 12, 2014 Author Share Posted May 12, 2014 Вы бредите все!!! В престе просто кривое обновление с версии на версии, Сам недавно интернет-магазин существующий давно на 1.4, переносил на 1.5 и столкнулся с такой же проблемой, в админке есть, а на сайте. Все дело оказалось в кривых ключевых значениях в MYSQL базе. Первое что делаем лезем в "ps_configuration" и смотрим на значение полей: PS_ROOT_CATEGORY = 1 PS_HOME_CATEGORY = 2 Далее лезим в ps_category: Первые три строчки должны быть такими: cate.JPG Ключевые параметры там это id_parent, level_depth и is_root_category Далее в ps_category_group для категории с id = 1 не должно быть не чего задано. Далее в ps_category_lang должно быть так указано: gfhfgh.JPG Далее пожалуй самая важная таблица, это ps_shop, там должно быть вот так: dfgdf.JPG Т.е. там указывается ID корня категории, это всегда ID = 2, т.е. home (домашняя) категория. Если все будет как на скринах то все будет работать! у меня всё как у вас на скриншотах, но категории не показываются в дереве Link to comment Share on other sites More sharing options...
Kerm Posted May 12, 2014 Share Posted May 12, 2014 А модуль категорий стандартный? не делали не чего с ним? чистили кеш престы и кеш браузера? в коде страницы тоже пусто? может там с ксс что то.. Link to comment Share on other sites More sharing options...
mrcappuccino Posted May 12, 2014 Author Share Posted May 12, 2014 А модуль категорий стандартный? не делали не чего с ним? чистили кеш престы и кеш браузера? в коде страницы тоже пусто? может там с ксс что то.. проблема не в публичке, а в админке, в публичке всё отображается новые категории не показываются в дереве для выбора категорий при добавлении товара/категории Link to comment Share on other sites More sharing options...
mrcappuccino Posted May 12, 2014 Author Share Posted May 12, 2014 дерево пересчитал, проблема не в этом а за что отвечает таблица ps_category_group? Link to comment Share on other sites More sharing options...
[email protected] Posted May 12, 2014 Share Posted May 12, 2014 у меня всё как у вас на скриншотах, но категории не показываются в дереве Я юзаю 1.6.0.5, все ок, обновлять рабочий сайт боюсь теперь еще больше. Стоит ли обновлять до 0.6? чем она отличается от 0.5 в двух словах не скажете? Link to comment Share on other sites More sharing options...
[email protected] Posted May 12, 2014 Share Posted May 12, 2014 Вы бредите все!!! В престе просто кривое обновление с версии на версии, Сам недавно интернет-магазин существующий давно на 1.4, переносил на 1.5 и столкнулся с такой же проблемой, в админке есть, а на сайте. Все дело оказалось в кривых ключевых значениях в MYSQL базе. Первое что делаем лезем в "ps_configuration" и смотрим на значение полей: PS_ROOT_CATEGORY = 1 PS_HOME_CATEGORY = 2 Далее лезим в ps_category: Первые три строчки должны быть такими: cate.JPG Ключевые параметры там это id_parent, level_depth и is_root_category Далее в ps_category_group для категории с id = 1 не должно быть не чего задано. Далее в ps_category_lang должно быть так указано: dfgdf.JPG Далее пожалуй самая важная таблица, это ps_shop, там должно быть вот так: gfhfgh.JPG Т.е. там указывается ID корня категории, это всегда ID = 2, т.е. home (домашняя) категория. Если все будет как на скринах то все будет работать! На счет бреда не согласен. Я измуудрился со скриптом таким от того что у мня скрипт из файла xml создает прямо в базе товар с комбинациями, с производителями и категориями, генерирует предварительное массовое СЕО, не используя контроллеры и классы престы конечно. Естественно нужно самому скрипту править дерево. А то что на вы пишете, у мен например было так изначально и не влияло на то что с категориями беда была. Link to comment Share on other sites More sharing options...
[email protected] Posted May 12, 2014 Share Posted May 12, 2014 дерево пересчитал, проблема не в этом а за что отвечает таблица ps_category_group? На сколько я догадываюсь это доступ групп пользователей к категориям Link to comment Share on other sites More sharing options...
mrcappuccino Posted May 12, 2014 Author Share Posted May 12, 2014 Я юзаю 1.6.0.5, все ок, обновлять рабочий сайт боюсь теперь еще больше. Стоит ли обновлять до 0.6? чем она отличается от 0.5 в двух словах не скажете? Заметил, что исправили невозможность добавить категорию в 1.6.0.5 и множество исправлений в верстке админки Ну и куча обновлений модулей, которые и без обновления системы, наверное, могут обновиться. Link to comment Share on other sites More sharing options...
vicky21 Posted May 13, 2014 Share Posted May 13, 2014 Вы бредите все!!! В престе просто кривое обновление с версии на версии, Сам недавно интернет-магазин существующий давно на 1.4, переносил на 1.5 и столкнулся с такой же проблемой, в админке есть, а на сайте. Все дело оказалось в кривых ключевых значениях в MYSQL базе. Первое что делаем лезем в "ps_configuration" и смотрим на значение полей: PS_ROOT_CATEGORY = 1 PS_HOME_CATEGORY = 2 Далее лезим в ps_category: Первые три строчки должны быть такими: cate.JPG Ключевые параметры там это id_parent, level_depth и is_root_category Далее в ps_category_group для категории с id = 1 не должно быть не чего задано. Далее в ps_category_lang должно быть так указано: dfgdf.JPG Далее пожалуй самая важная таблица, это ps_shop, там должно быть вот так: gfhfgh.JPG Т.е. там указывается ID корня категории, это всегда ID = 2, т.е. home (домашняя) категория. Если все будет как на скринах то все будет работать! Пишите нужно залесть в "ps_configuration" и как туда залесть? Где эти все файлы лежат? Link to comment Share on other sites More sharing options...
mrcappuccino Posted May 13, 2014 Author Share Posted May 13, 2014 Пишите нужно залесть в "ps_configuration" и как туда залесть? Где эти все файлы лежат? это таблица в базе данных Link to comment Share on other sites More sharing options...
Kerm Posted May 13, 2014 Share Posted May 13, 2014 В Вашем случае поможет кофе, пачка сигарет и пол дня дебага чтобы понять в чем дело) Возможно быстрее в зависимости от везения и проф пригодности. Link to comment Share on other sites More sharing options...
vicky21 Posted May 13, 2014 Share Posted May 13, 2014 это таблица в базе данных Как в таблицу-то попасть? Напишите пожалуйста по-русски, куда зайти.. что нажать.. И я ничего не обновляла, я сразу установила 1.6.0.6. Создаю новые категории, но их не видно когда добавляешь товар. т. е. не получается сделать привязку. Я создала новое меню (она же категорию) и мне нужно что бы в нем отображались товары. Но связь сделать с ним не получается, т.к. созданные категории не отображаются в связи.. Хотя если я захожу в товар, который был уже создан как демо, там отображаются новые категории в Связях. какой есть выход для решения этой проблемы, кроме написания скрипта? Link to comment Share on other sites More sharing options...
vicky21 Posted May 13, 2014 Share Posted May 13, 2014 В Вашем случае поможет кофе, пачка сигарет и пол дня дебага чтобы понять в чем дело) Возможно быстрее в зависимости от везения и проф пригодности. А кроме стеба что-нибудь полезного можете написать? Link to comment Share on other sites More sharing options...
mrcappuccino Posted May 13, 2014 Author Share Posted May 13, 2014 Как в таблицу-то попасть? Напишите пожалуйста по-русски, куда зайти.. что нажать.. И я ничего не обновляла, я сразу установила 1.6.0.6. Создаю новые категории, но их не видно когда добавляешь товар. т. е. не получается сделать привязку. Я создала новое меню (она же категорию) и мне нужно что бы в нем отображались товары. Но связь сделать с ним не получается, т.к. созданные категории не отображаются в связи.. Хотя если я захожу в товар, который был уже создан как демо, там отображаются новые категории в Связях. какой есть выход для решения этой проблемы, кроме написания скрипта? я пока сам не нашел источник ошибки насчет таблиц, расписывать не буду, в интернете достаточно информации. только направлю, использовать нужно, напр., phpMyAdmin http://www.phpmyadmin.net/home_page/index.php Link to comment Share on other sites More sharing options...
mrcappuccino Posted May 13, 2014 Author Share Posted May 13, 2014 А кроме стеба что-нибудь полезного можете написать? всё правильно, чем мог, он помог Link to comment Share on other sites More sharing options...
savvato Posted May 13, 2014 Share Posted May 13, 2014 (edited) сделайте простенький скрипт, вставьте туда эти функции и вызовите refreshLevelDepth function massupdate ($table, $update_column, $id_column, $data, $index) { if(!is_array ($data) or !is_array ($index)){ echo "Arguments is not array"; break; }; $table = _DB_PREFIX_.$table; return Db::getInstance()->Execute( "UPDATE $table SET $update_column = CASE $id_column \n" .implode('', $data). "END WHERE $id_column IN (".implode(',', $index).")"); } function real_level_depth($id_category, & $level_depth) { $sql = "SELECT `id_parent` FROM `"._DB_PREFIX_."category` WHERE `id_category` = ".(int)$id_category; $id_parent = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($sql); //p($result); if($id_parent <> $id_category) { real_level_depth($id_parent, $level_depth); $level_depth++; } } function refreshLevelDepth() { /* Gets all children */ $categories = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' SELECT id_category FROM '._DB_PREFIX_.'category '); /* Updates level_depth for all children */ foreach($categories as $sub_category) { $id_category = (int)$sub_category['id_category']; $level_depth = - 1; real_level_depth($id_category,$level_depth); $data[] = " WHEN '$id_category' THEN '$level_depth' "; $index[] = "'$id_category'"; } massupdate ("category", "level_depth", "id_category", $data, $index); } Edited May 13, 2014 by savvato (see edit history) Link to comment Share on other sites More sharing options...
Kerm Posted May 14, 2014 Share Posted May 14, 2014 Как в таблицу-то попасть? Напишите пожалуйста по-русски, куда зайти.. что нажать.. И я ничего не обновляла, я сразу установила 1.6.0.6. Создаю новые категории, но их не видно когда добавляешь товар. т. е. не получается сделать привязку. Я создала новое меню (она же категорию) и мне нужно что бы в нем отображались товары. Но связь сделать с ним не получается, т.к. созданные категории не отображаются в связи.. Хотя если я захожу в товар, который был уже создан как демо, там отображаются новые категории в Связях. какой есть выход для решения этой проблемы, кроме написания скрипта? Попробовать поставить более ранние версии престашопа или ждать обновления, еще можно на гитхабе глянуть не пофиксен ли там этот баг уже. Link to comment Share on other sites More sharing options...
Kerm Posted May 14, 2014 Share Posted May 14, 2014 http://www.prestashop.com/ru/demo стоит демо версии 1.6.0.6 и все там создается нормально и пашет, ищите проблему у себя. Link to comment Share on other sites More sharing options...
Kerm Posted May 14, 2014 Share Posted May 14, 2014 Может вы в админке не заметили этой галочки и кнопки что показаны на скриншоте так же: Link to comment Share on other sites More sharing options...
Anton.Synergy Posted May 14, 2014 Share Posted May 14, 2014 Попробуйте пощелкать языки в админке. В настройках где пароль менять можно. Была такая же проблема. На русском не отображалось, на английском все норм. Link to comment Share on other sites More sharing options...
vicky21 Posted May 14, 2014 Share Posted May 14, 2014 Может вы в админке не заметили этой галочки и кнопки что показаны на скриншоте так же: df4.JPG Великое биг мерси вам! Категории были просто свернуты... я их развернула и все собственно на месте, на всех языках.. А то я уж было расстроилась совсем.. долго выбирала на чем магаз делать и тут такая засада образовалась.. Спасибо всем за помощь и отзывчивость! Link to comment Share on other sites More sharing options...
Kerm Posted May 14, 2014 Share Posted May 14, 2014 (edited) Пожалуйста Edited May 14, 2014 by Kerm (see edit history) Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now