Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   ребят помогите с меню (https://javascript.ru/forum/jquery/77337-rebyat-pomogite-s-menyu.html)

SERblY 20.04.2019 21:25

ребят помогите с меню
 
Помогите плз с меню, пытался через условие смарти сделать чето не получается, вот мб есть нормальный вариант на jquery ?
Есть меню типа:
{%foreach from=$categories item='category'%}
  {%if $category.parent == 0%}
  {%assign var="count" value=$category.id|count_msg%}
  {%assign var="caturl" value=$smarty.get.cat.0%}
<li class="resp-tab-item hor_1"><a class="nav1" href="{%$settings.path%}{%$category.uri%}/">
          {%$category.name%}</a></li>
						   
	{%/if%}
{%/foreach%}


вкратце выводит список категорий, как сделать чтобы если находясь в категории Авто например
<li> добавлялся бы класс tab-active
тоесть бышло бы так
<li class="resp-tab-item hor_1 tab-active"><a class="nav1" href="{%$settings.path%}{%$category.uri%}/">
          {%$category.name%}</a></li>

Но это пол беды блин как сделать чтобы именно конкретному пункту из выборки присваивался класс, а не всем подряд!
Если перевести на Русский (например пользователь находится на страничке http://site.ru/avto/):
{%foreach from=$categories item='category'%}
  {%if $category.parent == 0%}
  {%assign var="count" value=$category.id|count_msg%}
  {%assign var="caturl" value=$smarty.get.cat.0%}
<li class="resp-tab-item hor_1 (Если открыта /avto/, то подсвечивается то добавляется класс сюда)"><a class="nav1" href="{%$settings.path%}{%$category.uri%}/">
          {%$category.name%}</a></li>
						   
	{%/if%}
{%/foreach%}

объявил переменную
{%assign var="caturl" value=$smarty.get.cat.0%}
она будет выводить uri категории вида: Avto, Biznes, Nedvighimost и т.д.
можно использовать как то в решении данной задачи хз мб для id или еще чего, в шаблоне выводится так {%$caturl%}, можно использовать например так: <li id="{%$caturl%}" и т.д.

laimas 21.04.2019 01:07

И в чем проблема сравнить caturl с category.uri в нужном месте и по условию сравнения прописать или нет класс?

SERblY 21.04.2019 10:07

внимательнее прочитал бы, если бы не было проблем наверное не писал бы сюда, как считаешь ?

SERblY 21.04.2019 10:12

сравнить то сравнить, как привязать к конкретному пункту из массива всего, теоритический понимаю, но рабочий код не смогу написать, всю голову сломал уже

laimas 21.04.2019 10:25

Цитата:

Сообщение от SERblY
как привязать к конкретному пункту из массива всего

Что это означает?

Если открыта /avto/, и avto и т.п., это уникальные значения (как и другие значения у элементов), и эти значения, это category.uri и smarty.get.cat.0, то как может быть при сравнении множество совпадений?

SERblY 21.04.2019 10:35

я в jqury не силен, поэтому и прошу помощи в данном вопросе!
чисто на смарти как я понял этого не написать...

laimas 21.04.2019 10:48

Цитата:

Сообщение от SERblY
я в jqury не силен,

Вы можете в конце концов пояснить, что есть такое avto и подобное или нет? Если у вас avto не уникальные значения, то хоть на чем вы не сможете ничего сделать, если не задать условий.

Если в url значение avto и подобные, это уникальные категории, то есть не могут быть у множества элементов LI, то сравнивая category.uri (если эта переменная и есть категория) с параметром GET запроса, можно определить добавление класса. Получить значение GET параметра в Smarty, это $smarty.get.имя_параметра. Но судя по всему, у вас ЧПУ, а значит в шаблон нужно будет передавать результат обработки url в .htaccess.

Хватит в ступе толочь и поясните, что вот это то, а это другое и т.п.

SERblY 21.04.2019 10:58

Цитата:

Сообщение от laimas (Сообщение 506770)
Вы можете в конце концов пояснить, что есть такое avto и подобное или нет? Если у вас avto не уникальные значения, то хоть на чем вы не сможете ничего сделать, если не задать условий.

Если в url значение avto и подобные, это уникальные категории, то есть не могут быть у множества элементов LI, то сравнивая category.uri (если эта переменная и есть категория) с параметром GET запроса, можно определить добавление класса. Получить значение GET параметра в Smarty, это $smarty.get.имя_параметра. Но судя по всему, у вас ЧПУ, а значит в шаблон нужно будет передавать результат обработки url в .htaccess.

Хватит в ступе толочь и поясните, что вот это то, а это другое и т.п.

есть меню: давайте добавим ему айди тогда,
{%assign var="caturl" value=$smarty.get.cat.0%}
<li id="{%$caturl%}" class="resp-tab-item hor_1"><a class="nav1" href="{%$settings.path%}{%$category.uri%}/">{%$category.name%}</a></li>


выводится (в итоговом HTML) массив рубрик по типу:
<li id="Avto" class="resp-tab-item hor_1"><a class="nav1" href="Avto/">Авто</a></li>
НЕдвижимость
Работа
и .т.

Как написать рабочий код что-бы:
Если юзер находится на Avto/
сравнивалось url где он находится с id , если совпадает то <li>
добавляется class tab-active
тоесть было бы в итоге так:

{%assign var="caturl" value=$smarty.get.cat.0%}
<li id="{%$caturl%}" class="resp-tab-item hor_1 tab-active"><a class="nav1" href="{%$settings.path%}{%$category.uri%}/">{%$category.name%}</a></li>

SERblY 21.04.2019 11:06

да и маленькое дополнение, не знаю правильно выражусь или нет, но смысл то присвоение класса должно как то связано быть с айди, чтобы конкретному пункту списка из всего массива присваивался класс а не всему списку!

laimas 21.04.2019 11:06

SERblY, id тут боком.

Вы не показываете html кода меню и бог его знает, что оно из себя представляет. Допустим, что это одноуровневое меню, и значения Avto (с чего оно вдруг с заглавное стало не понятно) и другие, это есть уникальные значения. То есть Avto и другие значения могут быть только у одного элемента меню и в цикле никак не могут повторятся. Остается проверить GET параметр запроса и выводимое в меню в цикле и получим ответ.

Но чем определяется Avto и другое, какой переменной так и остается загадкой. А также не известно передается ли GET запрос в шаблон и как, или нет.

Это вы можете пояснить или нет? А может быть речь идет о группе элементов с таким параметром и надо раскрыть родителя? Вы понимаете о чем вас спрашивают?

SERblY 21.04.2019 11:14

куда подробнее я хз уже описать, не надо меня носом тыкать, если я не понимаю как написать, так я и прямо написал что не понимаю и прошу помочь, то что я понимаю я описал уже, если есть желание помочь, то помогите, если нету, то че тогда тут дискутировать, я обратился с реальной задачей с реальной просьбой!

ЗЫ выше есть код меню целиком

<ul class="resp-tabs-list hor_1" style="width: 100%; margin: 0px; display: inherit !important; padding: 20px 0 !important;">
  {%foreach from=$categories item='category'%}
  {%if $category.parent == 0%}
  {%assign var="count" value=$category.id|count_msg%}
  {%assign var="caturl" value=$smarty.get.cat.0%}
					<li class="resp-tab-item hor_1"><a class="nav1" href="{%$settings.path%}{%$category.uri%}">
          {%$category.name%}</a></li>
						   
	{%/if%}
{%/foreach%}

    {%if $smarty.get.cat.0 eq '$caturl' %}123{%/if%}
    {%if $smarty.get.cat.0 eq '$caturl' %}{%$settings.path%}{%$category.uri%}{%/if%}{%if $category.uri == $checkurl%}resp-tab-active{%/if%}
		</ul>

laimas 21.04.2019 11:20

Цитата:

Сообщение от SERblY
выше есть код меню целиком

И где это? Вот что уважаемый, здесь нельзя запустить код вашего шаблона. Что за ним скрывается только вам известно, но вместо ответов на конкретные вопросы вы ответ сыпите кодом, который по вашим же словам не работает. Вы думаете из этого можно понять почему?

А если кроме гонора ответов не будет, то да, разбирайтесь сами.

SERblY 21.04.2019 11:30

код работает, я попросил помощи в его дополнении, присвоить класс с помощью jquery? все подробно описано выше!!!

laimas 21.04.2019 11:40

Цитата:

Сообщение от SERblY
я попросил помощи в его дополнении, присвоить класс с помощью jquery

Вы вообще понимает где Smarty и где jQuery? Если нужно что-то на клиенте доработать, значит нечего тут демонстрировать код шаблона, а взять со страницы результат его работы как html код меню, выставить и описать чего нужно. Это что сложно понять? Лень это сделать или не понятно как, то хотя бы ссылку на страницу где можно увидеть меню, а то и ответа толкового на вопросы нет ни хрена, так еще и претензий через край.

SERblY 21.04.2019 11:43

у меня притензий нет и не может быть, это вы тут что то помоему грубовато общайтесь, не можете по делу нечего написать, не пишите, я просто не знаю jquery, сам бы сделал естественнООООО!!!:victory:
Информации более чем достаточно я выложил!

laimas 21.04.2019 11:46

Это какой-то пипец.

SERblY 21.04.2019 14:07

я просто шаблон еще верстаю, и вся загвостка в присвоении элементу списка класса активного, я весь код выложил я хз что еще показать вам..., я просто хз как на jquery это написать...

SERblY 21.04.2019 14:25

в HTML после обработки смарти меню выводится так, если вы об этом ?!!

<ul class="resp-tabs-list hor_1" style="width: 100%; margin: 0px; display: inherit !important; padding: 20px 0 !important;">
        <li id="Avtotransport" class="resp-tab-item hor_1"><a class="nav1" href="/Avtotransport">Автотранспорт</a></li>
	<li id="Biznes" class="resp-tab-item hor_1"><a class="nav1" href="/Biznes">Бизнес</a></li>
	<li id="Zhivotnye-i-rasteniya" class="resp-tab-item hor_1"><a class="nav1" href="/Zhivotnye-i-rasteniya"> Животные и растения</a></li>
	<li id="Znakomstva" class="resp-tab-item hor_1"><a class="nav1" href="/Znakomstva">Знакомства</a></li>
	<li id="Mebel-interer-obihod" class="resp-tab-item hor_1"><a class="nav1" href="/Mebel-interer-obihod"> Мебель, интерьер, обиход</a></li>
	<li id="Mobilnye-telefony" class="resp-tab-item hor_1"><a class="nav1" href="/Mobilnye-telefony">Мобильные телефоны</a></li>
	<li id="Muzyka-iskusstvo-kollekcii" class="resp-tab-item hor_1"><a class="nav1" href="/Muzyka-iskusstvo-kollekcii">Музыка, искусство, коллекции</a></li>
	<li id="Nedvizhimost" class="resp-tab-item hor_1"><a class="nav1" href="/Nedvizhimost">Недвижимость</a></li>
	<li id="Oborudovanie" class="resp-tab-item hor_1"><a class="nav1" href="/Oborudovanie">Оборудование</a></li>
	<li id="Odezhda-obuv-aksessuary" class="resp-tab-item hor_1"><a class="nav1" href="/Odezhda-obuv-aksessuary">Одежда, обувь, аксессуары</a></li>
	<li id="Orgtehnika" class="resp-tab-item hor_1"><a class="nav1" href="/Orgtehnika">Оргтехника</a></li>
	<li id="Rabota-i-obrazovanie" class="resp-tab-item hor_1"><a class="nav1" href="/Rabota-i-obrazovanie">Работа и образование</a></li>
	<li id="Stroi-materialy" class="resp-tab-item hor_1"><a class="nav1" href="/Stroi-materialy">Строй материалы</a></li>
	<li id="Tovary" class="resp-tab-item hor_1"><a class="nav1" href="/Tovary"> Товары</a></li>
	<li id="Uslugi" class="resp-tab-item hor_1"><a class="nav1" href="/Uslugi"> Услуги</a></li>
	<li id="Elektronika-i-bytovaya-tehnika" class="resp-tab-item hor_1"><a class="nav1" href="/Elektronika-i-bytovaya-tehnika">Электроника и бытовая техника</a></li>
	<li id="Drugoe" class="resp-tab-item hor_1"><a class="nav1" href="/Drugoe">Другое</a></li>
						   
	
		</ul>


до обработки (внутренний html):

<ul class="resp-tabs-list hor_1" style="width: 100%; margin: 0px; display: inherit !important; padding: 20px 0 !important;">
  {%foreach from=$categories item='category'%}
  {%if $category.parent == 0%}
  {%assign var="count" value=$category.id|count_msg%}
  {%assign var="caturl" value=$category.uri%}
					<li id="{%$caturl%}" class="resp-tab-item hor_1"><a class="nav1" href="{%$settings.path%}{%$category.uri%}">
          {%$category.name%}</a></li>
						   
	{%/if%}
{%/foreach%}

		</ul>

laimas 21.04.2019 14:48

Вы понимаете, что такое параметр запроса?

То есть на сервере это $_GET массив. Я понятия не имею как этот запрос у вас обрабатывается, но уже сотый раз повторяю - если передать в шаблон полученное из запроса, пусть это к примеру будет "Uslugi" под переменной $cat, то сравнивая ее значение со значением $category.uri, можно вывести и дополнительное имя класса. И нафиг не нужны ни id, ни JQ. Что в этом не понятно и какие тут могут быть проблемы?

А уж если не понятно о чем речь, и на клиента взгромоздить, то достаточно сравнить атрибут href ссылок меню с текущим Url страницы, и тоже никаких id в общем то и не нужно.

SERblY 21.04.2019 15:22

я понимаю что для Вас все просто, я не утверждаю что нужны айди, я просто обратился за решением как это написать на jquery или еще как-то, рабочий вариант, просто моих знаний нехватает решить данный вопрос, я просто описал как я это понимаю и выложил код, приветствую любые предложения и решения...
Спасибо!

laimas 21.04.2019 16:12

$(function() {
    //добавлен id элементу ul меню - menu.
    $('#menu').find('a').filter(function() {
        return location.href == this.href
    }).parent().addClass('tab-active');
});


это с учетом того, что в url нет слеша в конце. Но и в этом случае не будет проблем сделать, способов выделить/найти и т.п. много. Вот только зачем вся эта морока, если на сервере уже готовые строки в массиве есть, нужно только сравнить, не понятно.

SERblY 21.04.2019 16:17

Спасибо добрый человек! ,а вот со слешем не подскажите как сделать ? мб можно и просто сравнить как вы пишите я хз. я по просту незнаю как, все до чего додумался перебрал...

laimas 21.04.2019 16:27

this.href, то есть значение атрибута текущей ссылки вернет не то, что в нем прописано, а протокол, имя домена плюс то что прописано. Но не будет закрывающего слеша (вы же его не прописываете в коде), который может подставлять сервер, к примеру. Я уже говорил, что мне не известно как все на сервере обрабатывается, а гадать я не буду.

Если же значение атрибута получать средствами jQuery - .attr('href'), то будет возвращено только то, что в нем прописано. Это можно использовать как поиск в url для сравнения.

А вообще, не зная JS, но имея понятие о сервере, нужно делать это на нем, для него это плевая забава.

SERblY 21.04.2019 16:34

Цитата:

Сообщение от laimas (Сообщение 506790)
this.href, то есть значение атрибута текущей ссылки вернет не то, что в нем прописано, а протокол, имя домена плюс то что прописано. Но не будет закрывающего слеша (вы же его не прописываете в коде), который может подставлять сервер, к примеру. Я уже говорил, что мне не известно как все на сервере обрабатывается, а гадать я не буду.

Если же значение атрибута получать средствами jQuery - .attr('href'), то будет возвращено только то, что в нем прописано. Это можно использовать как поиск в url для сравнения.

А вообще, не зная JS, но имея понятие о сервере, нужно делать это на нем, для него это плевая забава.

вот сервер обрабатывает и выдает uri как в коде который я выше представлял именно со слешем по типу Avtotransport/

SERblY 21.04.2019 16:53

Цитата:

Сообщение от laimas (Сообщение 506790)
this.href, то есть значение атрибута текущей ссылки вернет не то, что в нем прописано, а протокол, имя домена плюс то что прописано. Но не будет закрывающего слеша (вы же его не прописываете в коде), который может подставлять сервер, к примеру. Я уже говорил, что мне не известно как все на сервере обрабатывается, а гадать я не буду.

Если же значение атрибута получать средствами jQuery - .attr('href'), то будет возвращено только то, что в нем прописано. Это можно использовать как поиск в url для сравнения.

А вообще, не зная JS, но имея понятие о сервере, нужно делать это на нем, для него это плевая забава.

можете рабочий пример привести, если конечно есть время, Спасибо!

laimas 21.04.2019 16:54

Я просил пояснить что в каких переменных передается в шаблон, чтобы понять причину, но так и не дождался, поэтому без комментария.

Чтобы не иметь проблем со слешем прописывайте их в коде явно, это ведь не сложно.

SERblY 21.04.2019 18:30

как тяжело это ппц(((( просто, ладно Спасибо! на других сайтах поищу, жесть весь день.... три строчки кода написать....


Часовой пояс GMT +3, время: 01:20.