Использование медиа-поля из Page в расширении - PullRequest
0 голосов
/ 17 января 2012

Всем нам может быть известен следующий фрагмент, который получает первую запись поля мультимедиа страницы, например, для отображения изображения заголовка на странице.

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

Я создаю расширение (плагин, нетItemuserFunc и т. Д.), Который должен работать с этим носителем.Я не хочу обрабатывать десятки директив typoscript в php для создания этих изображений.Как я могу использовать приведенный выше пример для обработки поля мультимедиа с помощью опечатки, используя базовую функциональность вместо того, чтобы заново изобретать колесо?

Так что теперь я в своем коде расширения, имеющем массив записей страниц.Как пройти дальше?Приведенный ниже код не обеспечивает нужную мне функциональность, потому что я не работаю на уровне страницы (как если бы я использовал TS сверху в TMENU).

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

1 Ответ

1 голос
/ 17 января 2012

Имея массив записей страниц ($pages) с ассоциативными ключами, совпадающими с именами полей в базе данных, в основном с полем media , вы просто проходите по массиву и создаете изображения, используя конфигурация 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.']);
}

Устанавливает данные страницы так, чтобы они были доступны как field в Typoscript. Конфигурация будет выглядеть примерно так:

{
  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;
}

ПРИМЕЧАНИЕ : Эти примеры полностью не проверены. Я придумал их из головы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...