Уважаемые коллеги, есть тип материала где пользователь вводит отдельные в текстовые поля для ввода номера телефона, WhatsApp, Viber, Telegram, Skype и для теста добавлен вывод всех нужных ссылок в содержание (скрин 1):
<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):
<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>
<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>
Вариант ставить кучу дополнительных модулей кажется излишним, вариант указывать в ноде ссылки сразу текстом не подходит, т.к. велик риск что пользователь меняя контактные данные повредит ссылки.
Как можно реализовать желаемую функциональность?
Вложение | Размер |
---|---|
1._stranica_s_kontaktami.png | 11.32 КБ |
2._nastroyka_views.png | 7.85 КБ |
3._nastroyki_polzovatelskogo_teksta.png | 17.52 КБ |
4._rezultat_formirovaniya_sylok_vo_views.png | 13.11 КБ |
Комментарии
Скрин вьюхи и полей.
Проблемы вывести ссылку нет и быть не может.
Дополнила описание и прикрепила скриншоты
Views. Делаем поле ссылкой на материал
Пробовала, views все равно обрезает из пути ссылки вот эту часть, вероятно из-за двоеточия
viber:
С нестандартными протоколами проблема вполне может быть, и в данном случае есть.
Я бы такую штуку делал через double field + кастомный форматтер. Хотя, стоило бы ещё попробовать через стандартный модуль link
Через линк пробовала, тоже самое.
А можно подробней про решение с double field + кастомный форматтер?
Установила double field (список выбора и текстовое поле), подскажите пожалуйста как с помощью Custom formatters сформировать нужные мне ссылки?
Суть в том, что в одну половинку поля надо записать урл, а в другую текст ссылки. Т.е. обе половинки - текстовые поля. Модуль Custom Formatters тут не нужен (наверное). И в принципе, можно вытащить поле через views и переопределить шаблон конкретно этого поля наподобие
<?php
<a href="<?php print $field['first']; ?>"><?php print $field['second']; ?></a>
?>
Названия переменных взяты условно, т.к. надо смотреть по ситуации.
Если можно, подскажите пожалуйста, как можно вытащить значения из связки "Список+текст" с помощью php?
Надо смотреть, что там есть из переменных в шаблоне. Самый простой способ - поставить devel и выполнить в шаблоне dpm(get_defined_vars());
спасибо
Хм... И правда, вьюз режет, но l() - точно пропускает протоколы в 7ке.
С 8кой чуть сложнее.
В общем - да, свой форматтер - решит проблему.
Вьюсы в семёрке нормально так режут вывод html, например, атрибут style вырезается всегда.
А можно подробней?
Восьмёрка, восьмёркой, но в топике Д7 заявлено
Задача в результате была решена с помощью Views PHP следующим образом:
1. В материал были добавлены текстовые поля для ввода контактных данных, с возможностью ввести неограниченное количество значений, из формы поля были скрыты.
2. С помощью Views был создан блок для вывода полей и отображен на странице с контактными данными.
Для вывода полей с помощью 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.
Любые дельные детальные советы по улучшению будут приняты с удовольствием!
А хорошая мысля приходит опосля Не давало мне покоя использование 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>
Наслаждайтесь
Об этом вам с первых комментов и говорили
Ну очевидно ответ был мной не понят. Ну хорошо все что хорошо кончается