Zend Framework sa Bawat Module Setting Layout - Sundin Up

By Steven Lloyd Watkin , Martes Pebrero 16, 2010 20:48

Bilang isang follow up sa aking nakaraang post sa bawat module based setting ng layout para sa Zend Framework , ko na-update na ang code sa kailangan mas mababa configuration pagkatapos bago (hindi na ito kailangan pa na ng ilang linya sa iyong application configuration!).

Muli naming gumawa ng paggamit ng isang Zend Controller Action Helper invoking ito mula sa bootstrap bilang mga sumusunod:

     / **
      * Sets up scripts layout sa isang per-module na batayan
      * /
     protektado function _initLayoutHelper ()
	 {
	     $ Na ito-> bootstrap ('frontController');
	     $ Layout = Zend_Controller_Action_HelperBroker:: addHelper (
	         bagong Pro_Controller_Action_Helper_SetLayoutPath (APPLICATION_PATH));
	 }

Halos eksakto ang parehong bilang bago maliban sa oras na ito pumasa namin ang patuloy na APPLICATION_PATH sa constructor bilang aming base landas.

Susunod na ang mga helper controller action mismo ngayon hitsura tulad ng sumusunod:

 / **
  * Sets ang layout landas sa isang per-module na batayan
  *
  * @ Akda Lloyd Watkin
  * @ Since 16/02/2010
  * @ Package Pro
  * @ Subpackage Controller_Action_Helper
  * /

 / **
  * Sets ang layout landas sa isang per-module na batayan
  *
  * @ Akda Lloyd Watkin
  * @ Since 16/02/2010
  * @ Package Pro
  * @ Subpackage Controller_Action_Helper
  * /
 class Pro_Controller_Action_Helper_SetLayoutPath
     nagpalawak Zend_Controller_Action_Helper_Abstract
 {
	 / **
	  * Base landas
	  *
	  * @ Var string
	  * /
	 protektado $ _path;

	 / **
	  * Tayuan
	  *
	  * @ Param string $ landas
	  * /
	 pampublikong function __construct ($ path)
	 {
	     $ Na ito-> setBasePath ($ path);
	 }

	 / **
	  * Itakda base landas
	  *
	  * @ Param string $ landas
      * /
	 pampublikong function setBasePath ($ path)
	 {
		 kung (is_string ($ path) |! | walang laman ($ path)) {
			 ihagis bagong Exception ('Excepted string para sa base landas');
		 }
		 $ Na ito-> _path = $ path;
	 }

	 / **
	  * Kumuha ng base landas
	  *
	  * @ Bumalik string
	  * /
	 protektado function _getBasePath ()
	 {
		 kung (is_null ($ na ito-> _path)) {
			 kung (! tinukoy ('APPLICATION_PATH')) {
				 ihagis bagong Exception ('Base path ay hindi maaaring tinutukoy');
			 }
			 $ Na ito-> _path = APPLICATION_PATH;
		 }
		 bumalik $ ito-> _path;
	 }

     / **
      * Sets layout path batay sa module
      * /
     pampublikong function preDispatch ()
     {
    	 $ Module = preg_replace (
    	     '/ [^ AZ] / i','', $ ito-> getRequest () -> getModuleName ()
    	 );

	     kung ($ bootstrap = $ ito-> getActionController ()
	                        -> GetInvokeArg ('bootstrap')) {

	         $ View = $ bootstrap-> getResource ('view');
	         $ LayoutPath = $ ito-> _getBasePath ().
	             "/ Modules / $ {module} / layouts / scripts /";

	         / * Kung ang layout na direktoryo ng umiiral pagkatapos ilagay ito, kung hindi man lang mahulog
	          * Back sa default
	          * /
	         kung (is_dir ($ layoutPath)) {
	             $ Na ito-> getActionController ()
	                  -> GetHelper ('layout')
	                  -> SetLayoutPath ($ layoutPath);
	             $ View-> headLink () -> appendStylesheet (
	                 "/ Istilo / $ {module} / style.css"
	             );
	         }
    	 }
     }
 }

Tandaan ang pagdaan ng aming base path (cf. APPLICATION_PATH) sa mga tagapagbuo, kami din ay may isang geter at setter para sa landas base. Hindi tulad ng mga nakaraang bersyon ng code kung ang layout ng landas ay hindi na umiiral pagkatapos ay ang code ay mahulog sa likod ng mga default na landas layout. Kung ang batayang path ay hindi itinakda ay ito subukan upang matukoy ang base landas mula sa mga tapat na APPLICATION_PATH, sa kabilang banda ng isang exception ay thrown. din ko na cheekily hagis sa isang module-based style sheet para sa mabuting panukala

Ang module based layout ay tinukoy mula sa kung ang layout path script umiiral (malinaw naman ang paraan na ito ay maaaring palitan madali). Ito ay magdagdag ng isang maliit na overhead mula sa application.ini setup (subalit kung ang layout ng landas na umiiral na PHP ay cache ang mga resulta para sa pagganap *) ngunit sa bumalik kayo makakuha ng mga idinagdag na kaginhawahan ng mas madaling bumababa sa bagong modules.

Iyan na, hindi marami iba na, ngunit hindi mo na kailangan upang magdagdag ng isang bagong entry configuration sa bawat oras na nais mong idagdag ang isang bagong module:)

* Upang limasin ang cache na ito (kung kinakailangan) gamitin ang clearstatcache function.

2 sagot sa "Zend Framework sa Bawat Module Setting Layout - Sundin Up"

  1. Behrang says:

    Hi, mangyaring sabihin sa akin kung saan upang lumikha ng klase Pro_Controller_Action_Helper_SetLayoutPath na pangalan ng file
    ako newbie sa admin.
    salamat

  2. Hi Behrang, lumikha ng mga action helper sa alinman ang pangalan na gusto mo, mayroon ako ng aking sariling 'library' sa namespace 'Pro'. Ikaw ay maaaring lamang bilang madaling tumawag sa 'SetLayoutPath' sa klase at ilagay ito kung saan man gusto, na ibinigay ng code ay maaaring mahanap ito at palawigin mo ang mga kinakailangang mga klase

Mag-iwan ng isang Sumagot













Panorama Theme sa pamamagitan ng Themocracy

3 mga bisita sa online ngayon
2 mga bisita, 1 bots, 0 miyembro
Max mga bisita ngayon: 26 at 00:46 UTC
Sa buwan na ito: 26 at 2011/07/05 12:35 UTC
Sa taong ito: 130 sa 28-03-2011 22:40 UTC
Lahat ng oras: 130 sa 28-03-2011 10:40 UTC