0

次のスニペットは、ページのメディア フィールドの最初のエントリを取得して、たとえばページにヘッダー イメージを表示するものです。

10 = IMAGE
10.file {
  import = uploads/media/
  import.data = levelmedia: 0, slide
  import.listNum = 0
}

このメディアで動作する必要がある拡張機能 (プラグイン、ItemuserFunc などはありません) を作成しています。この画像を作成するために、PHP で数十のタイポスクリプト ディレクティブを処理したくありません。上記の例を使用して、車輪を再発明する代わりにコア機能を使用して、タイポスクリプトを介してメディア フィールドを処理するにはどうすればよいでしょうか?

これで、ページ レコードの配列を持つ拡張コードに取り掛かりました。さらに進むには?以下のコードは、ページ レベルで作業していないため (TMENU で上から TS を使用する場合のように)、必要な機能を提供しません。

$content .= $this->cObj->stdWrap($page['media'], $this->conf['media_stdWrap.']);
4

1 に答える 1

1

$pagesデータベース内のフィールド名と同じ連想キーを持つページ レコード ( ) の配列 (主にメディアフィールド) があれば、単に配列を調べて、Typoscript 構成を使用して画像を作成します。

例 1 (プログラマーがレンダリングを設定)

foreach($pages as $value) {
  $mediaField = t3lib_div::trimExplode(',', $value['media']);
  if(!$mediaField[0]) continue;

  $imageConf = array(
    'file' => 'uploads/media/' . $mediaField[0],
  );
  $content .= $this->cObj->cObjGetSingle('IMAGE', $imageConf);
}

例 2 (編集者がレンダリングを設定)

foreach($pages as $value) {
  $this->cObj->data = $value;
  $content .= $this->cObj->stdWrap($value['media'], $this->conf['media_stdWrap.']);
}

fieldTyposcript のように利用できるようにページ データを設定します。構成は次のようになります。

{
  media_stdWrap {
    cObject = IMAGE
    cObject {
      file {
        import = uploads/media/
        import.field = media
        import.listNum = 0
      }
    }
  }
}

例 3 (前の 2 つの例の組み合わせ)

foreach($pages as $value) {
  $mediaField = t3lib_div::trimExplode(',', $value['media']);
  $mediaOutput = '';

  // Creating the output with a default rendering
  if($mediaField[0]) {
    $imageConf = array(
      'file' => 'uploads/media/' . $mediaField[0],
    );
    $mediaOutput = $this->cObj->cObjGetSingle('IMAGE', $imageConf);
  }

  // Allowing custom Typoscript to completely modify the media part
  if(array_key_exists('media_stdWrap.', $this->conf)) {
    $this->cObj->data = $value;
    $mediaOutput = $this->cObj->stdWrap($mediaOutput, $this->conf['media_stdWrap.']);
  }

  $content .= $mediaOutput;
}

: これらの例は完全にテストされていません。私は頭からそれらを思いつきました。

于 2012-01-17T11:01:35.093 に答える