Zend script path probleem

Status
Niet open voor verdere reacties.

michaelbeersnl

Gebruiker
Lid geworden
30 nov 2011
Berichten
57
Beste helpers,

Ik ben sinds kort begonnen met Zend.
Nu wil ik voor mijn applicatie het script path aanpassen zodat hij de views in de template files overruled met de module views.
Hiervoor gebruik ik de volgende code alleen lijkt dit niet te werken terwijl de paths wel gewoon goed zijn.

script:
PHP:
<?php
		//create a new view renderer if not exists
		$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
		if (null === $viewRenderer->view) 
		{
			$viewRenderer->initView();
		}
		$view = $viewRenderer->view;
		
		//generate the file paths
		$module_path = APP_DIR . DS . 'modules' . DS . $module . DS . 'views';
		$module_file = $module_path . DS . 'scripts' . DS . $controller . DS . $action . '.phtml';
		
		$template_path = ROOT_DIR . DS . 'templates' . DS . $template . DS . 'views' . DS . $module;
		$template_file = $template_path . DS . 'scripts' . DS . $controller . DS . $action . '.phtml';
		
		//set the script path to the right template
		if (file_exists( realpath($template_file) ))
		{
			$view->setScriptPath( realpath($template_path . DS . 'scripts') );
			
			//add the helper path
			if (file_exists($template_path . DS . 'helpers'))
			{
				$view->addHelperPath($template_path . DS . 'helpers', $module . '_View_Helper_');
			}
		} else if (file_exists( realpath($module_file) ))
		{
			$view->setScriptPath( realpath($module_path . DS . 'scripts') );
			
			//add the helper path
			if (file_exists($module_path . DS . 'helpers'))
			{
				$view->addHelperPath($template_path . DS . 'helpers', $module . '_View_Helper_');
			}
		}
		
		echo '<pre>';
		var_dump( realpath($template_file) );
		var_dump( realpath($module_file) );
		var_dump( realpath($template_path . DS . 'scripts' . DS) );
		var_dump( realpath($module_path . DS . 'scripts' . DS) );
		var_dump( file_exists( realpath($template_file) ) );
		var_dump( file_exists( realpath($module_file) ) );
		echo '</pre>';
?>

output:
Code:
string(77) "C:\xampp\htdocs\zf_cms\templates\default\views\core\scripts\index\index.phtml"
string(79) "C:\xampp\htdocs\zf_cms\application\modules\core\views\scripts\index\index.phtml"
string(59) "C:\xampp\htdocs\zf_cms\templates\default\views\core\scripts"
string(61) "C:\xampp\htdocs\zf_cms\application\modules\core\views\scripts"
bool(true)
bool(true)

Alvast bedankt,

Michael

Edit:
Wanneer ik het index.phtml bestand uit de module haal dan toont hij wel de index.phtml in de template
Maar het moet dus zo worden dat de index.phtml in de template ALTIJD leading is zelfs wanneer er een in de module staat
 
Laatst bewerkt:
Volgen mij moet je kijken of eerst de en index.phtml bij de module beschikbaar als dat zo is dan tonen indien niet dan de temPlate index.phtml tonen.

Als ik zo naar je code kijk doe je dat namelijk niet

Je kijkt nu of de template bestand en zo niet dan kijk je of modules bestand dit zou anders om moeten zijn
Of je moet bij de eerste if kijken de kijken dat de module geen template heeft.

Succes
 
Laatst bewerkt:
Dat klopt toch gewoon? of is dit in Zend anders ivm routing etc?

Wanneer ik tussen if (file_exists( realpath($template_file) )) { } iets echo laat hij dit wel gewoon zien

Stap 1. Bestaat de template phtml? (if)
Ja, toon dan de template phtml
Nee, naar stap 2 (else if)

Stap2. Bestaat de module phtml?
Ja, toon dan de module phtml
Nee, naar stap 3 (niks)

Stap3. De defaults tonen
 
Laatst bewerkt:
Oke maar je bij je vraag zeg je dat je de template wilt overrulen met de module template dus vandaar mijn antwoord

Nu wil ik voor mijn applicatie het script path aanpassen zodat hij de views in de template files overruled met de module views.

Daarnaast hoef je geen else if te gebruiken als er geen derde optie is. Dan kan je het namelijk ook af met else. Denk ik persoonlijk

probeer dit eens:

PHP:
  if (file_exists( realpath($module_file) ) AND !file_exists( realpath($template_file) ))
        {
        $view->setScriptPath( realpath($module_path . DS . 'scripts') );
            
            //add the helper path
            if (file_exists($module_path . DS . 'helpers'))
            {
                $view->addHelperPath($template_path . DS . 'helpers', $module . '_View_Helper_');
            }

        } else
        {
             $view->setScriptPath( realpath($template_path . DS . 'scripts') );
            
            //add the helper path
            if (file_exists($template_path . DS . 'helpers'))
            {
                $view->addHelperPath($template_path . DS . 'helpers', $module . '_View_Helper_');
            }
        }
 
Laatst bewerkt:
Nee nogsteeds niet, ik heb inmiddels alles geprobeerd inc. jouw code er gaat wat fout met de routing denk ik zo maar de documentatie van Zend vind ik vrij onduidelijk in vergelijking met bijv. Wordpress en er is weinig over te vinden helaas
 
Klopt helemaal heel weinig documentatie. Is zeker zonde als dit beter op orde was zouden meer mensen het gebruiken denk ik zo.

misschien dat dit helpt weet het niet zeker(misschien heb je het zelf al getest.)
Verander dit
PHP:
        $module_path = APP_DIR . DS . 'modules' . DS . $module . DS . 'views';
        $module_file = $module_path . DS . 'scripts' . DS . $controller . DS . $action . '.phtml';
        
        $template_path = ROOT_DIR . DS . 'templates' . DS . $template . DS . 'views' . DS . $module;
        $template_file = $template_path . DS . 'scripts' . DS . $controller . DS . $action . '.phtml';

in dit:

PHP:
        $template_path = ROOT_DIR . DS . 'templates' . DS . $template . DS . 'views' . DS . $module;
        $template_file = $template_path . DS . 'scripts' . DS . $controller . DS . $action . '.phtml';

    $module_path = APP_DIR . DS . 'modules' . DS . $module . DS . 'views';
        $module_file = $module_path . DS . 'scripts' . DS . $controller . DS . $action . '.phtml';

Het zou kunnen dat die de mist in gaat met het aanroepen. Je roept nu eerst template aan misschien dat dit je probleem verhelpt
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan