6.9视图助手(Helper)
视图脚本里经常有一些繁杂的事情,比如格式化日期、产生表单元素等等。这些可以用助手帮我们来完成。
助手类其实是一些以Zend_View_Helper_开头的类,类名的最后一段是助手的名字,助手的名字必须是首字母大写的,该类必须至少有一个以助手名字命名的方法。助手名通常是驼峰式命名,即它不会是大写字母开头的。类名是混合大小写字格式。方法名也是驼峰式命名。
默认的助手的路径通常指向Zend/View/Helper。即使用setHelperPath()方法重新指定了路径,该路径也会保持以使默认的助手能够工作。
6.9.1ZF自带的助手
示例代码:
<?php echo $this->form('frm1', array('action'=>'action.php', 'method'=>'post'), false) ."\n"; echo $this->formHidden('id', 'submited'); $content = 'Your Name:' . $this->formText('name', '', array('size' => 20)) .'<br>'; $content .= 'Password:' . $this->formPassword('pass', '', array('size' => 20)); echo $this->fieldset('flst', $content, array('legend'=>'Name:', 'style'=>'width:200pt')) .'<br>'; echo $this->formLabel('email', 'Your Email:'); echo $this->formText('email', [email=]'you@example.com'[/email], array('size' => 32)) .'<br>'; echo 'Your Country:'; echo $this->formSelect('country', 'us', null, $this->countries) .'<br>'; echo 'Would you like to opt in?'; echo $this->formCheckbox('opt_in', 'yes', null, array('yes', 'no')) .'<br>'; echo 'Choose them:'; echo $this->formMultiCheckbox('chkbox', 'A', null, array('A'=>'valA','B'=>'valB','C'=>'valC','D'=>'valD'), '<br>') .'<br>'; echo 'Choose one:'; echo $this->formRadio('radio', 'A', null, array('A'=>'valA','B'=>'valB','C'=>'valC','D'=>'valD'), '') .'<br>'; echo $this->htmlList($this->countries) .'<br>'; echo $this->url(array('k1'=>'v1','k2'=>'v2','k3'=>'v3')) .'<br>'; echo $this->formTextarea('ta', '', array('rows'=>'5','cols'=>'25')) .'<br>'; echo $this->formFile('file', '', array()) .'<br>'; echo $this->formButton('btn', 'BUTTON', array('onClick'=>'')); echo $this->formSubmit('OK', 'OK'); echo $this->formReset('reset', 'Reset'); ?>
<div id="sidebar right">
<div class="item">
<?= $this->action('assign1', 'Book'); ?>
</div>
</div><?php if ($this->books): ?> <table border=1> <tr> <th>作者</th> <th>书名</th> </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> </tr> <?php endforeach; ?> </table> <?php else: ?> <p>There are no books to display.</p> <?php endif; ?>
<?= $this->partial('booklist.php', array( 'books' => array( array('author'=>'zhangqing','title'=>'《book for php》'), array('author'=>'zhangking','title'=>'《book for JSP》'), array('author'=>'zhanghing','title'=>'《book for ASP.NET》'), ))); ?> <?php echo str_repeat('-', 60). '<br>'; ?> <?php $model = array( array('key' => 'Mammal', 'value' => 'Camel'), array('key' => 'Bird', 'value' => 'Penguin'), array('key' => 'Reptile', 'value' => 'Asp'), array('key' => 'Fish', 'value' => 'Flounder'), ); ?> <dl> <?= $this->partialLoop('partialLoop.phtml', $model) ?> </dl>
<?php $model = array( array('key' => 'Mammal', 'value' => 'Camel'), array('key' => 'Bird', 'value' => 'Penguin'), array('key' => 'Reptile', 'value' => 'Asp'), array('key' => 'Fish', 'value' => 'Flounder'), ); ?> <dl> <?= $this->partialLoop('partialLoop.phtml', $model) ?> </dl>
<dt><?= $this->key ?></dt> <dd><?= $this->value ?></dd>
<?= $this->doctype('XHTML1_STRICT') ?> <?php // setting meta keywords $this->headMeta()->appendName('keywords', 'framework php productivity'); $this->headMeta()->appendHttpEquiv('expires', 'Wed, 26 Feb 1997 08:21:57 GMT') ->appendHttpEquiv('pragma', 'no-cache') ->appendHttpEquiv('Cache-Control', 'no-cache'); $this->headMeta()->appendHttpEquiv('Content-Type', 'text/html; charset=UTF-8') ->appendHttpEquiv('Content-Language', 'en-US'); $this->headMeta()->appendHttpEquiv('Refresh', '3;URL=http://www.some.org/some.html'); echo $this->headMeta(); $this->headScript()->appendFile('/js/prototype.js') ->appendScript('xx.js'); // Putting scripts in order // place at a particular offset to ensure loaded last $this->headScript()->offsetSetScript(100, '/js/myfuncs.js'); // use scriptaculous effects (append uses next index, 101) $this->headScript()->appendScript('/js/scriptaculous.js'); // but always have base prototype script load first: $this->headScript()->prependScript('/js/prototype.js'); echo $this->headScript(); // setting links in a view script: $this->headLink()->appendStylesheet('/styles/basic.css') ->headLink(array('rel' => 'favicon', 'href' => '/img/favicon.ico'), 'PREPEND') ->prependStylesheet('/styles/moz.css', 'screen', true); // rendering the links: echo $this->headLink(); ?> <?php $this->placeholder('foo')->setPrefix("<ul>\n<li>") ->setSeparator("</li><li>\n") ->setIndent(4) ->setPostfix("</li></ul>\n"); $this->placeholder('foo')->set("Some text for later-1"); $this->placeholder('foo')->bar = "Some text for later-2"; echo $this->placeholder('foo'); $foo = $this->placeholder('foo'); echo $foo[0] .'<br>'; echo $foo['bar'] .'<br>'; ?> <!-- Default capture: append --> <?php $this->placeholder('hoo')->captureStart(); foreach ($this->data as $datum) { ?> <div class="hoo"> <h2><?= $datum['title'] ?></h2> <p><?= $datum['content'] ?></p> </div> <?php } $this->placeholder('hoo')->captureEnd(); ?> <?php echo $this->placeholder('hoo') ?> <!-- Capture to key --> <?php $this->placeholder('woo')->captureStart('SET', 'data'); foreach ($this->data as $datum): ?> <div class="woo"> <h2><?= $datum['title'] ?></h2> <p><?= $datum['content'] ?></p> </div> <?php endforeach; $this->placeholder('woo')->captureEnd(); ?> <?php echo $this->placeholder('woo')->data; ?>
<?php //Custom Helper "myFieldset" echo $this->myFieldset('This my custom Helper.').'<br>'; echo $this->myFieldset('This my custom Helper.').'<br>'; echo $this->myFieldset('This my custom Helper.').'<br>'; ?>
function customhelperAction() { $view = new Zend_View(); $view->setScriptPath('views'); $view->setHelperPath('views/helpers', 'My_View_Helper'); echo $view->render('my_custom_helper.php'); }
评论
GOod
星期一, 09/22/2008 - 15:38 — 匿名用户学习中...