Формирование во views кликабельной ссылки на телефон, Viber, WhatsApp, Skype, Telegram

Аватар пользователя Tinnka Tinnka 4 марта 2018 в 22:04

Уважаемые коллеги, есть тип материала где пользователь вводит отдельные в текстовые поля для ввода номера телефона, WhatsApp, Viber, Telegram, Skype и для теста добавлен вывод всех нужных ссылок в содержание (скрин 1):

<ul><li><a href="tel:79261234567">+79261234567</a></li>
<li><a href="https://api.whatsapp.com/send?phone=79261234567">WhatsApp</a></li>
<li><a href="viber://chat?number=79261234567">Viber</a></li>
<li><a href="tg://resolve?domain=79261234567">Telegram</a></li>
<li><a href="skype:nicskype?chat">Skype</a></li></ul>

Я пытаюсь на основании данных веденных пользователем сформировать во views следующие ссылки (скрин 2,3):

<ul><li><a href="tel:[field_phone]">+[field_phone]</a></li>
<li><a href="https://api.whatsapp.com/send?phone=[field_whatsapp]">WhatsApp</a></li>
<li><a href="viber://chat?number=[field_viber]">Viber</a></li>
<li><a href="tg://resolve?domain=[field_telegram]">Telegram</a></li>
<li><a href="skype:[field_skype]?chat">Skype</a></li></ul>

Но т.к. Views обрезает html то ссылки на вайбер, скайп и телеграмм оказываются не рабочие (скрин 4)

<span>Пользовательский текст: </span>
<span>
<ul><li><a href="tel:79261234567">+79261234567</a></li>
<li><a href="https://api.whatsapp.com/send?phone=79261234567">WhatsApp</a></li>
<li><a href="//chat?number=79261234567">Viber</a></li>
<li><a href="//resolve?domain=79261234567">Telegram</a></li>
<li><a href="nicskype?chat">Skype</a></li></ul>
</span>

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

Как можно реализовать желаемую функциональность?

0 Thanks

Лучший ответ

Аватар пользователя Tinnka Tinnka 7 мая 2018 в 22:31
1

А хорошая мысля приходит опосля :) Не давало мне покоя использование Views PHP для такого пустяка как настройки, вообщем самый простой пусть оказался самым очевидным.

Для формирования кликабельной ссылки на телефон, в материале создано текстовое поле в котором нужно вводить полный номер телефона вместе с кодом но без символа "+", а во Views в настройках поля включила "перезаписать и там указала:
<a href="tel:[field_phone]">+[field_phone]</a>

Для email:
<a href="mailto:[field_email]">[field_email]</a>

По аналогии добавлены текстовые поля для ввода WhatsApp, Viber, Skype и Telegram (причем с Skype и Telegram можно вводить как номер (без "+") там и NickName).

Для формирования ссылок на мессенджеры для каждого из них добавлены и скрыты текстовые поля с пользовательским текстом:

Глобальный: Пользовательский текст (Viber):
viber://chat?number=
Содержимое: Viber (Viber):
<a href="[nothing][field_viber]">+[field_viber]</a>

Глобальный: Пользовательский текст (WhatsApp):
https://api.whatsapp.com/send?phone=
Содержимое: WhatsApp (WhatsApp):
<a href="[nothing_1][field_whatsapp]">+[field_whatsapp]</a>

Глобальный: Пользовательский текст (Skype):
skype:
Содержимое: Skype (Skype):
<a href="[nothing_2][field_skype]?chat ">[field_skype]</a>

Глобальный: Пользовательский текст (Telegram):
https://t.me/
Содержимое: Telegram (Telegram):
<a href="[nothing_3][field_telegram]">[field_telegram]</a>

Наслаждайтесь :)

Комментарии

Аватар пользователя Tinnka Tinnka 4 марта 2018 в 23:54

Пробовала, views все равно обрезает из пути ссылки вот эту часть, вероятно из-за двоеточия
viber:

Аватар пользователя gun_dose gun_dose 5 марта 2018 в 0:08
Semantics wrote:

Проблемы вывести ссылку нет и быть не может.

С нестандартными протоколами проблема вполне может быть, и в данном случае есть.
Я бы такую штуку делал через double field + кастомный форматтер. Хотя, стоило бы ещё попробовать через стандартный модуль link

Аватар пользователя Tinnka Tinnka 5 марта 2018 в 15:00

Я бы такую штуку делал через double field + кастомный форматтер. Хотя, стоило бы ещё попробовать через стандартный модуль link

Через линк пробовала, тоже самое.
А можно подробней про решение с double field + кастомный форматтер?

Аватар пользователя Tinnka Tinnka 5 марта 2018 в 21:18
gun_dose wrote:

Я бы такую штуку делал через double field + кастомный форматтер. Хотя, стоило бы ещё попробовать через

