Александр 0 Posted February 23, 2014 Report Share Posted February 23, 2014 Что-то я туплю, и никак не могу сообразить. в index html имею некоторое меню, в нём класс current должен вставляться на соответствующей странице. сделал так: <li class=" {if !$smarty.get.cat}{if in_array($smarty.server.REQUEST_URI, array('/', '/tech.html'))}current{/if}{/if}"><a href="tech.html">Технологии</a></li> <li class="{if in_array($smarty.server.REQUEST_URI, array('/', '/index.php'))}current{/if}"><a href="index.php">Каталог</a></li> Всё бы ничего, но на главной странице класс активизирован в обоих случаях, а мне надо только во втором. Варианты: {if !$smarty.get.cat} {if $mainpage} {if in_array($smarty.server.REQUEST_URI, array('/', '/'))} не решают проблему. Каким образом можно задать условие TRUE на адресHttp://site.ru или Https://site.ru ? Link to post Share on other sites
support 447 Posted February 23, 2014 Report Share Posted February 23, 2014 Так есть же and и or для комбинации условий. т.е. например: {if !$smarty.get.cat and in_array($smarty.server.REQUEST_URI, array('/', '/tech.html'))} Link to post Share on other sites
Александр 0 Posted February 23, 2014 Author Report Share Posted February 23, 2014 Да, но данное условие не является условием отвечающим по критерию "не для заглавной страницы". Магазин видит страницы site.ru и site.ru/index.php как разные. Я просто не понимаю почему: {if in_array($smarty.server.REQUEST_URI, array('/', '/tech.html'))} является true для site.ru и site.ru/tech.html, и каким условием эти 2 страницы разделить? Link to post Share on other sites
support 447 Posted February 23, 2014 Report Share Posted February 23, 2014 Напишите просто условие правильно, используя and и/или or если нужно. Link to post Share on other sites
Александр 0 Posted February 23, 2014 Author Report Share Posted February 23, 2014 Напишите просто условие правильно, используя and и/или or если нужно. Link to post Share on other sites
Александр 0 Posted February 23, 2014 Author Report Share Posted February 23, 2014 Собственно за этим я и на форум залез : )) Мне не ясно как в шаблоне отличить site.ru от site.ru/index.php Link to post Share on other sites
support 447 Posted February 23, 2014 Report Share Posted February 23, 2014 $smarty.SEVER.REQUEST_URI Вот эту переменную используйте. Она имеет разные значения для / и /index.php Link to post Share on other sites
Александр 0 Posted February 23, 2014 Author Report Share Posted February 23, 2014 <li class=" {if in_array($smarty.server.REQUEST_URI, array('/', '/index.php'))}{else if in_array($smarty.server.REQUEST_URI, array('/', '/service.html'))}current{/if}"><a href="service.html">Сервис</a></li> <li class=" {if in_array($smarty.server.REQUEST_URI, array('/', '/index.php'))}{else if in_array($smarty.server.REQUEST_URI, array('/', '/tech.html'))}current{/if}"><a href="tech.html">Технологии</a></li> странно, но этот код начинает вставлять на всех кроме индексной. Как будто конструкция else if in_array($smarty.server.REQUEST_URI, array('/', '/service.html')) ничего не значит. ---------------- {$smarty.SERVER.REQUEST_URI} - в верхнем регистре у меня ничего на странице вообще не выводится, то есть в смарти такой переменной нет, есть $smarty.server.REQUEST_URI, которую и использую. Link to post Share on other sites
support 447 Posted February 23, 2014 Report Share Posted February 23, 2014 Так смотрите, что выводится $smarty.server.REQUEST_URI Что in_array возвращает, почему не работает как надо. Вместо in_array используйте другой вариант какой, можно что-нибудь придумать, я думаю. Link to post Share on other sites
Александр 0 Posted February 23, 2014 Author Report Share Posted February 23, 2014 Выводит он всё, что после адреса, то есть для site.ru/index.php - /index.php, что и понятно. А я пытаюсь понять, как мне определить условие , когда он ничего не содержит. Делал изначально ещё так: <li class="{ if in_array($smarty.server.REQUEST_URI, array('/', '/tech.html'))}current{/if}"><a href="tech.html">Технологии</a></li> <li class="{if in_array($smarty.server.REQUEST_URI, array('/', '/index.php')) | $smarty.server.REQUEST_URI!=''}current{/if}"><a href="index.php">Каталог</a></li> но при этом на странице site.ru/tech.html, выводит оба селектора. Link to post Share on other sites
support 447 Posted February 23, 2014 Report Share Posted February 23, 2014 Так а почему if ... else ... /if не использовать? Link to post Share on other sites
Александр 0 Posted February 24, 2014 Author Report Share Posted February 24, 2014 Я так и делаю у себя в других местах. Кое-что упростилось благодаря: {php} $REQUEST_URI_PAGE = parse_url($_SERVER['REQUEST_URI']); $page_path = $REQUEST_URI_PAGE['path']; {/php} <div id="toplinks"> <ul> <li class="{php}if ($page_path == '/service.html') {echo 'current';}{/php}"><a href="service.html">Сервис</a></li> <li class="{php}if ($page_path == '/tech.html') {echo 'current';}{/php}"><a href="tech.html">Технологии</a></li> <li class="{php}if ($page_path == '/index.php') {echo 'current';}{/php}"><a href="index.php">Каталог</a></li> </ul> </div> НО код выглядит некрасиво, смарти не задействован. Есть ли какой-то способ пробросить $page_path в глобальную переменную типа {$smarty.const.page_path} ? Link to post Share on other sites
support 447 Posted February 24, 2014 Report Share Posted February 24, 2014 Можно метку сделать через $vamTemplate->assign в /includes/header.php, к примеру. Затем в шаблоне просто использовать метку if $page_path ... Link to post Share on other sites
Александр 0 Posted February 24, 2014 Author Report Share Posted February 24, 2014 Да, что-то сразу не подумал, отлично получилось: Header.php $REQUEST_URI_PAGE = parse_url($_SERVER['REQUEST_URI']); $vamTemplate->assign('page_path',$REQUEST_URI_PAGE['path']); шаблон <li class="{if $page_path =='/tech.html'}current{/if}"><a href="tech.html">Технологии</a></li> <li class="{if $page_path =='/index.php'}current{/if}"><a href="index.php">Каталог</a></li> Благодарю. Здорово, теперь везде вместо: in_array($smarty.server.REQUEST_URI, array('/', '/checkout.php')) проставил: $page_path =='/checkout.php' Link to post Share on other sites
Александр 0 Posted February 24, 2014 Author Report Share Posted February 24, 2014 А есть где-нибудь список всех доступных переменных по разделам? Или глобальных, специфичных для вамшопа? Link to post Share on other sites
support 447 Posted February 24, 2014 Report Share Posted February 24, 2014 Разве что описание меток шаблноов в руководстве пользователя - http://vamshop.ru/manual/ch16s04.html Link to post Share on other sites
madvolkov 0 Posted February 17, 2016 Report Share Posted February 17, 2016 а где можно глянуть все эти приёмы по работе с smary шаблоном ? типа: $smarty.server.REQUEST_URI $page_path =='/checkout.php' Link to post Share on other sites
support 447 Posted February 17, 2016 Report Share Posted February 17, 2016 Документация по смарти вот здесь - http://www.smarty.net/docsv2/en/ Link to post Share on other sites
madvolkov 0 Posted February 17, 2016 Report Share Posted February 17, 2016 thank's ! Link to post Share on other sites
support 447 Posted February 17, 2016 Report Share Posted February 17, 2016 Удачи Link to post Share on other sites
Recommended Posts