[TYPO3-english] TelephoneNumber ViewHelper

Robert Wildling rowild at gmx.net
Mon Jul 1 20:56:55 CEST 2013


Anybody, please? Some directions?


> It seems as if I found a working way:
>
> // Class
> class Tx_Cbgooglemaps_ViewHelpers_Link_TelephoneNumberViewHelper extends
> Tx_Fluid_Core_ViewHelper_AbstractTagBasedViewHelper
> {
>
>      protected $tagName = 'a';
>
>      /**
>       * @param string $number The phone number to parse
>       * @param string $type   The link type ("tel", "skype", "callme",...)
>       *
>       * @return string Rendered phone link
>       */
>      public function render($number, $type = 'tel') {
>          $explodeStr = ",";
>          $content    = "";
>
>          if (strpos($number, $explodeStr)) {
>              $i           = 0;
>              $numberArray = explode($explodeStr, $number);
>
>              foreach ($numberArray as $num) {
>                  $i++;
>                  $content .= "<a href='" . $type . ":" .
> self::clearPhoneNumber(trim($num)) . "'>" . trim($num) . "</a>";
>                  if ($i < count($numberArray)) {
>                      $content .= ", ";
>                  }
>              }
>          } else {
>              $content .= "<a href='" . $type . ":" .
> self::clearPhoneNumber(trim($number)) . "'>" . trim($number) . "</a>";
>          }
>
>          return $content;
>      }
>
>
>      /**
>       * This method strips unwanted characters from the given telephone
> number,
>       * such as white spaces or brackets
>       *
>       * @param string $number The number to be parsed
>       *
>       * @return string parsed
>       * @static
>       * @author Daniel Regelein <daniel.regelein at diehl-informatik.de>
>       */
>      private static function clearPhoneNumber($number) {
>          $search = array('(', ')', '-', ' ', '/', '\\', '|', '{', '}',
> '[', ']');
>
>          return str_replace($search, '', $number);
>      }
> }
>
> // Template
> {namespace l=Tx_Cbgooglemaps_ViewHelpers}
> Telefon: <l:Link.TelephoneNumber number="{phone}" />
>
>
> I just have my doubts, whether this is a good solution. Doesn't feel
> very "Fluid".
>
> I'd apprciate any comments on how to improve this ViewHelper!
> Thanks! Robert
>
>
>> Hi,
>>
>> I am trying to get into writing my own ViewHelpers. The first "bigger"
>> test is a TelephonNumber ViewHelper that transforms phone numbers to
>> links with the href:"tel:*" attr (knowing that modern devices do this
>> automatically, also knowing about the respective meta-tag... as said:
>> this is just for practicing).
>>
>> So far I got this, which works fine (thanks to the vhc collection; the
>> whole thing gets implemented into the cbgooglemaps ext):
>>
>> // Script
>> class Tx_Cbgooglemaps_ViewHelpers_Link_TelephoneNumberViewHelper extends
>> Tx_Fluid_Core_ViewHelper_AbstractTagBasedViewHelper  {
>>    protected $tagName = 'a';
>>    /**
>>     * @param string $number The phone number to parse
>>     * @param string $type The link type ("tel", "skype", "callme",...)
>>     * @return string Rendered phone link
>>     */
>>    public function render( $number, $type='tel' ) {
>>      $linkText = $number;
>>      $tagContent = $this->renderChildren();
>>      if ($tagContent !== NULL) { $linkText = $tagContent; }
>>      $this->tag->setContent($linkText);
>>      $this->tag->addAttribute('href', $type.':' .  $number);
>>      return $this->tag->render();
>>    }
>> }
>>
>> // Template
>> {namespace l=Tx_Cbgooglemaps_ViewHelpers}
>> Telefon: <l:Link.TelephoneNumber
>> number="{phone}">{phone}</l:Link.TelephoneNumber>
>>
>>
>> So far, so good. The problem starts, when there are is a list of comma
>> seperated phone numbers to deal with. I started out with this:
>>
>> public function render( $number, $type='tel' ) {
>>    $explodeStr = ",";
>>    // if $number is an array...
>>    if( strpos( $number, explodeStr) ){
>>      $numberArray = trim( explode( explodeStr, $number ));
>>        foreach ( $numberArray as $num ) {
>>          // how to deal with the $this->tag->foo, when
>>          // there is only one tag?
>>          // how shall the return value be put together?
>>        }
>>    } else {
>>      // code as before
>>    }
>> [...]
>>
>>
>> As the comments already say, I do not know how to deal with the
>> render->children() and the like commands. Also, the final render-command
>> has to be placed outside the foreach loop, right? So what would be the
>> proper way to build it?
>>
>>
>> Thanks for your hints!
>> Greetings, Robert
>



More information about the TYPO3-english mailing list