Вывод списка всех контекстов в каждом из них (проблема)
Есть 4 контекста, условно:
1) site.ru
2) name1.site.ru
3) name2.site.ru
4) name3.site.ru
Все http_host и прочее прописаны у каждого. Вручную каждый открывается без проблем.
Вывожу их в список, чтобы переключаться между ними во фронте переадресацией.
И начинаются чудеса:
В контекстах 1 и 2 показываются в списке только они, а 3 и 4 вообще не выводятся.
В 3 контексте видны 1, 2, 3.
В 4 контексте в списке видны 1, 2, 3, 4.
Это как?
Сниппет, отвечающий за вывод:
1) site.ru
2) name1.site.ru
3) name2.site.ru
4) name3.site.ru
Все http_host и прочее прописаны у каждого. Вручную каждый открывается без проблем.
Вывожу их в список, чтобы переключаться между ними во фронте переадресацией.
И начинаются чудеса:
В контекстах 1 и 2 показываются в списке только они, а 3 и 4 вообще не выводятся.
В 3 контексте видны 1, 2, 3.
В 4 контексте в списке видны 1, 2, 3, 4.
Это как?
Сниппет, отвечающий за вывод:
<?php
$output = null;
switch ($scriptProperties['type']){
default:
case 'list':
$contexts = $modx->getCollection('modContext', array('key:!=' => 'mgr'));
foreach($contexts as $cx) {
if($cx->prepare()){
$data = array(
'key' => $cx->key,
'name' => ($cx->key != "web")?$cx->name:"Главная страница",
'url' => $cx->config['site_url'],
);
$output .= $modx->getChunk($scriptProperties['tpl'], array('data' => $data));
}
}
break;
case 'city':
if ($modx->context->key == 'web') $output = 'Выберите город';
else {
$ctx = $modx->getObject('modContext', array('key' => $modx->context->key));
$output = $ctx->get('name');
}
break;
}
return $output;UPD1: Косяк с контекстами 3 и 4: под анонимом не открываются, 404 вместо главной. Права в админке выставлены на группу для этих контекстов. Скидываешь кеш, открываешь — все работает. Не понимаю… Комментарии: 23
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
П.С. Зеркально отвечаю на любезность минусом.
из под админа в Console отрабатывает корректно.
Проблема решилась – просто накатил поверх ту же версию modx и обновил.
У тебя проблема была либо с правами, либо с исходником ядра. Возможно, ты просто не скидывал сессии после внесения правок в права.
Управление => Перезагрузить права доступа
Управление => Завершить все сеансы
У меня этот код из топика выше выводит одинаковые адреса:
Хотя в настройках контекстов все прописано правильно?
en — site1.ru, web — site2.ru.
Может подскажите где искать?
Все правильно — это «site_url» в контекстах указан?
Благодарю…
Не обязательно, если не нужно дефолтное значение, config — публичное свойство.
Кроме того, не вижу необходимости дёргать чанк ради какого-нибудь <a ....>Контекст.
Судя по всему не настроены права load для анонимов.
Что происходит в последнем кейсе? Получается объект контекста текущего контекста!
Ну и вообще весь свитч выглядит как
Не удивлюсь, если ещё и сниппет кэшированный.
Сниппет был не кешированный. Проблема почему-то решилась апдейтом ядра.