Чтобы продублировать ссылку на страницу родителя в подменю в MODX, вам потребуется внести некоторые изменения в код pdoMenu.
Первым шагом я предлагаю открывать файл pdoMenu.class.php, который находится в корне вашего MODX проекта. Убедитесь, что у вас установлен соответствующий пакет pdoTools или DocLister.
Далее найдите функцию buildLevel внутри файла pdoMenu.class.php. По умолчанию, она выглядит примерно так:
private function buildLevel($parent, $level = 0, $row) { $this->currentLevel = $level; $this->output .= '<ul class="' . $this->levelClass . '">' . $this->eol; foreach ($this->matrix as $key => $matrixRow) { if ($parent == $matrixRow[$this->parentField]) { $parent = $matrixRow[$this->idField]; $this->output .= $this->getMarkup($matrixRow); $this->buildLevel($parent, $level + 1, $row); $parent = $matrixRow[$this->parentField]; } } $this->output .= '</ul>' . $this->eol; }
В этой функции нам понадобится добавить несколько строк кода. Внутри цикла foreach перед строчкой $this->output .= $this->getMarkup($matrixRow);
вставьте следующий код:
if ($row[$this->parentField] == $matrixRow[$this->parentField] && $key !== 0 && !empty($this->originalRow)) { $this->output .= $this->getMarkup($this->originalRow); $this->originalRow = []; }
Этот код проверяет, если родители текущего элемента и элемента, который будет отображаться следующим, совпадают, и если текущий элемент не первый, тогда добавляется ссылка на страницу родителя.
Теперь можно использовать pdoMenu с дублированием ссылки на страницу родителя. Вот пример использования pdoMenu:
$menu = $modx->runSnippet('pdoMenu', [ 'parents' => '0', 'level' => '3', 'tplOuter' => '@INLINE <ul>[[+wrapper]]</ul>', 'tpl' => '@INLINE <li>[[+link]] [[+subMenu]]</li>', 'tplParentRow' => '@INLINE <li>[[+linkParent]] [[+subMenu]]</li>', 'tplCurrentRow' => '@INLINE <li class="active">[[+link]] [[+subMenu]]</li>', 'tplParentRowHere' => '@INLINE <li class="active">[[+linkParent]] [[+subMenu]]</li>', ]);
Установите нужные значения parents
и level
для вашего меню. Далее создайте нужные вам шаблоны tplOuter
, tpl
, tplParentRow
, tplCurrentRow
и tplParentRowHere
для разметки меню.
Теперь при генерации меню с использованием pdoMenu, ссылка на страницу родителя будет продублирована в подменю.