如何在给定的Typo3扩展中添加类(例如lib)?

时间:2013-03-05 09:03:10

标签: debugging extension-methods typo3

我有一个关于写Typo3 Extensions(版本4.5 LTS)的(imho)小菜鸟问题。我尝试的只是构成一个小的MVC类模式,其中包含一个小的curl语句来从远程位置检索信息。原则上,MVC类已经实现,我只想将它们包含在我的插件扩展的主要过程中。这就是我猜想的工作:

class tx_uniklstudgangext2013_pi1 extends tslib_pibase {
public $prefixId      = 'tx_uniklstudgangext2013_pi1';      // Same as class name
public $scriptRelPath = 'pi1/class.tx_uniklstudgangext2013_pi1.php';    // Path to this script relative to the extension dir.
public $extKey        = 'uniklstudgangext2013'; // The extension key.
public $pi_checkCHash = TRUE;

/**
 * The main method of the Plugin.
 *
 * @param string $content The Plugin content
 * @param array $conf The Plugin configuration
 * @return string The content that is displayed on the website
 */
public function main($content, array $conf) {
    $this->conf = $conf;
    $this->pi_setPiVarDefaults();
    $this->pi_loadLL();

    $view = t3lib_div::makeInstance('tx_uniklstudgangext2013_pi1_view');
    // !HERE! : also tried with new(), since I don't want to deal with XCLASS here...
    // this works: $content = "<p>Hello world!</p>";...the line below doesn't...
    $content = $view->getCourseInfoOutput();
    /*'
        <strong>This is a few paragraphs:</strong><br />
        <p>This is line 1</p>
        <p>This is line 2</p>

        <h3>This is a form:</h3>
        <form action="' . $this->pi_getPageLink($GLOBALS['TSFE']->id) . '" method="POST">
            <input type="text" name="' . $this->prefixId . '[input_field]" value="' . htmlspecialchars($this->piVars['input_field']) . '" />
            <input type="submit" name="' . $this->prefixId . '[submit_button]" value="' . htmlspecialchars($this->pi_getLL('submit_button_label')) . '" />
        </form>
        <br />
        <p>You can click here to ' . $this->pi_linkToPage('get to this page again', $GLOBALS['TSFE']->id) . '</p>
    ';
    */

    return $this->pi_wrapInBaseClass($content);
}
}

我是Typo3编程的初学者,我想到目前为止还有一百个我没有想到的隐含问题(只是不知道Typo3是如何隐式运行的)。到目前为止我尝试过的事情:

  • 通过在根模板中设置模板缓存来全局禁用模板缓存。
  • 将所有新语句转换为makeInstance();不希望这个连接搞砸了我所有的MVC代码,我覆盖了被调用的方法$ view-&gt; getCourseInfoOutput()by

    public function getCourseInfoOutput() {
      return "hello world!";
      //return $this->_model->getTemplateByCourseId(5);
    }
    
  • 引导我进入下一个问题:它本身并没有得到你好的世界!似乎,Typo3无论如何都会从扩展根类中取代类的返回值

  • 当我将所有代码连续放入main方法时,它就可以了。

有人可以帮助我:/我承认,我完全误解了扩展程序是如何工作的,但是,正如我所说,我只是想让我的代码在扩展程序中运行,只返回一个值。这真的很难吗?

问候&amp;提前thx!

1 个答案:

答案 0 :(得分:1)

$content是任何HTML字符串。如果您使用kickstarter创建了扩展,或者使用任何现有扩展作为样板,那么您只需要关心内部功能发生了什么。 这完全取决于你。 TYPO3将创建您的类,并将调用main方法并使用返回值作为内容。 您可以在http://docs.typo3.org/typo3cms/CoreApiReference/ExtensionArchitecture/Index.html

找到所有相关文档

您当然必须使用您的功能中的任何HTML。您的函数必须将内容作为带有return语句的连接字符串返回。

TYPO3 CMS使用ob_clean刷新输出缓冲区。如果你在TYPO3 CMS之前强行输出任何内容,那么你就会破坏它。