Как стать автором
Обновить

Комментарии 12

небольшой вопросик: а почему модель занимается генерацией урла?
Это было сделано для удобства, чтобы можно было проследить разницу до/после.
это вряд ли. скорее признак непонимания структурирования кода + srp.
повышайте свое ЧСВ в другом месте
я бы хотел +1 к вашим скиллам добавить в этом месте.
Непонятно зачем использовать nestedset, если в базе хранится полный url. Получается, что для генерации любого url достаточно знать parent?
Если меняется заглушка или родитель раздела, то нужно обновлять пути всех его потомков. Здесь как раз вступает nested set. Тем более что этим функционал расширения не ограничивается.
Разве нельзя получить всех потомков, независимо от уровня вложенности, по url родителя? Ведь у всех потомков хранится полный путь — это всего один запрос к базе.
Вы правы, можно, можно даже не получать всех потомков, а просто обновить их путь одним запросом. Но целью статьи было также рассказать, собственно, о моем расширении.
может кто подскажет как избавиться от
catalog/ в
$router->get('catalog/{path}', ...) 

что-бы было что-то похожее на
$router->get('{path}', ...) 

Для категорий хочу что-бы получилось:
{category}/{subcategory1}/.../{subcategoryN}
а для продукта:
{category}/{subcategory1}/.../{subcategoryN}/{proiduct}

Добавить маршрут самым последним в списке, при этом запретить использовать «рутовые» заглушки, которые могут использоваться для других маршрутов (типа там contacts и т.п.)
Этот код по моему сбивает порядок и приводит к тому что у descendants не правильные значения path:

$descendants->push($this)->linkNodes()->pop();


Например, есть следующая структура категорий:

parent category (parent-category)
----child (parent-category-child)
--------descendant (parent-category-child-descendant)

Тут сначала идет название категории и в скобках значение атрибута path.
name (path)

Меняю название parent category на parent cat. Результат:

parent cat (parent-cat)
----child (parent-cat-child)
--------descendant (parent-category-child-descendant) // не правильное значение

Потом еще раз меняю название parent cat на parent. Результат:

parent (parent)
----child (parent-child)
--------descendant (parent-cat-child-descendant) // не правильное значение

Из примера понятно, что категория 3-го уровня обновляется раньше категории 2-го уровня.


// Получаем всех потомков в древовидном порядке
$descendants = $this->descendants()->defaultOrder()->get();

// Данный метод заполняет отношения parent и children
$descendants->push($this)->linkNodes()->pop(); // Но сбиваем порядок! Надо убрать.


P.S.: Все работало нормально, пока не добавил категорию 3-го уровня.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.