Re: [commits] [Wiki] changed: Doc/Dev/Horde_View

Jan Schneider <[email protected]>
Newsgroups gmane.comp.horde.devel
Message-ID <[email protected]>
To who changed this: the original version was explicitly for using  
Horde_View as an independent library. The changes you applied require  
a Horde installation though, which is different. It's nice to see  
those as an example too, but it should be added, not replacing the  
current documentation.

Zitat von Wiki Guest <[email protected]>:

> guest [178.26.86.13]  Wed, 21 Jan 2015 09:14:22 +0000
>
> Modified page: http://wiki.horde.org/Doc/Dev/Horde_View
> New Revision:  7
> Change log:  Updated to Horde 5, fixed code bugs, added some description
>
> @@ -2,17 +2,20 @@
>
>  + Horde_View
>
>  Documentation on the Horde_View package. This documentation is  
> adopted from the MAD documentation  
> (http://framework.maintainable.com/mvc/5_view.php), as many of the  
> Horde View ideas are also adopted from MAD, and the helpers are  
> directly compatible between the two systems.
> +
> +The following explanations correspond to Horde 5.
>
>  ++ Example usage
>
>  **Calling code**
>
>  <code type="php">
>  <?php
>
> -require 'Horde/Autoloader.php';
> +require_once __DIR__ . '/lib/Application.php';
> +Horde_Registry::appInit('yourapp');
>
>  // use a model to get the data for book authors and titles.
>  $data = array(
>                array(
> @@ -27,17 +30,22 @@
>                      'author' => 'Milton Friedman',
>          'title' => 'Free to Choose'
>                      )
>                );
> +
> +$view = new Horde_View (array('templatePath' => 'viewtest'));
>
>  $view = new Horde_View;
> +$view->addHelper('Horde_View_Helper_Tag');
>  $view->books = $data;
>
>  // and render a template called "template.php"
>  echo $view->render('template.php');
>  </code>
>
>  **View template**
> +
> +Put the following code into viewtest/template.php (the template  
> path is set above):
>
>  <code type="php">
>  <?php if ($this->books): ?>
>
> @@ -49,10 +57,10 @@
>      </tr>
>
>  <?php foreach ($this->books as $key => $val): ?>
>      <tr>
> -<td><?php echo $this->escape($val['author']) ?></td>
> -<td><?php echo $this->escape($val['title']) ?></td>
> +   		<td><?php echo $this->escape($val['author']) ?></td>
> +   		<td><?php echo $this->escape($val['title']) ?></td>
>      </tr>
>  <?php endforeach; ?>
>
>  </table>
> @@ -61,8 +69,9 @@
>      <p>There are no books to display.</p>
>  <?php endif; ?>
>
>  </code>
> +
>
>  ++ Base functionality
>
>  * assign indiv vars
> @@ -132,9 +141,8 @@
>  * single-escaping to not re-escape entities
>
>  +++ Text
>
> -* h() shorthand escape
>  * truncate
>  * truncate middle
>  * highlight
>  * cycle
> @@ -159,12 +167,18 @@
>  Views separate the presentation from the controllers and models.  
> Views are allowed to have logic, provided that the logic is only for  
> presentation purposes. This presentation logic is small bits of PHP  
> code embedded in the HTML.
>
>  Bits of presentation logic code can be extracted into helper  
> methods. Once extracted, a helper method can be called in the view  
> in place of the former code block. Extracting presentation logic  
> into helpers is a best practice and helps keep views clean and DRY.
>
> -Helpers are simply methods of a class. The framework mixes the  
> helpers into the view behind the scenes, and makes them appear as  
> methods inside the view. An example of a helper class with a single  
> {{highlight()}} helper follows:
> +Helpers are simply methods of a class. The framework mixes the  
> helpers into the view behind the scenes, and makes them appear as  
> methods inside the view. An example of a helper class with a single  
> {{highlight()}} helper follows. For more detailed information, refer  
> to  
> http://dev.horde.org/api/FRAMEWORK_4/lib/View/package-View.Helper.html
> +
> ++++ Example
> +
> +In the above example template, a function of Horde_View_Helper_Tag  
> is used. Functions can be overloaded and additional helpers can be  
> defined. For instance, you might whish to highlight a certain name  
> in your booklist. You could define a corresponding function and put  
> it into your own helper class in file yourapp/lib/Helper.php:
>
>  <code type="php">
> -class UsersHelper extends ApplicationHelper
> +
> +<?php
> +class Yourapp_Helper extends Horde_View_Helper_Base
>  {
>      /**
>       * Highlight a phrase within the given text
>       * @param   string  $text
> @@ -172,22 +186,29 @@
>       * @return  string
>       */
>      public function highlight($text, $phrase)
>      {
> -        $escaped = $this->h($text);
> -        $highlighter = '<strong class="highlight">$escaped</strong>';
> -
> +        $escaped = $this->escape($phrase);
> +        $highlighter = '<strong class="highlight">' . $phrase . '</strong>';
> +
>          if (empty($phrase) || empty($text)) {
>              return $text;
>          }
> -        return preg_replace("/($phrase)/", $highlighter, $text);
> +        return preg_replace("/($phrase)/", $highlighter, $text);
>      }
>  }
>  </code>
>
> -And in the HTML template:
> +
> +To use this helper, it helper must be added to the view you are  
> using (w/ref. to above view.php):
> +<code>
> +$view->addHelper('Yourapp_Helper');
> +</code>
> +
> +And in template.php:
>  <code>
> -<div><?= $this->highlight($this->var, 'bob') ?><div>
> +...
> +   		<td><?php echo $this->highlight($val['author'], 'Soto') ?></td>
>  ...
>  </code>
>
>  It is OK to put HTML into helper class methods because they exist  
> to assist with presentation. However, it is NOT OK to put print/echo  
> statements within a helper class. Helper methods always return a  
> value that is displayed in the view like {{<?=  
> $this->highlight($text) ?>}}.
>
> -- 
> commits mailing list
> Frequently Asked Questions: http://wiki.horde.org/FAQ
> To unsubscribe, mail: [email protected]



-- 
Jan Schneider
The Horde Project
http://www.horde.org/
https://www.facebook.com/hordeproject

-- 
dev mailing list
Frequently Asked Questions: http://wiki.horde.org/FAQ
To unsubscribe, mail: [email protected]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.