Конфигурация и конфигурация модуля в zend framework
У меня есть некоторые коды из других статей для настройки модуля и макета в zend framework. Я пробовал в своем местном. я не получил разный макет для модуля по умолчанию и администратора. Вот мой код для настройки модуля и макета для рамки zend.
configs/application.ini
[production]
# Debug output
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
# Include path
includePaths.library = APPLICATION_PATH "/../library"
# Bootstrap
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
admin.bootstrap.path = APPLICATION_PATH "/modules/admin/Bootstrap.php"
admin.bootstrap.class = "admin_Bootstrap"
# Front Controller
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.env = APPLICATION_ENV
# Session
resources.session.name = "ZendSession"
resources.session.save_path = APPLICATION_PATH "/../data/session"
resources.session.remember_me_seconds = 86400
# Layout
resources.layout.layout = "layout"
resources.layout.layoutPath = APPLICATION_PATH "/layouts"
admin.resources.layout.layout = "admin"
admin.resources.layout.layoutPath = APPLICATION_PATH "/modules/admin/layouts"
# Views
resources.view.encoding = "UTF-8"
resources.view.basePath = APPLICATION_PATH "/views/"
resources.view[] =
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.modules[] =
resources.view[] =
admin.resources.view[] =
[staging : production]
[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
приложения /Bootstrap.php
<?php
/**
* Ensure all communications are managed by sessions.
*/
require_once ('Zend/Session.php');
Zend_Session::start();
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {
protected function _initDoctype() {
$this->bootstrap( 'view' );
$view = $this->getResource( 'view' );
$view->navigation = array();
$view->subnavigation = array();
$view->headTitle( 'Module One' );
$view->headLink()->appendStylesheet('/css/clear.css');
$view->headLink()->appendStylesheet('/css/main.css');
$view->headScript()->appendFile('/js/jquery.js');
$view->doctype( 'XHTML1_STRICT' );
//$view->navigation = $this->buildMenu();
}
/*protected function _initAppAutoLoad()
{
$autoloader = new Zend_Application_Module_Autoloader(array(
'namespace' => 'default',
'basePath' => APPLICATION_PATH
));
return $autoloader;
}*/
protected function _initLayoutHelper()
{
$this->bootstrap('frontController');
$layout = Zend_Controller_Action_HelperBroker::addHelper(
new ModuleLayoutLoader());
}
public function _initControllers()
{
$front = Zend_Controller_Front::getInstance();
$front->addModuleDirectory(APPLICATION_PATH . '/modules/admin/', 'admin');
}
protected function _initAutoLoadModuleAdmin() {
$autoloader = new Zend_Application_module_Autoloader(array(
'namespace' => 'Admin',
'basePath' => APPLICATION_PATH . '/modules/admin'
));
return $autoloader;
}
protected function _initModuleutoload() {
$autoloader = new Zend_Application_Module_Autoloader ( array ('namespace' => '', 'basePath' => APPLICATION_PATH ) );
return $autoloader;
}
}
class ModuleLayoutLoader extends Zend_Controller_Action_Helper_Abstract
// looks up layout by module in application.ini
{
public function preDispatch()
{
$bootstrap = $this->getActionController()
->getInvokeArg('bootstrap');
$config = $bootstrap->getOptions();
echo $module = $this->getRequest()->getModuleName();
/*echo "Configs : <pre>";
print_r($config[$module]);*/
if (isset($config[$module]['resources']['layout']['layout'])) {
$layoutScript = $config[$module]['resources']['layout']['layout'];
$this->getActionController()
->getHelper('layout')
->setLayout($layoutScript);
}
}
}
приложения/модули/администратор/Bootstrap.php
<?php
class Admin_Bootstrap extends Zend_Application_Module_Bootstrap
{
/*protected function _initAppAutoload()
{
$autoloader = new Zend_Application_Module_Autoloader(array(
'namespace' => 'admin',
'basePath' => APPLICATION_PATH . '/modules/admin/'
));
return $autoloader;
}*/
protected function _initDoctype() {
$this->bootstrap( 'view' );
$view = $this->getResource( 'view' );
$view->navigation = array();
$view->subnavigation = array();
$view->headTitle( 'Module One' );
$view->headLink()->appendStylesheet('/css/clear.css');
$view->headLink()->appendStylesheet('/css/main.css');
$view->headScript()->appendFile('/js/jquery.js');
$view->doctype( 'XHTML1_STRICT' );
//$view->navigation = $this->buildMenu();
}
}
Пройдите через него и дайте мне знать, кто знает, как правильно настроить модуль и макет.
Спасибо и приветствую,
Prasanth P
Ответы
Ответ 1
Я использую подход плагина с этим кодом, который я написал:
в основном бутстрапе:
protected function _initPlugins()
{
// Access plugin
$front = Zend_Controller_Front::getInstance();
$front->registerPlugin(new MyApp_Plugin_Module());
}
В каталоге плагинов:
class MyApp_Plugin_Module extends Zend_Controller_Plugin_Abstract
{
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
$module = $request->getModuleName();
$layout = Zend_Layout::getMvcInstance();
// check module and automatically set layout
$layoutsDir = $layout->getLayoutPath();
// check if module layout exists else use default
if(file_exists($layoutsDir . DIRECTORY_SEPARATOR . $module . ".phtml")) {
$layout->setLayout($module);
} else {
$layout->setLayout("default");
}
}
Надеюсь, что это поможет.
Ответ 2
Из вашего кода:
# Layout
resources.layout.layout = "layout"
resources.layout.layoutPath = APPLICATION_PATH "/layouts"
admin.resources.layout.layout = "admin"
admin.resources.layout.layoutPath = APPLICATION_PATH "/modules/admin/layouts"
вы используете your_app/modules/admin/layouts/admin.phtml в качестве макета модуля администратора, и я предполагаю, что он заменил your_app/layouts/layout.phtml. Проверьте способ переключения между модулями и попробуйте что-то site.ressources.layout вместо resources.layout.layout. Я новичок в zend. проверьте, как настроить загрузку в http://www.survivethedeepend.com/
здесь была подчеркнута одна и та же проблема и решение: http://blog.astrumfutura.com/archives/415-Self-Contained-Reusable-Zend-Framework-Modules-With-Standardised-Configurators.html
Ответ 3
В моем приложении я настроил этот путь. Он отлично работал.
protected function _initLayout(){
$layout = explode('/', $_SERVER['REQUEST_URI']);
if(in_array('admin', $layout)){
$layout_dir = 'admin';
}else if(in_array('default', $layout)){
$layout_dir = 'default';
}else{
$layout_dir = 'default';
}
$options = array(
'layout' => 'layout',
'layoutPath' => APPLICATION_PATH."/modules/".$layout_dir."/views/layouts"
);
Zend_Layout::startMvc($options);
}
Ответ 4
Для этого вам нужно использовать плагин контроллера, потому что макет задан на основе записи запроса, а в бутстрапе приложение не отправлено, поэтому вам нужно использовать плагин контроллера для работы с preDispatch для переключения макетов.
Ответ 5
Я думаю, что самый простой способ - проверить URI_String. См. Ниже:
У меня есть модуль с именем "admin".
В папке макета у меня есть 2 каталога. "сайт" и "админ"
\ application\layout\site\layout.phtml и \application\layout\admin\layout.phtml
Добавьте этот блок кода в Bootstrap.php
Он просто меняет путь каталога макета.
protected function _initLayout(){
$layout = explode('/', $_SERVER['REQUEST_URI']);
if(in_array('admin', $layout)){
$layout_dir = 'admin';
}else{
$layout_dir = 'site';
}
$options = array(
'layout' => 'layout',
'layoutPath' => APPLICATION_PATH . "/layouts/scripts/".$layout_dir,
);
Zend_Layout::startMvc($options);
}
Ответ 6
Ваши вопросы ответили на мой вопрос, так что я пытался выяснить, почему он не работает в моих модулях bootstrap, и в его конфигурационном файле вам нужно добавить строку
administrador.resources.view [] =
Valew partner!
Ответ 7
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
public function _initAutoload() {
$autoloader = Zend_Loader_Autoloader::getInstance();
$moduleLoader = new Zend_Application_Module_Autoloader(
array(
'namespace' => '',
'basePath' => APPLICATION_PATH . '/modules'
)
);
return $moduleLoader;
}
protected function _initViewhelpers()
{
$this->bootstrap('layout');
$layout = $this->getResource('layout');
$view = $layout->getView();
$view->doctype('XHTML1_STRICT');
$view->headMeta()->appendHttpEquiv('Content-Type', 'text/html;charset=utf-8');
}
protected function _initNavigation()
{
$this->bootstrap('layout');
$layout = $this->getResource('layout');
$view = $layout->getView();
$config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml','nav');
$navigation = new Zend_Navigation($config);
$view->navigation($navigation);
}
}
Ответ 8
Макет и модуль не включены в новом проекте zend (в версии ZF 1). Он должен быть включен, и вам нужно заставить его работать.
Работа с макетами для общего верхнего и нижнего колонтитула для рабочего проекта zend, с другой стороны, модуль может использоваться для различного вида доступа, т.е. модуля для пользователя, модуля для администратора, модуля для посетителей и т.д.
Для быстрой справки вы можете найти полное объяснение с полным проектом, чтобы получить основную идею отсюда, на моем сайте., http://www.getallthing.com/how-to-use-layout-and-module-in-zend-framework/
Удачи и приветствия!
Ответ 9
$options = array(
'layout' => 'layout',
'layoutPath' => APPLICATION_PATH."/modules/".$layout_dir."/views/layouts"
);
Zend_Layout::startMvc($options);
Пробовал несколько других решений от SOF, и этот работал отлично. Просто нужно указать layoutPath в папку фактических макетов