Typoscript - ссылка на файл, только если он существует с использованием URL - PullRequest
0 голосов
/ 04 июля 2018

Я использую Templavoilà Plus, и у меня есть одно поле, которое пользователь заполняет заголовком field_title. Я использую это поле для создания URL / HTML для других полей моего FCE, используя Typoscript Object Path.

Константы:

file = fileadmin/datasheets/|.pdf

Установка:

lib.field_datasheet = TEXT
lib.field_datasheet {
 field = field_title
 wrap = <a href="{$file}"></a>
}

Проблема в том, что я хочу сделать это, только если файл / URL существует. Сначала я подумал о том, чтобы проверить, не создает ли созданный мной URL ссылку на страницу 404. Тогда я подумал, что будет проще проверить, не равен ли размер файла 0. Поработав над этим два дня и посмотрев повсюду, я понял, что ни одно из этих решений не было легким

Я думаю, что у меня есть несколько ответов, используя stdWrap.rawUrlEncode, file:current:size, if.isTrue.data, FILE и т. Д., Но, очевидно, Typoscript не предназначен для начинающих, и я не могу найти, как расставить все по порядку и как все это правильно использовать.

Я думаю, что мог бы справиться с состоянием, используя что-то вроде:

if.isTrue < .10 #.10 containing the size of the file
if.value = 0

Но действительно сложная часть - это получение размера файла по URL, который я создал с помощью Typoscript . Я довольно, должен быть способ сделать это только с Typoscript, так как я знаю, что можно получить размер файла из его uid ...

Или, может быть, мне стоит просто проверить, не приводит ли этот URL к странице 404 . Или, может быть, есть более простое решение, о котором я не думал!

Любая помощь будет принята с благодарностью, извините, если эту проблему слишком легко решить, и большое спасибо за то, что прочитали этот пост! =) * * 1 029

РЕДАКТИРОВАТЬ: я использую Typo3 7,6

Ответы [ 3 ]

0 голосов
/ 10 июля 2018

Вы можете использовать ссылку на файл для этого. Без тестирования это должно быть что-то вроде:

lib.field_datasheet = TEXT
lib.field_datasheet {
  field = field_title
  wrap = |.pdf
  filelink {
    path = fileadmin/datasheets/
    file.field = field_title
  }
}

Не уверен, что это делает, если файла там нет. Вероятно, он ничего не показывает, и в этом случае вы можете использовать ifEmpty.field = field_title, чтобы просто показать текст.

Подробнее о ссылке на файл: https://docs.typo3.org/typo3cms/TyposcriptReference/Functions/Filelink.html

0 голосов
/ 12 июля 2018

Благодаря ответу Руди я смог решить мою проблему. Так что это может быть полезно для других, вот фрагмент Typoscript, который я использовал:

lib.field_datasheet = TEXT
lib.field_datasheet {
  value {
    field = field_title
    wrap = |.pdf
    }

  filelink {
    path = /fileadmin/datasheet/
    target = _blank
    altText = PDF icon
    titleText = Download datasheet

    //Personalize the icon, the file must be named pdf.png            
    icon_link = 1
    icon = 1
    icon {
      path = fileadmin/icons/
      ext = png
      }
    }
 }
0 голосов
/ 05 июля 2018

Почему бы вам не позволить TYPO3 решить, существует ли файл и стоит ли создавать ссылку?

Ваша проблема может заключаться в том, что вам нечего связать. (пустой A-тег)

Я бы попробовал что-то вроде:

Константы:

filePath = fileadmin/datasheets/|.pdf

Установка:

lib.field_datasheet = TEXT
lib.field_datasheet {
   // use the 'filename' as text to be linked
   field = field_title
   // now build the link:
   typolink.parameter {
       field = field_title
       wrap = {$filePath}|
   }
}
...