2014-09-25 18 views
5

Mam numery telefonów przechowywane w bazie danych za pomocą char (10), a oni wyglądają na przykład jako 4155551212.Formatowanie numeru telefonu za pomocą Twig

Życzę szablonowi Twig, aby wyświetlał je jako (415) 555-1212.

Jak najlepiej można to osiągnąć?

+0

Użyj 'substr()' ...? To jest łatwe. Użyj swojej wyobraźni! –

+1

Utwórz rozszerzenie gałązki - http://symfony.com/doc/master/cookbook/templating/twig_extension.html –

+0

@ SverriM.Olsen. Nie ma 'substr()', ale myślę, że 'plaster' zadziała. – user1032531

Odpowiedz

9

Byłoby miło nie dodawać tego filtra za każdym razem, ale spełni moje potrzeby.

<?php 
require_once '../../../vendor/autoload.php'; 
Twig_Autoloader::register(); 
try { 
    $loader = new Twig_Loader_Filesystem('templates'); 
    $twig = new Twig_Environment($loader, array('debug' => true,)); 
    $twig->addExtension(new Twig_Extension_Debug()); 
    $twig->addFilter(new Twig_SimpleFilter('phone', function ($num) { 
     return ($num)?'('.substr($num,0,3).') '.substr($num,3,3).'-'.substr($num,6,4):'&nbsp;'; 
    })); 
    echo $twig->render('filter.html', array('phone'=>'4155551212')); 
} catch (Exception $e) { 
    die ('ERROR: ' . $e->getMessage()); 
} 
?> 

filter.html

{{ phone|phone }} 
+0

dając ci zasłużone upominki dla tego jednego dobrego ojca! – r3wt

1
$numberPhone = '4155551212'; 
$firstChain = substr($numberPhone, 0, 3); 
$secondChain = substr($numberPhone, 3, 3); 
$thirdChain = substr($numberPhone, 6, 4); 
$formatedNumberPhone = '(' . $firstChain . ') ' . $secondChain . '-' . $thirdChain; 

echo $formatedNumberPhone; 

Oto rozwiązanie dla tych, którzy mają podobne pytanie na ten temat.

Trochę wyjaśnieniu, jak substr() działa:

potrwać trzy argumenty w tej sprawie:

  1. łańcuchu chcesz zmodyfikować
  2. Indeks które stanowią miejsce, gdzie funkcja rozpocznie się jego proces
  3. Ile caracters chcesz zachować

Zauważ, że możesz przekazać wartość ujemną do drugiego i trzeciego argumentu (przejdź do oficjalnego dokumentu w celu uzyskania dalszych informacji).

W tym przypadku biorę pierwszy znak z numeru telefonu, więc opowiem funkcję, aby rozpocząć od 0 i zachować 3 znaki, więc wygląda to tak: susbtr($numberPhone, 0, 3).

Mam nadzieję, że pomoże!

+0

Dzięki za odpowiedź. Wiem, jak to zrobić z PHP i zrobić to w taki sam sposób jak ty, ale nie z Twigiem. – user1032531

+0

Nigdy nie używałam Twig, chociaż mogłeś to zrobić w php, aby uniknąć skomplikowanej reaserch! –

+0

Tak, wiem, ale najważniejszym punktem Twig jest oddzielenie widoku od logiki. – user1032531

1

Numer telefonu w formacie US: {{phone_number | telefon | default ("-")}}

-2
Eu fiz assim: {{ p.number[:4] }} - {{ p.number[4:]}} 
I did that way: {{ p.number[:4] }} - {{ p.number[4:]}} 
Powiązane problemy