Установила double field (список выбора и текстовое поле), подскажите пожалуйста как с помощью Custom formatters сформировать нужные мне ссылки?

Аватар пользователя gun_dose gun_dose 5 марта 2018 в 21:49
1

Суть в том, что в одну половинку поля надо записать урл, а в другую текст ссылки. Т.е. обе половинки - текстовые поля. Модуль Custom Formatters тут не нужен (наверное). И в принципе, можно вытащить поле через views и переопределить шаблон конкретно этого поля наподобие

<?php
<a href="<?php print $field['first']; ?>"><?php print $field['second']; ?></a> 
?>

Названия переменных взяты условно, т.к. надо смотреть по ситуации.

Аватар пользователя Tinnka Tinnka 6 марта 2018 в 16:23

Если можно, подскажите пожалуйста, как можно вытащить значения из связки "Список+текст" с помощью php?

Аватар пользователя gun_dose gun_dose 6 марта 2018 в 19:40
1

Надо смотреть, что там есть из переменных в шаблоне. Самый простой способ - поставить devel и выполнить в шаблоне dpm(get_defined_vars());

Аватар пользователя gun_dose gun_dose 5 марта 2018 в 9:39

Вьюсы в семёрке нормально так режут вывод html, например, атрибут style вырезается всегда.

Аватар пользователя Tinnka Tinnka 5 марта 2018 в 14:57

Хм... И правда, вьюз режет, но l() - точно пропускает протоколы в 7ке.

А можно подробней?

Аватар пользователя Tinnka Tinnka 8 марта 2018 в 21:56

Задача в результате была решена с помощью Views PHP следующим образом:
1. В материал были добавлены текстовые поля для ввода контактных данных, с возможностью ввести неограниченное количество значений, из формы поля были скрыты.
2. С помощью Views был создан блок для вывода полей и отображен на странице с контактными данными.

Для вывода полей с помощью php с формированием ссылки на лету был использован следующий код (это код для вывода всех номеров телефона через запятую, с убиранием последней запятой).:

<?php
foreach ( $data->field_field_phone as $key =>$value) {
  $phone=$data->field_field_phone[$key]['raw']['value'];
  $html[] = '<a href="tel:+'.$phone.'">+'.$phone.'</a>'.',';}
echo rtrim(implode(' ', $html), ',');
?>

Я с PHP достаточно на ВЫ, поэтому уверенна эти данные можно вывести более оптимально, но мне не хватило знаний, но работает :)

На скриншотах запечатлен весь путь и результат. Надеюсь мое решение кому нибудь пригодиться.

С моей точки зрения задача решена, пользователь может самостоятельно вводить все номера телефонов и никнеймы и не беспокоится о правильности ссылки.

Конечно я бы предпочла выполнить эту задачу без Views PHP, ну или хотя бы с помощью Double Field чтобы не плодить поля, но моих знаний php не хватило для вытаскивания данных из Double Field.

Любые дельные детальные советы по улучшению будут приняты с удовольствием! :)

Аватар пользователя Tinnka Tinnka 7 мая 2018 в 22:31
1

А хорошая мысля приходит опосля :) Не давало мне покоя использование Views PHP для такого пустяка как настройки, вообщем самый простой пусть оказался самым очевидным.

Для формирования кликабельной ссылки на телефон, в материале создано текстовое поле в котором нужно вводить полный номер телефона вместе с кодом но без символа "+", а во Views в настройках поля включила "перезаписать и там указала:
<a href="tel:[field_phone]">+[field_phone]</a>

Для email:
<a href="mailto:[field_email]">[field_email]</a>

По аналогии добавлены текстовые поля для ввода WhatsApp, Viber, Skype и Telegram (причем с Skype и Telegram можно вводить как номер (без "+") там и NickName).

Для формирования ссылок на мессенджеры для каждого из них добавлены и скрыты текстовые поля с пользовательским текстом:

Глобальный: Пользовательский текст (Viber):
viber://chat?number=
Содержимое: Viber (Viber):
<a href="[nothing][field_viber]">+[field_viber]</a>

Глобальный: Пользовательский текст (WhatsApp):
https://api.whatsapp.com/send?phone=
Содержимое: WhatsApp (WhatsApp):
<a href="[nothing_1][field_whatsapp]">+[field_whatsapp]</a>

Глобальный: Пользовательский текст (Skype):
skype:
Содержимое: Skype (Skype):
<a href="[nothing_2][field_skype]?chat ">[field_skype]</a>

Глобальный: Пользовательский текст (Telegram):
https://t.me/
Содержимое: Telegram (Telegram):
<a href="[nothing_3][field_telegram]">[field_telegram]</a>

Наслаждайтесь :)

Аватар пользователя Tinnka Tinnka 8 мая 2018 в 11:13
Semantics wrote:

Об этом вам с первых комментов и говорили

Ну очевидно ответ был мной не понят. Ну хорошо все что хорошо кончается :)