From 7740bcc3523e06fcb868fc31a7f09ca40706909f Mon Sep 17 00:00:00 2001 From: Awilum Date: Fri, 21 Feb 2020 14:46:19 +0300 Subject: [PATCH] feat(site-plugin): update site plugin for this ticeks #373 #357 - add new twig function {{ site_url() }} - add new shortcode [site_url] --- .../site/app/Controllers/SiteController.php | 18 +++++++ site/plugins/site/bootstrap.php | 5 ++ site/plugins/site/composer.json | 3 +- site/plugins/site/dependencies.php | 3 ++ site/plugins/site/settings.yaml | 3 ++ .../shortcodes/SiteUrlShortcodeExtension.php | 15 ++++++ .../site/twig/SiteUrlTwigExtension.php | 49 +++++++++++++++++++ 7 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 site/plugins/site/shortcodes/SiteUrlShortcodeExtension.php create mode 100644 site/plugins/site/twig/SiteUrlTwigExtension.php diff --git a/site/plugins/site/app/Controllers/SiteController.php b/site/plugins/site/app/Controllers/SiteController.php index 489489ec..433d372e 100644 --- a/site/plugins/site/app/Controllers/SiteController.php +++ b/site/plugins/site/app/Controllers/SiteController.php @@ -11,6 +11,8 @@ declare(strict_types=1); namespace Flextype; +use Slim\Http\Environment; +use Slim\Http\Uri; use Psr\Http\Message\ResponseInterface as Response; use Psr\Http\Message\ServerRequestInterface as Request; use function ltrim; @@ -96,6 +98,22 @@ class SiteController extends Controller return $this->view->render($response, $path, ['entry' => $this->entry, 'query' => $query, 'uri' => $uri]); } + /** + * Get Site URL + * + * @return string + * + * @access public + */ + public function getSiteUrl() + { + if ($this->registry->has('plugins.site.site_url') && $this->registry->get('plugins.site.site_url') != '') { + return $this->registry->get('plugins.site.site_url'); + } else { + return Uri::createFromEnvironment(new Environment($_SERVER))->getBaseUrl(); + } + } + /** * Error404 page * diff --git a/site/plugins/site/bootstrap.php b/site/plugins/site/bootstrap.php index 1d4a2fb4..ce4582a9 100644 --- a/site/plugins/site/bootstrap.php +++ b/site/plugins/site/bootstrap.php @@ -34,6 +34,11 @@ $site_loader = require_once $site_autoload; */ include_once 'routes/web.php'; +/** + * Include shortcodes + */ +include_once 'shortcodes/SiteUrlShortcodeExtension.php'; + /** * Include dependencies */ diff --git a/site/plugins/site/composer.json b/site/plugins/site/composer.json index 76d26d47..635f3bc8 100644 --- a/site/plugins/site/composer.json +++ b/site/plugins/site/composer.json @@ -29,7 +29,8 @@ }, "autoload": { "classmap": [ - "app" + "app", + "twig" ] } } diff --git a/site/plugins/site/dependencies.php b/site/plugins/site/dependencies.php index 53c62761..d8ce7e6c 100644 --- a/site/plugins/site/dependencies.php +++ b/site/plugins/site/dependencies.php @@ -17,3 +17,6 @@ namespace Flextype; $flextype['SiteController'] = static function ($container) { return new SiteController($container); }; + +// Add Site Url Twig Extension +$flextype->view->addExtension(new SiteUrlTwigExtension($flextype)); diff --git a/site/plugins/site/settings.yaml b/site/plugins/site/settings.yaml index 885df8f5..2de5c257 100644 --- a/site/plugins/site/settings.yaml +++ b/site/plugins/site/settings.yaml @@ -20,3 +20,6 @@ robots: index, follow author: email: '' name: '' + +# Custom site site url +site_url: '' diff --git a/site/plugins/site/shortcodes/SiteUrlShortcodeExtension.php b/site/plugins/site/shortcodes/SiteUrlShortcodeExtension.php new file mode 100644 index 00000000..d55c71f3 --- /dev/null +++ b/site/plugins/site/shortcodes/SiteUrlShortcodeExtension.php @@ -0,0 +1,15 @@ +addHandler('site_url', static function () use ($flextype) { + return $flextype->SiteController->getSiteUrl(); +}); diff --git a/site/plugins/site/twig/SiteUrlTwigExtension.php b/site/plugins/site/twig/SiteUrlTwigExtension.php new file mode 100644 index 00000000..d7b4c888 --- /dev/null +++ b/site/plugins/site/twig/SiteUrlTwigExtension.php @@ -0,0 +1,49 @@ +flextype = $flextype; + } + + /** + * Callback for twig. + * + * @return array + */ + public function getFunctions() : array + { + return [ + new Twig_SimpleFunction('site_url', [$this, 'site_url'], ['is_safe' => ['html']]) + ]; + } + + /** + * Get Site URL + */ + public function site_url() : string + { + return $this->flextype->SiteController->getSiteUrl(); + } +}