TYPO3 Extbase后端模块。模板路径问题

时间:2013-05-29 06:56:50

标签: php path content-management-system typo3 extbase

我在创建extbase / fluid扩展时遇到了一个奇怪的问题。 我使用TYPO3 6.1

我在我的开发服务器上使用后端模块进行了扩展(与prod相同的配置/硬件)。该模块与模板的路径完美配合:

myext /资源/私人/后端/模板
myext /资源/个人/后端/布局
myext /资源/私人/后端/局部模板

在此之后,我在ext管理器中下载了扩展名的zip,然后在prod服务器上下载了安装程序。现在我无法使用我的扩展,因为模块找不到模板。 我以相同的方式配置了扩展。模板在正确的道路上。

我测试将我的文件夹移动到父级别:

myext /资源/专用/模板
myext /资源/个人/布局
myext /资源/专用/局部模板

使用它可以工作,但在模块配置中,我指定了“Backend /”文件夹的正确路径。

我不会在Private文件夹中移动我的文件夹,我希望它在Private / Backend文件夹中运行。

我已将扩展静态模板包含在网站根TS模板中。

这是常数:

module.tx_myext {
    view {
        # cat=module.tx_myext/file; type=string; label=Path to template root (BE)
        templateRootPath = EXT:wng_myext/Resources/Private/Backend/Templates/
        # cat=module.tx_myext/file; type=string; label=Path to template partials (BE)
        partialRootPath = EXT:wng_myext/Resources/Private/Backend/Partials/
        # cat=module.tx_myext/file; type=string; label=Path to template layouts (BE)
        layoutRootPath = EXT:wng_myext/Resources/Private/Backend/Layouts/
    }
    persistence {
        # cat=module.tx_myext//a; type=string; label=Default storage PID
        storagePid =
    }
}

这是设置:

module.tx_myext {
    persistence {
        storagePid = {$module.tx_myext.persistence.storagePid}
    }
    view {
        templateRootPath = {$module.tx_myext.view.templateRootPath}
        partialRootPath = {$module.tx_myext.view.partialRootPath}
        layoutRootPath = {$module.tx_myext.view.layoutRootPath}
    }
}

5 个答案:

答案 0 :(得分:6)

主要问题是,如果根路径中没有模板,则不会在存储文件夹或页面上加载typoscript配置。

<强>阐释: 你将为你的扩展设置的typoscript配置,它是在ext_typoscript_setup,静态模板或通过php,它总是需要在页面根目录的某个地方的系统记录模板。否则它将不会被渲染 - 并且不会发生extbase扩展的路径设置,因此设置了默认布局,模板和部分路径,这就是脚本将为您的内容寻找的位置。

默认为:

/Private/Resources/Layout/
/Private/Resources/Partials/
/Private/Resources/Templates/@Controllername/@Actionname

如果您需要为后端模块覆盖这些,则可以通过直接在控制器中注入视图的设置来解决该问题。

<?php
namespace VendorKey\ExtensionName\Controller;

class SettingsController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController {

/**
 * Initializes the controller before invoking an action method.
 * @return void
 */
protected function initializeAction() {
    $this->setBackendModuleTemplates();
}

/**
 * Set Backend Module Templates
 * @return void
 */
private function setBackendModuleTemplates(){
    $frameworkConfiguration = $this->configurationManager->getConfiguration(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK);
    $viewConfiguration = array(
        'view' => array(
            'templateRootPath' => 'EXT:extension_name/Resources/Private/Templates/Modules/',
            'partialRootPath' => 'EXT:extension_name/Resources/Private/Partials/Modules/',
            'layoutRootPath' => 'EXT:extension_name/Resources/Private/Layouts/Modules/',
        )
    );
    $this->configurationManager->setConfiguration(array_merge($frameworkConfiguration, $viewConfiguration));        
}

/**
 * action settings
 * @return void
 */
public function settingsAction(){

}

}

我希望这会有所帮助 greetz benji

答案 1 :(得分:4)

正如@ benjamin-kott所解释的那样,需要首先加载TYPO3的后端模块配置。不幸的是,默认情况下不会自动加载扩展程序的typoscript文件。

让TYPO3知道这个typoscript文件的一种方法是在扩展程序的根文件夹中创建两个文件:

  1. controllerAs

    ext_typoscript_constants.txt
  2. <INCLUDE_TYPOSCRIPT: source="FILE:EXT:myext/Configuration/TypoScript/constants.txt">

    ext_typoscript_setup.txt
  3.   

    (显而易见但是:你应该用你的路径替换这条路径)

    添加此文件后,您应重新安装扩展程序以查看更改。您可以使用TypoScript对象浏览器来确定是否正在加载您的设置和常量。

答案 2 :(得分:2)

我真的不知道你的设置,但通常你必须在/Configuration/TypoScript/setup.txt中设置这些路径

module.tx_yourext {
    persistence {
        storagePid = {$pid}
    }
    view {
        templateRootPath = {$templateRootPath}
        partialRootPath = {$partialRootPath}
        layoutRootPath = {$layoutRootPath}
    }
}

在添加扩展程序的静态模板之前,不会使用此配置。您还应将这些行添加到ext_tables.php

if (TYPO3_MODE === 'BE') {
    Tx_Extbase_Utility_Extension::registerModule(
        $_EXTKEY,
        'web',          // Main area
        'mod1',         // Name of the module
        '',             // Position of the module
        array(          // Allowed controller action combinations
            'Controller' => 'actionName'
        ),
        array(          // Additional configuration
            'access'    => 'user,group',
            'icon'      => 'EXT:my_ext/ext_icon.gif',
            'labels'    => 'LLL:EXT:' . $_EXTKEY . '/Resources/Private/Language/locallang_mod.xml',
        )
    );
}

答案 3 :(得分:2)

尝试清理所有缓存,即使在typo3temp / Core / Cache(或类似的东西)中

答案 4 :(得分:2)

虽然这个帖子很老,但我想向大家展示我的TYPO3 7.6 LTS解决方案。

首先,您需要通过Template > Edit whole record > Includes包含TypoScript文件。

在您的TypoScript中,您需要使用templateRootPaths.0代替templateRootPath

module.tx_extension {
    view {
        templateRootPaths.0 = EXT:extension/Resources/Private/Backend/Templates/
        partialRootPaths.0 = EXT:extension/Resources/Private/Backend/Partials/
        layoutRootPaths.0 = EXT:extension/Resources/Private/Backend/Layouts/
    }
}