Установка атрибута title элементов ссылок главного меню (или имен страниц)

Я хочу получать всплывающие подсказки при наведении курсора на пункты главного меню в Liferay. По умолчанию сделать это невозможно. Даже в файлах *.vm разметка не включает никаких атрибутов title для ссылок.

Я пытаюсь сделать так, чтобы для страницы был определен настраиваемый атрибут. Это дает мне интерфейс в самом Liferay для ввода значений заголовков, которые я могу захотеть. Затем я планирую использовать это значение в качестве значения заголовка для ссылок меню. Хотя не уверен, что это сработает.

Есть ли лучший способ, о котором я не знаю?


person Gaurav Sharma    schedule 03.01.2013    source источник


Ответы (4)


Тогда я думаю, что вы можете использовать HTML Title для описания страницы, как показано на рисунке:

введите здесь описание изображения

И вы можете использовать это ($nav_item.getTitle()) в атрибуте title тега <a> navigation.vm вашей пользовательской темы, как упоминает @Sharana:

<a title="$nav_item.getTitle()" href="$nav_item.getURL()" $nav_item.getTarget()><span>$nav_item.icon() $htmlUtil.escape($nav_item.getName())</span></a>

Вы также можете использовать это ($nav_item.getLayout().getHTMLTitle($locale)):

<a title="$nav_item.getLayout().getHTMLTitle($locale)" href="$nav_item.getURL()" $nav_item.getTarget()><span>$nav_item.icon() $htmlUtil.escape($nav_item.getName())</span></a>

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

Надеюсь, это поможет дать вам некоторое руководство.

person Prakash K    schedule 04.01.2013
comment
Добавление $the_title дает наклон текущей загруженной страницы для каждой ссылки меню. Явно не то, что нужно. Но мне просто нужно выяснить, как получить доступ к правильной переменной, я думаю. Любая идея, как получить доступ к пользовательским переменным в файлах .vm? - person Gaurav Sharma; 04.01.2013
comment
ой! Я пропустил это, на самом деле я хотел получить title из $nav_item, то есть $nav_item.getTitle() или $nav_item.getLayout().getHTMLTitle($locale) для разных страниц меню. Я отредактировал свой ответ. - person Prakash K; 05.01.2013

Почему вы думаете, что это невозможно сделать в navigation.vm?

ниже код из navigation.vm

<a href="$nav_item.getURL()" $nav_item.getTarget()><span>$nav_item.icon() $htmlUtil.escape($nav_item.getName())</span></a>

если вы добавите к этому атрибут заголовка,

<a title="$htmlUtil.escape($nav_item.getName())" href="$nav_item.getURL()" $nav_item.getTarget()><span>$nav_item.icon() $htmlUtil.escape($nav_item.getName())</span></a>

Оно работает.

аналогично для детских товаров.

person Sharana    schedule 04.01.2013
comment
Я думаю, он не спрашивает, как включить атрибут title для ссылок меню, вместо этого он спрашивает, как определить значение title точно так же, как когда мы создаем страницу, мы определяем Page Name, Page Type, Page Template и т. д., он хочет определить Page Title и затем он включит этот Page Title в качестве атрибута title тега <a> в шаблон темы, как вы показали. Итак, @GauravSharma, я правильно понимаю ваши потребности? - person Prakash K; 04.01.2013
comment
@PrakashK да, это правильно. Значение атрибута title всегда будет отличаться от значения $nav_item.getName(). Это будет описание ссылки. Мне нужен интерфейс в Liferay, чтобы админ мог его настроить и не требовалось участие разработчика каждый раз при создании новой страницы или пункта меню. - person Gaurav Sharma; 04.01.2013
comment
@GauravSharma, я просто привел пример, как это можно сделать. замена его удобным для пользователя набором значений для атрибута title из объекта Layout — это то, что вам нужно сделать. Лично я думаю, что индивидуальный подход к файлам является сложным по сравнению с этим. Также я не думаю, что заслуживаю -ve голосования за мой ответ .. ;-) Ура. - person Sharana; 07.01.2013

Правильный ответ — в том направлении, в котором я шел изначально. Создайте настраиваемое поле, связанное со страницей, а затем используйте его в шаблоне скорости. Вот весь код меню навигации, где menuTitle — имя моей пользовательской переменной:

<nav class="$nav_css_class" id="navigation">
    <h1>
        <span>#language("navigation")</span>
    </h1>

    <ul>
        #foreach ($nav_item in $nav_items)
            #if ($nav_item.isSelected())
                <li class="selected">
            #else
                <li>
            #end
                <a title="$nav_item.getLayout().getExpandoBridge().getAttribute("menuTitle")" href="$nav_item.getURL()" $nav_item.getTarget()><span>$nav_item.icon() $nav_item.getName()</span></a>

                #if ($nav_item.hasChildren())
                    <ul class="child-menu">
                        #foreach ($nav_child in $nav_item.getChildren())
                            #if ($nav_child.isSelected())
                                <li class="selected">
                            #else
                                <li>
                            #end
                                <a title="$nav_child.getLayout().getExpandoBridge().getAttribute("menuTitle")" href="$nav_child.getURL()" $nav_child.getTarget()>$nav_child.getName()</a>
                            </li>
                        #end
                    </ul>
                #end
            </li>
        #end
    </ul>
</nav>
person Gaurav Sharma    schedule 04.01.2013
comment
Я отредактировал свой ответ, чтобы вам не нужно было создавать custom-field. - person Prakash K; 05.01.2013

Оба решения хороши.

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

Простите меня, если я что-то пропустил здесь. Если я, пожалуйста, уточните.

person Atul Patel    schedule 07.01.2013