Добавление дополнительных функций во вспомогательные классы в Zend

Вот мой вспомогательный класс

class Zend_View_Helper_CommonArea extends Zend_View_Helper_Abstract {

    public function commonArea()
    {
        ?>

        <div class="clear"></div>
        <div id="quick_search">
            <div class="search">
                        <strong>QUICK SEARCH </strong>

                    <input type="text" name="keyword" id="keyword" value="Enter keywords" class="form" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" />
                <select name="select" id="select" class="selectstyled">
                    <option>Prefered Location</option>
                    <option>Prefered Location</option>
                    <option>Prefered Location</option>
                    <option>Prefered Location</option>
                    <option>Prefered Location</option>
                </select>
            </div>
            <div class="bt_box">
                <input name="find" type="submit" class="find" id="search"  value="Find Jobs" />
            </div>
            <div class="resume"><a href="jobseeker.html"><img src="images/resume.jpg" alt="" /></a></div>
        </div>


        <?php
    }
}

и Мой вопрос: мне нужно было добавить новую функцию в этот класс. Я попытался добавить новую функцию, например

public function addBox()
    {
        ?>
        <div id="add_right_box"style="height:500px;"><h3 class="add_h2">Width 210px</h3></div>
        <?php
    }

к вышеуказанному классу, но я получаю сообщение об ошибке, например, плагин с именем «AddBox» не найден в реестре;

Здесь мне нужно знать Могу ли я добавить больше функций в вспомогательный класс, если да, то как это возможно.


person josdev    schedule 23.11.2011    source источник


Ответы (1)


Во-первых, вы должны вернуть весь вывод, а не эхо напрямую.

Из документов Zend_View_Helper:

Как правило, класс не должен выводить, печатать или иным образом генерировать выходные данные. Вместо этого он должен возвращать значения для печати или отображения. Возвращаемые значения должны быть соответствующим образом экранированы.

Когда вы вызываете $this->commonArea() из представления, он загружает класс CommonArea, а затем вызывает соответствующий метод. Таким образом, вызов $this->addBox() будет искать класс «AddBox» — он не будет знать, что вы ожидаете, что он будет частью плагина «CommonArea».

Если вы хотите вызвать несколько методов из одного и того же плагина, сделайте так, чтобы соответствующий метод возвращал экземпляр плагина:

public function commonArea(){
  return $this;
}

Затем вызовите методы следующим образом:

$this->commonArea()->addBox();
$this->commonArea()->display(); //assuming you renamed the original method to 'display'

Вы можете посмотреть на помощник навигации или заполнитель helper, чтобы увидеть этот шаблон.

person Tim Lytle    schedule 23.11.2011