Pimcore\Controller\Action\Frontend::init PHP Метод

init() публичный Метод

public init ( )
    public function init()
    {
        // this is only executed once per request (first request)
        if (self::$isInitial) {
            \Pimcore::getEventManager()->trigger("frontend.controller.preInit", $this);
        }
        parent::init();
        // log exceptions if handled by error_handler
        $this->checkForErrors();
        // general definitions
        if (self::$isInitial) {
            \Pimcore::unsetAdminMode();
            Document::setHideUnpublished(true);
            Object\AbstractObject::setHideUnpublished(true);
            Object\AbstractObject::setGetInheritedValues(true);
            Object\Localizedfield::setGetFallbackValues(true);
        }
        // assign variables
        $this->view->controller = $this;
        // init website config
        $config = Config::getWebsiteConfig();
        $this->config = $config;
        $this->view->config = $config;
        $document = $this->getParam("document");
        if (!$document instanceof Document) {
            \Zend_Registry::set("pimcore_editmode", false);
            $this->editmode = false;
            $this->view->editmode = false;
            self::$isInitial = false;
            // check for a locale first, and set it if available
            if ($this->getParam("pimcore_parentDocument")) {
                // this is a special exception for renderlets in editmode (ajax request), because they depend on the locale of the parent document
                // otherwise there'll be notices like:  Notice: 'No translation for the language 'XX' available.'
                if ($parentDocument = Document::getById($this->getParam("pimcore_parentDocument"))) {
                    if ($parentDocument->getProperty("language")) {
                        $this->setLocaleFromDocument($parentDocument->getProperty("language"));
                    }
                }
            }
            // no document available, continue, ...
            return;
        } else {
            $this->setDocument($document);
            // register global locale if the document has the system property "language"
            if ($this->getDocument()->getProperty("language")) {
                $this->setLocaleFromDocument($this->getDocument()->getProperty("language"));
            }
            if (self::$isInitial) {
                // append meta-data to the headMeta() view helper,  if it is a document-request
                if (!Model\Staticroute::getCurrentRoute() && $this->getDocument() instanceof Document\Page) {
                    if (is_array($this->getDocument()->getMetaData())) {
                        foreach ($this->getDocument()->getMetaData() as $meta) {
                            $this->view->headMeta()->addRaw($meta);
                        }
                    }
                }
            }
        }
        // this is only executed once per request (first request)
        if (self::$isInitial) {
            // contains the logged in user if necessary
            $user = null;
            // default is to set the editmode to false, is enabled later if necessary
            \Zend_Registry::set("pimcore_editmode", false);
            if (Tool::isFrontentRequestByAdmin()) {
                $this->disableBrowserCache();
                // start admin session & get logged in user
                $user = Authentication::authenticateSession();
            }
            if (\Pimcore::inDebugMode()) {
                $this->disableBrowserCache();
            }
            if (!$this->document->isPublished()) {
                if (Tool::isFrontentRequestByAdmin()) {
                    if (!$user) {
                        throw new \Zend_Controller_Router_Exception("access denied for " . $this->document->getFullPath());
                    }
                } else {
                    throw new \Zend_Controller_Router_Exception("access denied for " . $this->document->getFullPath());
                }
            }
            // logged in users only
            if ($user) {
                // set the user to registry so that it is available via \Pimcore\Tool\Admin::getCurrentUser();
                \Zend_Registry::set("pimcore_admin_user", $user);
                // document editmode
                if ($this->getParam("pimcore_editmode")) {
                    \Zend_Registry::set("pimcore_editmode", true);
                    // check if there is the document in the session
                    $docKey = "document_" . $this->getDocument()->getId();
                    $docSession = Session::getReadOnly("pimcore_documents");
                    if ($docSession->{$docKey}) {
                        // if there is a document in the session use it
                        $this->setDocument($docSession->{$docKey});
                    } else {
                        // set the latest available version for editmode if there is no doc in the session
                        $latestVersion = $this->getDocument()->getLatestVersion();
                        if ($latestVersion) {
                            $latestDoc = $latestVersion->loadData();
                            if ($latestDoc instanceof Document\PageSnippet) {
                                $this->setDocument($latestDoc);
                            }
                        }
                    }
                    // register editmode plugin
                    $front = \Zend_Controller_Front::getInstance();
                    $front->registerPlugin(new \Pimcore\Controller\Plugin\Frontend\Editmode($this), 1000);
                }
                // document preview
                if ($this->getParam("pimcore_preview")) {
                    // get document from session
                    $docKey = "document_" . $this->getParam("document")->getId();
                    $docSession = Session::getReadOnly("pimcore_documents");
                    if ($docSession->{$docKey}) {
                        $this->setDocument($docSession->{$docKey});
                    }
                }
                // object preview
                if ($this->getParam("pimcore_object_preview")) {
                    $key = "object_" . $this->getParam("pimcore_object_preview");
                    $session = Session::getReadOnly("pimcore_objects");
                    if ($session->{$key}) {
                        $object = $session->{$key};
                        // add the object to the registry so every call to Object::getById() will return this object instead of the real one
                        \Zend_Registry::set("object_" . $object->getId(), $object);
                    }
                }
                // for version preview
                if ($this->getParam("pimcore_version")) {
                    // only get version data at the first call || because of embedded Snippets ...
                    if (!\Zend_Registry::isRegistered("pimcore_version_active")) {
                        $version = Model\Version::getById($this->getParam("pimcore_version"));
                        $this->setDocument($version->getData());
                        \Zend_Registry::set("pimcore_version_active", true);
                    }
                }
            }
            // for public versions
            if ($this->getParam("v")) {
                try {
                    $version = Model\Version::getById($this->getParam("v"));
                    if ($version->getPublic()) {
                        $this->setDocument($version->getData());
                    }
                } catch (\Exception $e) {
                }
            }
            // check for persona
            if ($this->getDocument() instanceof Document\Page) {
                $this->getDocument()->setUsePersona(null);
                // reset because of preview and editmode (saved in session)
                if ($this->getParam("_ptp") && self::$isInitial) {
                    $this->getDocument()->setUsePersona($this->getParam("_ptp"));
                }
            }
            // check if document is a wrapped hardlink, if this is the case send a rel=canonical header to the source document
            if ($this->getDocument() instanceof Document\Hardlink\Wrapper\WrapperInterface) {
                // get the cononical (source) document
                $hardlinkCanonicalSourceDocument = Document::getById($this->getDocument()->getId());
                $request = $this->getRequest();
                $canonical = null;
                if (\Pimcore\Tool\Frontend::isDocumentInCurrentSite($hardlinkCanonicalSourceDocument)) {
                    $canonical = $request->getScheme() . "://" . $request->getHttpHost() . $hardlinkCanonicalSourceDocument->getFullPath();
                } elseif (Model\Site::isSiteRequest()) {
                    $sourceSite = \Pimcore\Tool\Frontend::getSiteForDocument($hardlinkCanonicalSourceDocument);
                    if ($sourceSite) {
                        if ($sourceSite->getMainDomain()) {
                            $sourceSiteRelPath = preg_replace("@^" . preg_quote($sourceSite->getRootPath(), "@") . "@", "", $hardlinkCanonicalSourceDocument->getRealFullPath());
                            $canonical = $request->getScheme() . "://" . $sourceSite->getMainDomain() . $sourceSiteRelPath;
                        }
                    }
                }
                if ($canonical) {
                    $this->getResponse()->setHeader("Link", '<' . $canonical . '>; rel="canonical"');
                }
            }
            \Pimcore::getEventManager()->trigger("frontend.controller.postInit", $this);
        }
        // set some parameters
        $this->editmode = \Zend_Registry::get("pimcore_editmode");
        $this->view->editmode = \Zend_Registry::get("pimcore_editmode");
        self::$isInitial = false;
    }

Usage Example

Пример #1
0
 public function init()
 {
     //allow website path to override templates
     $this->view->addScriptPath(PIMCORE_WEBSITE_PATH . '/views/scripts');
     $this->view->addScriptPath(PIMCORE_WEBSITE_PATH . '/views/layouts');
     parent::init();
 }
All Usage Examples Of Pimcore\Controller\Action\Frontend::init