Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Азат Разетдинов 14.07.2004 12:56
Задача была поставлено чётко: есть меню из трёх пунктов.uri title / О проекте /staff/ Сотрудники /trips/ ПоездкиНужно подсветить пункт меню, если пользователь находится в соответствующем разделе или его подразделах. Казалось бы, что проще, поставил проверку
^if(in $menu.uri)и живи спокойно.
^file:dirname[$request:uri]. (Благо, разделов третьего уровня не ожидалось.) Особенность этого метода заключается, в том, что для
/foo/и
/foo/bar.htmlон выдает разный ответ. В первом случае
/, а во втором
/foo. Проблема решилась так: после аргумента ме-тода был вставлен пробел. Таким образом в обоих случаях выдавалась строка /foo, кото-рую (с добавленным слэшэм) можно было сравнивать с $menu.uri
^if($menu.uri eq ‘^file:dirname[$request:uri ]/’)Здесь возникла проблема с первым пунктом № 2: если для
/foo/bar/метод вы-дает
/fooто для
/результатом является… точка. А не пустая строка, что было бы удобнее с точки зрения программирования. Мы почесали репу и… ввели ещё один пробел, на сей раз перед аргументом метода. Поставив его также перед $menu.uri
^if(‘ $menu.uri’ eq ‘^file:dirname[ $request:uri ]/’)Конечно, можно было бы создать собственный метод. Чем бы он отличался от стандарт-но? Рассмотрим на примере.
^file:dirname[] / . /foo / /foo/ / /foo/bar /foo /foo/bar/ /foo ^my_dirname[] / [пустая строка] /foo [пустая строка] /foo/ /foo /foo/bar /foo /foo/bar/ /foo/barРезюме: dirname -- наглядный метод с точки зрения человека, но для программирования не пригоден. Почти.