Меню для сайта на контекстах
Добрый день, коллеги)
Появился тут вопрос к которому пока не знаю как подступиться, решил попросить помощи.
Есть сайт на контекстах такой структуры:
Буду признателен за помощь.
Появился тут вопрос к которому пока не знаю как подступиться, решил попросить помощи.
Есть сайт на контекстах такой структуры:
d1.site.ru
Первый раздел
первый подраздел
второй подраздел
Второй раздел
третий раздел
d2.site.ru
Первый раздел
первый подраздел
второй подраздел
Второй раздел
третий раздел
и так далее
Как построить меню по такой конструкции вида<ul>
<li>d1.site.ru
<ul>
<li>Первый раздел
<ul>
<li>первый подраздел</li>
<li>второй подраздел</li>
</ul>
</li>
<li>Второй раздел</li>
<li>третий раздел</li>
</ul>
</li>
<li>d2.site.ru
<ul>
<li>Первый раздел
<ul>
<li>первый подраздел</li>
<li>второй подраздел</li>
</ul>
</li>
<li>Второй раздел</li>
<li>третий раздел</li>
</ul>
</li>
и так далее
</ul>
Создать вот такое с виду не хитрое меню, но через контексты.Буду признателен за помощь.
Комментарии: 10
pdoMenu как я понимаю мне тут не поможет? так как сгруппировать по контексту оно не может, или я не прав.
Надо писать свой небольшой сниппет. Типа такого
$contexts = $modx->getCollection('modContext', array('key:!=' => 'mgr'));
$output = '<ul>';
foreach ($contexts as $ctx) {
$output .= '<li>'.$ctx->get('key');
$output .= $modx->runSnippet('pdoMenu', array('parents' => 0, 'context' => $ctx->get('key')));
$output .= '</li>';
}
$output .= '</ul>';
Круто, спасибо большое. Это то что нужно. Попробую разобраться что тут и как и подправить, если выйдет)
Еще раз спасибо, но не подскажите еще один момент.
А как вытащить из контекста в меню его имя и урл (site_name, site_url)
что-то похожее получить
И ограничить не только по mgr но и web (array('key:!=' => 'mgr') как условие поменять)
А как вытащить из контекста в меню его имя и урл (site_name, site_url)
что-то похожее получить
$output .= '<li><a href="'.site_url.'"></a>".site_name';
И ограничить не только по mgr но и web (array('key:!=' => 'mgr') как условие поменять)
Название — это $ctx->get('name'), а URL как-то так можно получить:
Только теперь скрипт будет тормозить при большом количестве контекстов. Лучше переписать его на PDO и использовать JOIN для получения site_url
$setting = $modx->getObject('modContextSetting',
array('context_key' => $ctx->get('key'), 'key' => 'site_url'));
$url = $setting->get('value');
Только теперь скрипт будет тормозить при большом количестве контекстов. Лучше переписать его на PDO и использовать JOIN для получения site_url
array('key:NOT IN' => array('mgr', 'web'))
Спасибо, все супер, работает.
Контекстов не много вроде штук 6-7, нагрузка не выросла сильно.
Еще раз спасибо за помощь).
Контекстов не много вроде штук 6-7, нагрузка не выросла сильно.
Еще раз спасибо за помощь).
Появилась еще одна проблемка, чтобы не плодить темы…
Товары положенные в корзину на разных поддоменах не видны в основном домене.
Т.е. если положить товар в dom1.site.ru то на странице товара site.ru/cart они не видны.
в session_cookie_domain стоит основное имя сайта site.ru
Можно это как-то поправить, или не вариант.
Товары положенные в корзину на разных поддоменах не видны в основном домене.
Т.е. если положить товар в dom1.site.ru то на странице товара site.ru/cart они не видны.
в session_cookie_domain стоит основное имя сайта site.ru
Можно это как-то поправить, или не вариант.
о нашел вроде
в файле
в файле
core/components/minishop2/model/minishop2/mscarthandler.class.php
сносим строчку ,'ctx' => $this->modx->context->get('key')
Вроде работает, но это как я понимаю не очень хорошее решение)
Да.
Хорошее решение — расширить класс корзины своим и заменить там методы, работающие с контекстами.
Хорошее решение — расширить класс корзины своим и заменить там методы, работающие с контекстами.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.