【问题标题】:Typo3 Custom ExtensionsTypo3 自定义扩展
【发布时间】:2013-05-06 14:31:52
【问题描述】:

我是 Typo3 的新手。 我在 /typo3conf/ext/myExtension 中创建了一个名为 myExtension 的扩展

文件夹结构如下

-Classes
 --ViewHelpers
   --myExtensionViewHelper.php
-Resources
 --Resources
  --Private
   --Templates
    --myExtension
     --index.html

myExtensionViewHelper.php 有以下代码

<?php

/**
 * This class is a demo view helper for the Fluid templating engine.
 *
 * @package TYPO3
 * @subpackage Fluid
 * @version
 */
class Tx_myExtension_ViewHelpers_myExtensionViewHelper extends Tx_Fluid_Core_ViewHelper_AbstractViewHelper {

    /**
     * Renders some classic dummy content: Lorem Ipsum...
     *
     * @param int $length The number of characters of the dummy content
     * @validate $length IntegerValidator
     * @return string dummy content, cropped after the given number of characters
     */
    public function render($length) {
        $dummyContent = 'Lorem ipsum dolor sit amet.';
        return substr($dummyContent, 0, $length);
    }
}

?>

index.html 文件包含

{namespace myExtension=Tx_myExtension_ViewHelpers} 

<f:layout name="Default" />
<f:section name="content">

<h1>
  <myExtension:myExtension length="5" />
</h1>

</f:section>

在我的typo3 后端,我创建了一个名为“Mango”的页面并将这个插件包含在其中。

我有网页“Mango”的模板、布局和 template.html。

现在我应该怎么做才能将文件 Index.html 的输出放到这个页面中?

我这样做对吗? 除了这里提到的东西,我没有做过任何其他事情。

我对 Typo3 完全陌生,这一切有点难以理解。请务必提及,即使任何事情都是微不足道的和显而易见的。

谢谢:)

【问题讨论】:

    标签: typo3 extbase typo3-flow


    【解决方案1】:

    您需要一个控制器来加载模板系统并显示模板。 您定义的 ViewHelper 不需要获得结果,这些只是您可以在模板中使用的自定义模板类。

    控制器示例:

    文件:类/控制器/TestController.php

    class Tx_MyExtension_Controller_TestController extends Tx_Extbase_MVC_Controller_ActionController {
        /**
         * action sampleAction
         *
         * @return void
         */
        public function sampleAction() {
            //Add variables to template
            $this->view->assign("sample_var", "sample value");
        }
    
    }
    

    现在您需要一个模板文件,该模板文件位于基于 Controller 和 Action 的目录中。因此,在此示例中,您需要一个位于 my_extension/Resources/Private/Templates/Test/ 中的模板文件(其中“Test”是控制器名称),它的调用方式类似于操作 Sample.html

    要全面了解您的扩展,您还需要包含内容的布局文件 my_extension/Resources/Private/Layouts/Default.html

    <div class="tx-my-extension">
        <f:render section="main" />
    </div>
    

    此文件在您的模板中使用&lt;f:layout name="Default" /&gt; 调用,&lt;f:render section="main" /&gt; 是显示内容的位置。

    下一步是允许扩展中的操作。转到根目录中的ext_localconf.php 并添加

    Tx_Extbase_Utility_Extension::configurePlugin(
        $_EXTKEY,
        'Myextension',
        array(
            'Test' => 'sample', // 'ControllerName' => 'ActionName, OtherAction'
        ),
        // non-cacheable actions
        array(
            'Test' => 'sample', // 'ControllerName' => 'ActionName, OtherAction'
        )
    );
    

    最后一步是使用内容创建模板文件my_extension/Resources/Private/Templates/Test/Sample.html

    <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
    
    <f:layout name="Default" />
    
    <f:section name="main">
        Your sample var: {sample_var}
    </f:section>
    

    现在您应该会在将插件添加到页面后看到结果。

    【讨论】:

    • 非常感谢。会试试看:)
    • 我做到了。我创建了一个新页面,并在内容部分添加了插件。页面 > 编辑 > 插件并选择插件。我还需要创建一个模板并在那里提及吗?
    • 使用“扩展生成器”创建扩展可能会更好。在那里创建一个模型,保存并观看魔术。
    • 这很可能会让你更快地开始;)
    猜你喜欢
    • 2014-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    相关资源
    最近更新 更多