Скрыть папку в URL / Активный пункт меню / Обработчик ошибок
Скрыть папку в URL / Активный пункт меню / Обработчик ошибок
Доброго времени суток, форумчане!
Хотел спросить у Вас помощи по вот каким вопросам:
1) В своем проекте юзаю CMS Yupe и их стандартную структуру каталогов (index.php находится в папке 'public', а не в корне проекта). В связи с этим вопрос: как убрать из строки адреса папку "public" http://mysite.ru/public/site/news
Т.е. какие действия необходимо предпринять, чтобы в пути никогда не отображалась папка /public/ ?
2) Так вышло, что во фронтенд-части разрабатываемого мною проекта используется обычное меню от верстальщика, активные пункты которого необходимо подсвечивать. Сначала выбор пал на jQuery, однако решение оказалось очень неудачным, из-за того, что class="active" для тега <a> выставляется только текущему (совпадающему по URL) адресу страницы (например, http://mysite.ru/news), но если же у этого же (активного) пункта есть параметры (http://mysite.ru/news/some-news), то подсветка теряется, да и анимация там отрабатывает с промедлением. Как выход - JS-щики посоветовали решать такие дела на сервере. Хотел спросить у вас: КАК?))
3) Как и где лучше обрабатывать ошибку такого типа: Если у ссылки атрибут href="#" (или любой другой, означающий, что материалы на данный момент не готовы к отображению), то при переходе в любом месте сайта по такому URL выводить CHttpError (какой код, кстати, посоветуете для вот такого сообщения?): "Материалы готовятся к публикации..."
Спасибо Вам огромное заранее за помощь
Хотел спросить у Вас помощи по вот каким вопросам:
1) В своем проекте юзаю CMS Yupe и их стандартную структуру каталогов (index.php находится в папке 'public', а не в корне проекта). В связи с этим вопрос: как убрать из строки адреса папку "public" http://mysite.ru/public/site/news
Т.е. какие действия необходимо предпринять, чтобы в пути никогда не отображалась папка /public/ ?
2) Так вышло, что во фронтенд-части разрабатываемого мною проекта используется обычное меню от верстальщика, активные пункты которого необходимо подсвечивать. Сначала выбор пал на jQuery, однако решение оказалось очень неудачным, из-за того, что class="active" для тега <a> выставляется только текущему (совпадающему по URL) адресу страницы (например, http://mysite.ru/news), но если же у этого же (активного) пункта есть параметры (http://mysite.ru/news/some-news), то подсветка теряется, да и анимация там отрабатывает с промедлением. Как выход - JS-щики посоветовали решать такие дела на сервере. Хотел спросить у вас: КАК?))
3) Как и где лучше обрабатывать ошибку такого типа: Если у ссылки атрибут href="#" (или любой другой, означающий, что материалы на данный момент не готовы к отображению), то при переходе в любом месте сайта по такому URL выводить CHttpError (какой код, кстати, посоветуете для вот такого сообщения?): "Материалы готовятся к публикации..."
Спасибо Вам огромное заранее за помощь
Re: Скрыть папку в URL / Активный пункт меню / Обработчик ош
неужели никто не в силах помочь?
- sluchainiyznak
- Сообщения: 617
- Зарегистрирован: 2013.05.19, 17:51
- Откуда: ХМАО-Югра, г. Сургут
- Контактная информация:
Re: Скрыть папку в URL / Активный пункт меню / Обработчик ош
1. Настроить виртуальный хост
Re: Скрыть папку в URL / Активный пункт меню / Обработчик ош
1) это вопрос к их техподдержке.
2) если не получается решить виджетом Cmenu, то попробуйте к классу добавить нечто подобное:
3) можно jquerry, поставить событие, только осторожнее, многие ссылки на сайтах имеют # ссылку.
А вообще, выводите туда ссылку статьи, а в статье, если статус в доработке, то выводите сообщение что страница в доработке.
2) если не получается решить виджетом Cmenu, то попробуйте к классу добавить нечто подобное:
Код: Выделить всё
<?= ($this->action->id='имя контроллера в этом меню?') ? ' active' : '' ?>
А вообще, выводите туда ссылку статьи, а в статье, если статус в доработке, то выводите сообщение что страница в доработке.
Re: Скрыть папку в URL / Активный пункт меню / Обработчик ош
Спасибо за ответ. С 1ым и 3ьим вопросом вроде более-менее разобрался. Хочу уточнить по 2му. Вот фрагмент с меню моего шаблона main.php:kawabanga писал(а):1) это вопрос к их техподдержке.
2) если не получается решить виджетом Cmenu, то попробуйте к классу добавить нечто подобное:3) можно jquerry, поставить событие, только осторожнее, многие ссылки на сайтах имеют # ссылку.Код: Выделить всё
<?= ($this->action->id='имя контроллера в этом меню?') ? ' active' : '' ?>
А вообще, выводите туда ссылку статьи, а в статье, если статус в доработке, то выводите сообщение что страница в доработке.
Код: Выделить всё
<nav id="navigation-main">
<?php
echo CHtml::link('Главная', array('/index'), array('class' => $this->action->id='site' ? ' active' : ''));
echo CHtml::link('Каталог', array('/catalogue'));
echo CHtml::link('Акции', array('/shares'));
echo CHtml::link('Сотрудничество', array('/cooperation'));
echo CHtml::link('Новости', array('/news'));
echo CHtml::link('Карьера', array('/career'));
echo CHtml::link('Магазины', array('/stores'));
?>
</nav>
Стандартный виджет CMenu не помог, да и вывелся не так, как нужно. А вот этот фрагмент кода выдает CException "Свойство "CInlineAction.id" доступно только для чтения. "
Вот.
Просто, если честно, до сих пор ума не приложу как на сервере (без использования JS) проворачивать такие штуки - чтобы class="active" умно отрабатывал на всех URL'ах текущего активного пункта.
Re: Скрыть папку в URL / Активный пункт меню / Обработчик ош
опечатка у меня и у вас)))))
= - присваивание
== - сравнение.
$this->action->id=='site
= - присваивание
== - сравнение.
$this->action->id=='site
Re: Скрыть папку в URL / Активный пункт меню / Обработчик ош
точно)) не доглядел. спасибо, но остались небольшие нюансы...Вот если я пишу в меню вот так, как Вы сказали:kawabanga писал(а):опечатка у меня и у вас)))))
= - присваивание
== - сравнение.
$this->action->id=='site
Код: Выделить всё
<nav id="navigation-main">
<?php
echo CHtml::link('Главная', array('/index'), array('class' => $this->action->id == 'index' ? ' active' : ''));
echo CHtml::link('Каталог', array('/catalogue'));
echo CHtml::link('Акции', array('/shares'));
echo CHtml::link('Сотрудничество', array('/cooperation'));
echo CHtml::link('Новости', array('/news'));
echo CHtml::link('Карьера', array('/career'));
echo CHtml::link('Магазины', array('/stores'));
?>
</nav>
Но вот если пытаюсь так: mysite.com/index/1 (такие ведь случаи бывают, когда маршрутизатор GET-параметры обрабатывает через слэш), то появляется ошибка 404 (само собой, все норм), НО подсветка с вкладки "Главная" теряется (хотя, по сути ведь продолжает работать тот же контроллер 'site' и действие 'index' в частности - кстати, $this->action->id выводит имя текущего экшена, а не контроллера).
Вот такие дела. Уже без JS - это хорошо, но все же хотелось бы такую штуку, как в менюшках bootstrap'a - в какие категории/подкатегории/пункты и всевозможные действия от текущей вкладки не зайди - подсветка не теряется.
Но все равно спасибо!)
Re: Скрыть папку в URL / Активный пункт меню / Обработчик ош
так вывести можно не только название действия, но и название контроллера.
Re: Скрыть папку в URL / Активный пункт меню / Обработчик ош
Да, вот, погуглил и сделал вот так:kawabanga писал(а):так вывести можно не только название действия, но и название контроллера.
Код: Выделить всё
<nav id="navigation-main">
<?php
echo CHtml::link('Главная', array('/index'), array('class' => $this->UniqueId == 'site' ? 'active' : ''));
echo CHtml::link('Каталог', array('/catalogue'));
echo CHtml::link('Акции', array('/shares'));
echo CHtml::link('Сотрудничество', array('/cooperation'));
echo CHtml::link('Новости', array('/news'));
echo CHtml::link('Карьера', array('/career'));
echo CHtml::link('Магазины', array('/stores'));
?>
</nav>
Re: Скрыть папку в URL / Активный пункт меню / Обработчик ош
у вас есть одновременно и название контроллера и название действия
Re: Скрыть папку в URL / Активный пункт меню / Обработчик ош
Точно, спасибо!) Решил эту проблему вот каким способом:kawabanga писал(а):у вас есть одновременно и название контроллера и название действия
Код: Выделить всё
<nav id="navigation-main">
<?php
echo CHtml::link('Главная', array('/index'), array('class' => ($this->UniqueId == 'site' && $this->action->id == 'index') ? 'active' : ''));
echo CHtml::link('Каталог', array('/catalogue'), array('class' => $this->UniqueId == 'category/category' ? 'active' : ''));
echo CHtml::link('Акции', array('/shares'), array('class' => ($this->UniqueId == 'site' && $this->action->id == 'shares') ? 'active' : ''));
echo CHtml::link('Сотрудничество', array('/cooperation'), array('class' => ($this->UniqueId == 'site' && $this->action->id == 'cooperation') ? 'active' : ''));
echo CHtml::link('Новости', array('/news'), array('class' => ($this->UniqueId == 'site' && $this->action->id == 'news') ? 'active' : ''));
echo CHtml::link('Карьера', array('/career'), array('class' => ($this->UniqueId == 'site' && $this->action->id == 'career') ? 'active' : ''));
echo CHtml::link('Магазины', array('/stores'), array('class' => ($this->UniqueId == 'site' && $this->action->id == 'stores') ? 'active' : ''));
?>
</nav>
Спасибо Вам за совет, подход интересный и как по мне лучше, быстрее и эффективнее решения на JS))
Кстати, понял для себя почему при переходе на mysite.com/index/1 подсветка с пункта "Главная" уходит - там ведь стоит условие на SiteController и actionIndex, а т.к. выдает 404 "страница не найдена", то отрабатывает уже actionError() - все верно, вообщем