예제 #1
0
 /**
  * @return string the template path
  */
 public function getTemplatePath()
 {
     return $this->templateDefinition->getPath();
 }
예제 #2
0
 /**
  * Retrieve asset URL
  *
  * @param string                    $assetType js|css|image
  * @param array                     $params    Parameters
  *                                             - file File path in the default template
  *                                             - source module asset
  *                                             - filters filter to apply
  *                                             - debug
  *                                             - template if you want to load asset from another template
  * @param \Smarty_Internal_Template $template  Smarty Template
  *
  * @return string
  * @throws \Exception
  */
 public function computeAssetUrl($assetType, $params, \Smarty_Internal_Template $template)
 {
     $assetUrl = "";
     $file = $params['file'];
     // The 'file' parameter is mandatory
     if (empty($file)) {
         throw new \InvalidArgumentException("The 'file' parameter is missing in an asset directive (type is '{$assetType}')");
     }
     $assetOrigin = isset($params['source']) ? $params['source'] : SmartyParser::TEMPLATE_ASSETS_KEY;
     $filters = isset($params['filters']) ? $params['filters'] : '';
     $debug = isset($params['debug']) ? trim(strtolower($params['debug'])) == 'true' : false;
     $templateName = isset($params['template']) ? $params['template'] : false;
     Tlog::getInstance()->debug("Searching asset {$file} in source {$assetOrigin}, with template {$templateName}");
     /** @var \TheliaSmarty\Template\SmartyParser $smartyParser */
     $smartyParser = $template->smarty;
     if (false !== $templateName) {
         // We have to be sure that this external template assets have been properly prepared.
         // We will assume the following:
         //   1) this template have the same type as the current template,
         //   2) this template assets have the same structure as the current template
         //     (which is in self::$assetsDirectory)
         $currentTemplate = $smartyParser->getTemplateDefinition();
         $templateDefinition = new TemplateDefinition($templateName, $currentTemplate->getType());
         /* Add this templates directory to the current list */
         $smartyParser->addTemplateDirectory($templateDefinition->getType(), $templateDefinition->getName(), THELIA_TEMPLATE_DIR . $templateDefinition->getPath(), SmartyParser::TEMPLATE_ASSETS_KEY);
         $this->prepareTemplateAssets($templateDefinition, self::$assetsDirectory, $smartyParser);
     }
     $assetSource = $this->assetsResolver->resolveAssetSourcePath($assetOrigin, $templateName, $file, $smartyParser);
     if (null !== $assetSource) {
         $assetUrl = $this->assetsResolver->resolveAssetURL($assetOrigin, $file, $assetType, $smartyParser, $filters, $debug, self::$assetsDirectory, $templateName);
     } else {
         // Log the problem
         Tlog::getInstance()->addError("Failed to find asset source file " . $params['file']);
     }
     return $assetUrl;
 }