Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Картинка вместо текста ссылки (https://javascript.ru/forum/misc/76656-kartinka-vmesto-teksta-ssylki.html)

_marisha 30.01.2019 13:39

Картинка вместо текста ссылки
 
Вложений: 2
Доброго времени суток!
Существует необходимость вместо текста ссылки в пункте меню добавить картинку.
На данный момент меню выглядит так (скрин "Меню")
Необходимо сделать так (скрин "Меню после")

На данный момент ссылке добавляется картинка:
$('.bx_horizontal_menu_advaced .bx_hma_one_lvl>a:contains("TookALook")').css({'background':'url("https://afr-shop.ru/upload/medialibrary/67d/Bez-fona-s-tsvetom-teksta.png") no-repeat', 'background-size':'102px 90px', 'margin-top': '-17px'});

А потом вместо текста ссылки ничего не выводим
$('[href*="/catalog/tookalook/"]').text('');


Только вот при обновлении страницы сразу видно что подставляется картинка и потом убирается текст ссылки.

Возможно ли как-то скомпоновать 2 куска кода чтобы одновременно у ссылки убирался текст и добавлялось изображение? Спасибо.

laimas 30.01.2019 13:49

$('.bx_horizontal_menu_advaced .bx_hma_one_lvl>a:contains("TookALook")').text('') .css({.... Или удалять в тексте TookALook. Показать надо бы код структуры меню, кусочек.

А почему не на сервере сразу это определить?

_marisha 30.01.2019 14:05

Вот кусочек меню
<ul id="ul_catalog_menu_XEVOpk">
		     <!-- first level-->
				<li onmouseover="BX.CatalogMenu.itemOver(this);" onmouseout="BX.CatalogMenu.itemOut(this)" class="bx_hma_one_lvl dropdown" style="width: 10.7565%;" id="menu-item-1">

				<a href="/catalog/tookalook/" style="background: url(&quot;https:/upload/medialibrary/67d/Bez-fona-s-tsvetom-teksta.png&quot;) 0% 0% / 102px 90px no-repeat; margin-top: -17px;"></a>

							<span style="display: none"></span>
				<span class="bx_children_advanced_panel animate">
					<img src="" alt="">
				</span>
				</li>
		     <!-- first level-->
				<li onmouseover="BX.CatalogMenu.itemOver(this);" onmouseout="BX.CatalogMenu.itemOut(this)" class="bx_hma_one_lvl dropdown" style="width: 17.4941%;" id="menu-item-4">

				<a href="/catalog/bluzki_dzhempera/">

					Блузки, джемпера				</a>

							<span style="display: none"></span>
				<span class="bx_children_advanced_panel animate">
					<img src="" alt="">
				</span>
				
		     <!-- first level-->
				<li onmouseover="BX.CatalogMenu.itemOver(this);" onmouseout="BX.CatalogMenu.itemOut(this)" class="bx_hma_one_lvl 
								" style="width: 6.73759%;">
				<a href="/catalog/bryuki/">

					Брюки				</a>
				</li>
		</ul>


Меню формируется автоматически на основании дерева групп из 1С

"А почему не на сервере сразу это определить?" - не знаю как сделать.

laimas 30.01.2019 14:15

<a href="/catalog/tookalook/" style="background: url(&quot;https:/upload/medialibrary/67d/Bez-fona-s-tsvetom-teksta.png&quot;) 0% 0% / 102px 90px no-repeat; margin-top: -17px;"></a> - это так уже и сформировано? Тогда откуда здесь уже указано изображение?

Цитата:

Сообщение от _marisha
Меню формируется автоматически

Где формируется на клиенте или на сервере?

_marisha 31.01.2019 05:43

Вложений: 1
laimas, "это так уже и сформировано?" - style добавляется с помощью скрипта
$('.bx_horizontal_menu_advaced .bx_hma_one_lvl>a:contains("TookALook")').css({'background':'url("https://afr-shop.ru/upload/medialibrary/67d/Bez-fona-s-tsvetom-teksta.png") no-repeat', 'background-size':'102px 90px', 'margin-top': '-17px'});


Код меню во вложении.

laimas 31.01.2019 07:40

То есть эта замена только при условии if ($USER->GetID() == 3656)? А текст "TookALook" находится в перовом элемента А, вот в этом <a href="<?=$arResult["ALL_ITEMS"][$itemID]["LINK"]?>"? Если так, то почему бы не задать и описать некое имя класса:

.xxxx {
    background: url([url]https://afr-shop.ru/upload/medialibrary/67d/Bez-fona-s-tsvetom-teksta.png[/url]) no-repeat;
    background-size: 102px 90px;
    margin-top: -17px
}


А по условию определять:

<a href="<?=$arResult["ALL_ITEMS"][$itemID]["LINK"]?>" 
		 <?=is_array($arColumns) && count($arColumns) > 0 && $existPictureDescColomn 
            ? 'onmouseover="obj_<?=$menuBlockId?>.changeSectionPicure(this);"'
			: null?>
         class="<?$USER->GetID()==3656 ? 'xxxx' : null?>"><?=$USER->GetID()==3656 ? null : $arResult["ALL_ITEMS"][$itemID]["TEXT"]?></a>


и не нужно никаких скриптов на клиенте. Если я правильно разобрался что к чему, это нужный А и $arResult["ALL_ITEMS"][$itemID]["TEXT"] это и есть текст "TookALook".

PS. А как будет отображаться ссылка с картинкой фоновой и без текста (правда если эта ссылка имеет только текст "TookALook"), без указания явных размеров?

_marisha 31.01.2019 08:55

laimas,
Цитата:

Сообщение от laimas
То есть эта замена только при условии if ($USER->GetID() == 3656)?

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

Сообщение от laimas
А текст "TookALook" находится в перовом элемента А, вот в этом <a href="<?=$arResult["ALL_ITEMS"][$itemID]["LINK"]?>"?

- текст "TookALook" находится в этом элементе. Но в нем также находятся наименования других разделов ("Блузки, джемпера", "Брюки" и т.д.). Поэтому не знаю как иначе конкретно выделить именно пункт "TookALook", не затрагивая остальные.
В стр 218 как раз выводятся наименования разделов

laimas 31.01.2019 15:04

Цитата:

Сообщение от _marisha
Но в нем также находятся наименования других разделов

Это как, если по картинке, это текст, а далее "Блузки, джемпера", "Брюки", и в коде результирующем, что показан, "Блузки, джемпера", "Брюки" это отдельные ссылки?

Как бы то ни было, но если все таки есть и полезный текст, то удалять его, то есть вот так:

<?=$USER->GetID()==3656 ? str_replace('TookALook', '', $arResult["ALL_ITEMS"][$itemID]["TEXT"]) : $arResult["ALL_ITEMS"][$itemID]["TEXT"]?>

laimas 31.01.2019 15:19

Цитата:

Сообщение от _marisha
В стр 218 как раз выводятся наименования разделов

В этой строке вывод </li>. Есть в строке 220 ссылка с таким текстом, и если тоже заменить, то аналогично. А вообще, что значит "видеть" ошибки, и почему они не смогут их увидеть с картинкой, если ссылка то никуда не исчезает? И такие вещи лучше загодя определять, один раз, перед циклом, а в цикле вывод.

_marisha 01.02.2019 05:12

laimas,
В общем решили сделать с помощью css.
a[href="/catalog/tookalook/"]
{
background-image:url("/teksta.png");
background-size:102px 90px;
background-position: center;
font-size:0;
min-width: 110px;
background-repeat: no-repeat;
}
Цитата:

Сообщение от laimas
А вообще, что значит "видеть" ошибки

- доработка применяется только для пользователя, который авторизован и с ID=3656

laimas 01.02.2019 08:46

Цитата:

Сообщение от _marisha
доработка применяется только для пользователя, который авторизован и с ID=3656

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

А вообще это не делается костылями или временным решением, достаточно в базе определять для разделов (а также документов/объектов раздела) режим - отображать/скрыть. Если определить режим "скрыть" для раздела, то такой раздел не выбирается из базы, а значит и не будет его в меню. Все запросы проверяются и если закрыт документ/объект или его родительский раздел, то пользователю выводится соответствующее сообщение.

А что у вас за "защита" такая я так и не понял. :)


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