I use non-standard file structure and use modules for my applications:
/application
/default
/controllers
/IndexController
/ErrorController
/views
/scripts
/index
/index.phtml
/error
/error.phtml
/configs
/config.ini
/library
/Zend
/views
/layouts
/default.phtml
/scripts
/form
/_text.phtml
To do it this way, you have to add the module directory in your config for Zend_Application:
[production]
phpsettings.display_startup_errors = 0
phpsettings.display_errors = 0
resources.layout.layout = "default"
resources.layout.layoutpath = "c:\xampp\files\views\layouts"
resources.frontcontroller.moduledirectory = "c:\xampp\files\application"
[development : production]
phpsettings.display_startup_errors = 1
phpsettings.display_errors = 1
View script paths are loaded in LIFO order. Assuming you have not added any other script paths, you can add your script paths in the action controller init() method this way:
<?php
class IndexController extends Zend_Controller_Action {
public function init() {
$appScriptPath = 'c:\xampp\files\views\scripts';
$modScriptPath = array_shift($this->view->getScriptPaths());
$this->view->setScriptPath(NULL);
$this->view->addScriptPath($appScriptPath);
$this->view->addScriptPath($modScriptPath);
}
public function indexAction() {
$form = new Zend_Form();
$form->addElement(new Zend_Form_Element_Text('text'));
$form->text->setLabel('Text');
$options = array('viewScript' => 'form/_text.phtml');
$decorators = array(array('ViewScript', $options));
$form->text->setDecorators($decorators);
$this->view->form = $form;
}
}
The system will look in the controller views scripts for your viewScript first, and then if it does not find it, it will look in /application/views/scripts.