Показать сообщение отдельно
Старый 21.09.2009, 10:35   #1
Sergey M Nikitin
Administrator
 
Аватар для Sergey M Nikitin
 
Регистрация: 10.07.2007
Адрес: Moscow
Сообщений: 181
Отправить сообщение для Sergey M Nikitin с помощью ICQ Отправить сообщение для Sergey M Nikitin с помощью Skype™
По умолчанию [TS] Динамический getText

Порой нужно в объекте типа getText (см. TSref стр. 9) вставить динамические данные. Например: есть замечательный, скажем так "getText" (поправьте если есть другое обозначение) - DB:

Цитата:
DB: Value from database, syntax is [tablename] :
[uid] : [field]. Any record from a table in TCA can be
selected here. Only marked-deleted records does not
return a value here
С помощью него можно всегда произвести выборку конкретного поля. Но порой идентификатор записи является динамическим (например передается из значения поля, либо url-запросу), что тогда делать? На помощь приходит stdWrap c его помощью можно вставить данные в поле определяющее данные (сорри за тавталогию)

пример:
Код:
some.ts.obj = TEXT
some.ts.obj{
  field = [dynamicData]
  wrap = {DB:tx_th_allocations:|:name}
  insertData = 1
}
Если данный объект находиться в контексте объекта CONTENT либо RECORDS, то значение поля [dynamicData] сначала подставляется в wrap объекта и только после этого обрабатывается ф-ей getData, благодаря insertData = 1

более комплексный пример:
Код:
some.ts.obj = TEXT
some.ts.obj{
  stdWrap.cObject = TEXT
  stdWrap.cObject{
    stdWrap.cObject = COA
    stdWrap.cObject{
       10 = LOAD_REGISTER
       10{
          myPrettyField.cObject = TEXT
          myPrettyField.cObject.field = [dynamicData#1]
          myPrettyTable.cObject = TEXT
          myPrettyTable.cObject.data = [dynamicData#2]
          myPrettyFieldTitle.cObject = CONTENT
          myPrettyFieldTitle.cObject{
          .....
          }
       }
       
       #Вставка 3х динамических элементов
       20 = TEXT
       20{
         value = DB:{register:myPrettyTable}:{register:myPrettyField}:{register:myPrettyFieldTitle}
         insertData = 1
       }
    }
    wrap = {|}
    insertData = 1
  }
  #на этом уровне мы можем пропускать через stdWrap конечный результат
  crop = 32 | ...
}
Данный подход позволяет вставлять любые данные и любое кол-во данных в поле типа getText, это дает очень хорошие решения во многих ситуациях. Данный пример был создан по причине того, что в typo3 есть не понятный глюк связанный с тем что вложенный в CONTENT объект RECORDS не позволяет выводить объекты этого жи типа при дальнейшем выполнение скрипта, данные примеры помогают избежать эти проблемы. Пользуйтесь на здоровье.

Последний раз редактировалось Sergey M Nikitin; 21.11.2009 в 20:11
Sergey M Nikitin вне форума   Ответить с цитированием