Корректный ввод контактных данных в instantMaps

+14
2.46K
Если доверить юзерам сами добавлять объекты в instantMaps (что и должно быть), то при внесении контактных данных корявыми ручками мы увидим разнообразие стилей. Например телефоны будут попадать в базу так: +7(123) 456 78 90; 8(123)-456-78-90; 7-1-23-456 78-90 и далее везде… с множеством комбинаций скобок, пробелов, тире, плюсов, 8 и 7 а так же и полное отсутствие кода страны в любом формате. Чтобы привести всё это к однообразию не влезая в базу, а параллельно и сделать кликабельными ссылки телефона, skype, Email и URL пришлось чуть допилить файл \templates\default\controllers\places\contacts.tpl.php
ПРЕДУПРЕЖДЕНИЕ!: код делался чайником с использованием топора zst
  1.  
  2. <?php if ($contacts){ ?>
  3. <?php if (!empty($contacts['phone'])) { // редактируем ошибки записи телефона?>
  4. <?php $newphone = $contacts['phone']; ?>
  5. <?php $newphone = str_replace(array(")","("," ","-","-","+"),'',$newphone); // Убираем скобки, пробелы, тире, плюсы ?>
  6. <?php $firster = $newphone[0]; ?>
  7. <?php if($firster == '8' or '7' ) { // Если в оставшейся строке первый символ 8 или 7 - убираем его ?>
  8. <?php $newphone = substr($newphone,1) ?>
  9. <?php } ?>
  10. <?php } ?>
  11. <ul class="maps-contacts-list">
  12. <?php if (!empty($contacts['phone'])) { // Кликабельный телефон ?>
  13. <li class="phone"><a href="tel:+7<?php echo $newphone; ?>"><?php echo $newphone; ?></a></li>
  14. <?php } ?>
  15. <?php if (!empty($contacts['skype'])) { // Кликабельный скайп ?>
  16. <li class="skype"><a href="skype:<?php html($contacts['skype']); ?>?chat"><?php html($contacts['skype']); ?></a></li>
  17. <?php } ?>
  18. <?php if (!empty($contacts['url'])) { // Кликабельный url ?>
  19. <?php $href = $contacts['url']; ?>
  20. <?php $href = strstr($href, 'http://') ? $href : 'http://' . $href; ?>
  21. <li class="url"><a href="<?php echo $href; ?>" target="_blank"><?php html($contacts['url']); ?></a></li>
  22. <?php } ?>
  23. <?php if (!empty($contacts['email'])) { // Кликабельный email ?>
  24. <?php $href = 'mailto:'.$contacts['email']; ?>
  25. <li class="email"><a href="<?php echo $href; ?>" target="_blank"><?php html($contacts['email']); ?></a></li>
  26. <?php } ?>
  27. </ul>
  28. <?php } ?>
  29.  
  30.  
На всякий случай приложу исправленный файл

ДЕМО
+1
eoleg eoleg 9 лет назад #
+
конечно это необходимо но по демо я так понял - вы удаляете первую цифру а это неправильно.
Вообще формат тел. номера следующий:
код страны + код города + номер телефона
При этом код страны для РОССИИ 7 если звонок совершается из за рубежа.
Внутри РОССИИ вместо кода страны набирается 8
Поэтому и 7 и 8 правильно но лучше приводить к международному формату Е.164
Вы удалили код страны
0
Олег с клещами Олег с клещами 9 лет назад #
Первая цифра удаляется только в анкоре номера, а в ссылке формируется по стандарту "+7...." А в анкоре можно написать что угодно, вставить туда +7 или 8 никаких проблем.
0
Олег с клещами Олег с клещами 9 лет назад #
Сначала переменная newphone форматируется до "код города+телефон" с принудительным устранением скобок и прочего, т.е строго 10 цифр. А потом конструкцией:
Код PHP:
  1. <a href="tel:+7<?php echo $newphone; ?>">
формируется правильная ссылка с кодом страны, которая работает и в России и за рубежом.
0
Def Def 9 лет назад #
а для 1.10.4 можно такое?)
0
stealthdebuger stealthdebuger 9 лет назад #
Воспользуйтесь этим
Код PHP:
  1. function num_phone($s)
  2. {
  3. if(is_array($s))
  4. return false;
  5. $t = preg_match('/^([\+?7|8]{0,2}[0-9\ \-\(\)\|]{10,})$/', trim($s), $r);
  6. if($t)
  7. $s = preg_replace(array('/\ /','/\+/','/\-/','/\|/','/\)/','/\(/','/ /'), array('','','','','','',''), $r[1]);
  8. else
  9. return false;
  10. $l = strlen($s);
  11. if($l == 10 || $l == 11)
  12. return $s;
  13. else
  14. return false;
  15. }
0
Def Def 9 лет назад #
а это куда прописать?)
+1
Колян Колян 9 лет назад #
А если человеку нужно указать, в номере телефона код Германии, а так получается или 7 или 8... + оставить и увеличить кол-во цифр smile
+1
Владимир Владимир 9 лет назад #
в украине междугародка вообще через 0
+1
Колян Колян 9 лет назад #
То-то и оно не знакомы с правилами набора номеров телефонов... Вот забил номер абонента в мобилу через 8... и усё мобила не вкурсе кто тебе звонит т.к. определитель определяет номер входящего звонка как +7... если номер рфовский.

Еще от автора

Добавление материалов гостями без регистраци
Много предлагалось способов как разрешить гостям добавлять материалы. Перепробовал все, на сегодня ни один не работает. Пришлось изобрести велосипед.
Фиктивный счетчик клиентов
Иногда требуется вывести на сайте фиктивный счетчик клиентов. Я люблю максимально простые решения.
Вставка из Word в CKEditor 1.хх
Не раз уже на форуме обсуждали проблемку в CKEditor когда нельзя вставить текст из Word (нет кнопки). Решения я не увидел, поэтому полез сам
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.