0

Typo3 Extensions(ver。4.5 LTS)の作成に関して(私見)マイナーな初心者の質問を受けました。私が試しているのは、離れた場所から情報を取得するための小さなcurlステートメントを含む小さなMVCクラスパターンを作成することです。原則として、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プログラミングの初心者であり、私が今のところ考えていない100の暗黙の問題があると思います(Typo3が暗黙的にどのように動作するかを知らないだけです)。私がこれまでに試したこと/したこと:

  • ルートテンプレートで設定することにより、テンプレートキャッシュをグローバルに無効にします。
  • すべての新しいステートメントのmakeInstance()への変換。このフックアップですべてのMVCコードを台無しにしたくないので、呼び出されたメソッド$ view-> getCourseInfoOutput()を次のように上書きしました。

    public function getCourseInfoOutput() {
      return "hello world!";
      //return $this->_model->getTemplateByCourseId(5);
    }
    
  • これが次の問題につながります。これでは、HelloWorldが取得されません。Typo3はとにかく拡張ルートクラスからのクラスからの戻り値を抑制しているようです

  • すべてのコードをメインメソッドに続けて入れると、うまくいきました

誰かが私を助けてくれませんか:/私は拡張機能がどのように機能するかを完全に誤解している可能性がわずかにあることを認めますが、私が言ったように、私はコードを拡張機能内で実行し、単一の値を返すだけです。これは本当に難しいですか?

事前のご挨拶&thx!

4

1 に答える 1

1

$content任意の HTML 文字列です。キックスターターで拡張機能を作成した場合、または既存の拡張機能をボイラープレートとして使用した場合は、関数内で何が起こるかを気にする必要があります。これは完全にあなた次第です。TYPO3 はあなたのクラスを作成し、main メソッドを呼び出し、戻り値をコンテンツとして使用します。関連するすべてのドキュメントはhttp://docs.typo3.org/typo3cms/CoreApiReference/ExtensionArchitecture/Index.htmlにあります。

もちろん、関数内で HTML を使用してはなりません。関数は、return ステートメントを使用して連結文字列としてコンテンツを返す必要があります。

TYPO3 CMSob_clean出力バッファをフラッシュするために使用します。する前に何かを強制的に出力するTYPO3 CMSと、それが壊れます。

于 2013-03-05T16:32:47.667 に答える