Russian TYPO3 community

Russian TYPO3 community (http://forum.typo3.ru/index.php)
-   Общие вопросы (http://forum.typo3.ru/forumdisplay.php?f=12)
-   -   userFunc и параметры (http://forum.typo3.ru/showthread.php?t=8511)

gvv100 16.04.2010 19:12

userFunc и параметры
 
Народ, может кто подскажет как в свою пользовательскую функцию (userFunc) передать значение поля?
Ситуация такая - в новостях есть дополнительные поля, одно из них хранит код клиента, который берется из списка fe_users. Задача такая - вывести в единичной новости название клиента, зная его код.

Пока родил следующее и оно работает :

includeLibs.myFunc = fileadmin/templates/userfunc/func.php

page.1 = LOAD_REGISTER
page.1{
storage_pids.cObject = USER
storage_pids.cObject{
userFunc = user_func->getUserNameById
#задаем id клиента через константу
user_id = 140;
#задаем id клиента через значение в дополнительном поле
#user_id = {field:tx_ttnews_client_id}
}
}
# выводим имя клиента
page.5 = TEXT
page.5.data = register:storage_pids

Но как передать значение поля - tx_ttnews_client_id вот в чем вопрос!

reva2 17.04.2010 00:27

Для подобных вещей в tt_news предусмотрены хуки.
Смотри это и используем хук getItemMarkerArray()

gvv100 20.04.2010 19:35

userFunc и параметры
 
Спасибо! Наконец-то разобрался как это работает.
Сейчас это выглядит уже так:

TS
includeLibs.myFunc = fileadmin/templates/userfunc/func.php
plugin.tt_news.itemMarkerArrayFunc = user_func->user_ClientNameById

plugin.tt_news{
newsClients_stdWrap.wrap = <div class="client_info"><span>Клиент:</span><p><strong>|</strong></p></div>
}

PHP
<?php
class user_func{
function user_ClientNameById($markerArray, $conf){
$row = $conf['parentObj']->local_cObj->data; // get the data array of the current news record
//t3lib_div::debug($markerArray);
//t3lib_div::debug($row);

if ($row['tx_addfiledttnews_client']){
$clientsArr = explode(',',$row['tx_addfiledttnews_client']);
$cnt = 0;
while(list(,$val) = each($clientsArr)) {
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('name','fe_users','uid='.$val,'' ,'','');
$row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);
$markerArray['###NEWS_CLIENT###'] .= $conf['parentObj']->local_cObj->stdWrap($row['name'], $conf['parentObj']->conf['newsClients_stdWrap.']);
$cnt = $cnt + 1;
}
} else {
$markerArray['###NEWS_CLIENT###']='';
}

return $markerArray;

} // end user_ClientNameById

}
?>

Прекрасно работает, НО!

Не могу понять как сделать вывод двух подобных дополнительных полей? Когда я пишу еще одну PHP функцию, которая делает примерно тоже самое - достает по коду еще одно имя, а потом пытаюсь вызвать её из TS, то работает только та функция, которая вызывалась последней.

Выглядит это вот так:
includeLibs.myFunc = fileadmin/templates/userfunc/func.php
plugin.tt_news.itemMarkerArrayFunc = user_func->user_ClientNameById
plugin.tt_news.itemMarkerArrayFunc = user_func->user_CustomerNameById

Результат user_CustomerNameById - виден, а результат user_ClientNameById нет.

Как сделать, чтобы эти две функции работали нормально вместе?

Nobody 21.04.2010 19:08

Цитата:

Выглядит это вот так:
includeLibs.myFunc = fileadmin/templates/userfunc/func.php
plugin.tt_news.itemMarkerArrayFunc = user_func->user_ClientNameById
plugin.tt_news.itemMarkerArrayFunc = user_func->user_CustomerNameById
Второе переписывает первое. TypoScript – не язык программирования! Любое следующее присваивание переписывает предыдущее. Сделайте одну фукцию и всё.

А первый пост я вообще не понял. Проще было бы, если бы описали что хотите добиться.

gvv100 21.04.2010 19:30

Спасибо за совет. Именно так я и поступил - все получилось.

По поводу первого поста поясню более понятно...
На Новости может быть "навешена" куча дополнительных полей. Хорошо если эти поля содержат просто текст, который нужно потом вывести на странице сайта. Но некоторые поля могут содержать коды других записей в БД. Вот вопрос в этом и заключался - как по коду получить описание (name или title какой-нибудь).

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


Часовой пояс GMT +4, время: 05:35.

Работает на vBulletin® версия 3.8.1.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot