Задать вопрос
Isolution666
@Isolution666
Full-Stack Developer

Как отобразить номер телефона через Html helper?

Здравствуйте.
--
Ситуация такова, что я искал способ сделать телефон на сайте кликабельным. То есть, не просто ссылка, а вызов функции tel:
Очень полезно для мобильности, когда клацаешь на телефоне по такому номеру пальцем, происходит набор номера телефона. То есть не надо копировать, вставлять, перепечатывать с браузера, а просто нажал и позвонил. Так вот, в Yii2 есть решение с электронной почтой:
<?= Html::mailto('admin@example.com') ?>
получаем:
<a href="mailto:admin@example.com">admin@example.com</a>


Искал решение в интернете, но попадалось лишь решение с <?=Html::a();?>
А мне надо так ввёл:
<?=Html::phone('+7 (999) 00-00-000', ['class' => 'phone']);?>

И вывелось:
<a class="phone" href="tel:+7 (999) 00-00-000">+7 (999) 00-00-000</a>


Я короче психанул, и полез в коробку, нашёл класс наследования BaseHtml.php
И написал вот такой код:
...
    public static function phone($phone, $options = [])
    {
        $options['href'] = 'tel:'.$phone;
        if (!isset($options['class'])) {
            $options['class'] = '';
        }
        return static::tag('a', $phone, $options);
    }
...

Работает! НО, я подумал о такой проблеме. Что если проект обновят через composer?
Вся наработка смоется, как рисунок на песке морской волной, и не будет ничего работать, да и программисты не опытные будут материться и искать, "где же эта загадочная функция?".

Отсюда вопрос, может я изобрёл велосипед, и такая функция есть, а я не заметил? Помогите решить этот вопрос, такой код гораздо удобнее, чем писать телефон по два раза. Очень нужная и полезная вещь! Может разработчики внедрят такое?
  • Вопрос задан
  • 671 просмотр
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
Самый простой вариант - создать свой класс, наследованный от Html и использовать его во всем проекте:
<?php
namespace app\helpers;
class Html extends \yii\helpers\Html
{
    public static function phone($phone, $options = [])
    {
        $options['href'] = 'tel:'.$phone;
        if (!isset($options['class'])) {
            $options['class'] = '';
        }
        return static::tag('a', $phone, $options);
    }
}


А дальше несколько вариантов:
  • Добавить еще несколько удобных методов и оформить все это в виде пакета composer, пример.
  • Сделать pull-request в yii2 или тому же Картику.
Ответ написан
@4Club
как и писали выше, самый простой вариант и удобный будет:
в папке (Для yii advanced) common\helpers создаешь файл "Html.php" с содержимым:

<?php
namespace common\helpers;

use yii\helpers\BaseHtml;

/**
 * use:
 * <?= \common\helpers\Html::phone('+7 (999) 00-00-000', ['class' => 'phone']); ?>
 *
 * result:
 * <a class="phone" href="tel:+7 (999) 00-00-000">+7 (999) 00-00-000</a>
 *
 * Class Html
 * @package common\helpers
 */
class Html extends BaseHtml
{
    /**
     * @param $phone
     * @param array $options
     * @return string
     */
    public static function phone($phone, $options = [])
    {
        $options['href'] = 'tel:'.$phone;
        if (!isset($options['class'])) {
            $options['class'] = '';
        }
        return static::tag('a', $phone, $options);
    }
}


и в проекте используешь хелпер так:

<?= \common\helpers\Html::phone('+7 (999) 00-00-000', ['class' => 'phone']); ?>

be00de69c9a3453d9ab890ca8334c4ca.png

и расширяй по мере нужды
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы