Cannot include undefined parent block ‚title‘

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
cirdaz
Člen | 21
+
0
-

Dobrý den,
pár dnů zkouším nette a nemůžu rozjet šablony.
Pořád mi to píše
Cannot include undefined parent block ‚title‘.
Nevím kde ho definovat.
Aplikoval jsem funkci v adminModul v basePresenteru tak abych mohl načítat více layoutů včetně šablon
třeba layout default, modry zeleny zluty atp…
ale nemůžu se překousat základy. Děkuji za rady.

<?php
/**
   * function formatLayoutTemplateFiles
   *
   * Zmeni cestu k sablonam layoutu: APP_DIR/Module/templates/theme/...
   * Pro jistotu se s nejnizsi prioritou bude hledat i v puvodnim adresari
   */
  public function formatLayoutTemplateFiles($presenter, $layout)
  {
    $appDir = Environment::getVariable('appDir');
    $theme = Environment::getVariable('theme');

    $path = '/' . str_replace(':', 'Module/', $presenter);

    $templatesTheme = '/templates/' . $theme;
    $pathP = substr_replace($path, $templatesTheme, strrpos($path, '/'), 0);

    $list = array(
        "$appDir$pathP/@$layout.latte",
        "$appDir$pathP.@$layout.latte",
        "$appDir$pathP/@$layout.phtml",
        "$appDir$pathP.@$layout.phtml",
    );
    #dump($list);exit;
    while (($path = substr($path, 0, strrpos($path, '/'))) !== FALSE) {
        $list[] = "$appDir$path$templatesTheme/@$layout.latte";
        $list[] = "$appDir$path$templatesTheme/@$layout.phtml";
    }

    $list = array_merge($list, parent::formatLayoutTemplateFiles($presenter, $layout));

    return $list;
  }
?>

Pak jsem pozměnil i funkci

<?php
/**
	 * Formats view template file names.
	 * @param  string
	 * @param  string
	 * @return array
	 */
	public function formatTemplateFiles($presenter, $view)
	{
		/*$appDir = Environment::getVariable('appDir');
		$path = '/' . str_replace(':', 'Module/', $presenter);
		$pathP = substr_replace($path, '/templates', strrpos($path, '/'), 0);
		$path = substr_replace($path, '/templates', strrpos($path, '/'));

		return array(
			"$appDir$pathP/$view.latte",
			"$appDir$pathP.$view.latte",
			"$appDir$pathP/$view.phtml",
			"$appDir$pathP.$view.phtml",
			"$appDir$path/@global.$view.phtml", // deprecated
		);*/

    $appDir = Environment::getVariable('appDir');
    $theme = Environment::getVariable('theme');

    $path = '/' . str_replace(':', 'Module/', $presenter);

    $templatesTheme = '/templates/' . $theme;
    $pathP = substr_replace($path, $templatesTheme, strrpos($path, '/'), 0);

    return array(
        "$appDir$pathP/@$view.latte",
        "$appDir$pathP.@$view.latte",
        "$appDir$pathP/@$view.phtml",
        "$appDir$pathP.@$view.phtml",
			  "$appDir$path/@global.$view.latte", // deprecated
			  "$appDir$path/@global.$view.phtml", // deprecated
    );
	}
?>
bojovyletoun
Člen | 667
+
0
-

Myslím že tenhle dotaz tu byl. Podle mě je nějaká chybička tam, kde se skládají ty stringy: "$appDir$pathP.@$layout.phtml", asi to bude mravenčí práce, najít co blbne.

neexistuje jednodušší možnost, jak definovat skinovatelnost?

  1. prosté $presenter->setLayout
  2. definovat $presenter->template->skin a s tou proměnnou pracovat v šabloně při includování (nebo extends) další pod(nad)šablon?