public function generate($url_name, $parameters = []) { $routes = Application::Router()->getRoutes(); $translator = Application::Translator(); if (!isset($routes[$url_name])) { return $url_name; } // Ha szükséges be kell rakni a nyelvet is a paraméterek közé if ($translator != null && $translator->getStrategy() != Translator::STRATEGY_ONLY_COOKIE && !$routes[$url_name]["locale"] == LanguageRouter::LOCALE_NOT_ALLOWED) { $parameters["locale"] = $translator->getLocale(); } $url = $routes[$url_name]["url"]; $resultUrl = ""; $index = 0; while (($firstPos = strpos($url, "{", $index)) != false) { $lastPos = strpos($url, "}", $firstPos); $name = explode(":", substr($url, $firstPos + 1, $lastPos - $firstPos - 1))[0]; $resultUrl .= substr($url, $index, $firstPos - $index) . (isset($parameters[$name]) ? $parameters[$name] : ""); $index = $lastPos + 1; } if ($index != strlen($url)) { $resultUrl .= substr($url, $index); } // Ha nincs semmi, akkor nem volt paraméter, másoljuk az egész url-t. if ($resultUrl === "") { $resultUrl = $url; } return $resultUrl; }
/** * Registers services on the given container. * * This method should only be used to configure services and parameters. * It should not get services. * * @param Container $pimple A container instance */ public function register(Container $pimple) { $pimple['url_generator'] = function ($c) { return new UrlGenerator(Application::Router()); }; //url_generate függvény hozzáadása a twighez $pimple->extend('twig', function ($twig, $c) { /** @var Twig $mytwig */ $mytwig = $twig; /** @var UrlGenerator $urlGenerator */ $urlGenerator = $c["url_generator"]; $url_generator = new \Twig_SimpleFunction("url_generate", function ($url_name, $parameters = []) use($urlGenerator) { return $urlGenerator->generate($url_name, $parameters); }); $mytwig->getTwigEnvironment()->addFunction($url_generator); return $mytwig; }); }
/** * A twig segítségével lerendereli a html tartalmat. AJAX kérések esetén csak a megadott template-t rendereli ki, * viszont ha nem AJAX kérést kapott a szerver, akkor a Twig inicializálásánál megadott oldalkeretbe tölti bele a * template-t. * * Ha mindenképpen azt szeretnénk, hogy csak a template fájl renderelődjön ki, akkor a $forceRawTemplate paramétert * true-ra kell állítani! * * A renderelésnél elérhető az összes olyan paraméter, amit az alkalmazás addPageFrameContent függvényén keresztül * lett beállítva. A Twig fájlokban ezek az 'app.*' változó néven keresztül érhetőek el. * Példa: * $twig->addContentProvider(new PageTitleContentProvider("Oldal címe")); * * <title>{{ app.page_title }}</title> ==> <title>Oldal címe</title> * * @param $templateName * @param array $parameters * @param bool $forceRawTemplate * @param null $desiredFrameTemplate * @throws HttpInternalErrorException */ public function render($templateName, $parameters = [], $forceRawTemplate = false, $desiredFrameTemplate = null) { // Különböző contentek betöltése foreach ($this->contentProviders as $contentProvider) { $parameters["app"][$contentProvider->getKey()] = $contentProvider->getValue(); } if ($this->useAjax || $forceRawTemplate) { print $this->twig->render($templateName, $parameters); } else { if (is_array($this->configuration["page_frame_template_path"])) { $templates = $this->configuration["page_frame_template_path"]; $actualRoute = Application::Router()->getActualRoute(); if ($desiredFrameTemplate != null) { $desiredFrame = $desiredFrameTemplate; } elseif (isset($actualRoute["page_frame"])) { $desiredFrame = Application::Router()->getActualRoute()["page_frame"]; } else { $desiredFrame = "default"; } if (array_key_exists($desiredFrame, $templates)) { $pageFrameName = $templates[$desiredFrame]; } else { throw new HttpInternalErrorException("Undefined page_frame template path in twig. Check configuration"); } } else { $pageFrameName = $this->configuration["page_frame_template_path"]; } $parameters["app"]["content_template_name"] = $templateName; print $this->twig->render($pageFrameName, $parameters); } }