Russian TYPO3 community Форум больше не используется. Присоединяйтесь к каналу #community-ru в Slack for TYPO3 community  

Вернуться   Russian TYPO3 community > Обсуждение общих технических вопросов > Общие вопросы

Ответ
 
Опции темы Опции просмотра
Старый 18.04.2006, 18:14   #1
Boris
Продвинутый
 
Регистрация: 15.02.2005
Сообщений: 50
По умолчанию Как переопределить одн из методов в t3lib_befunc ?

Надо переписать одн из методов в классе t3lib_befunc, но не могу понять как

Думал , при помощи 'XCLASS', но для данного класса не подходит

Зарание благодарен за помощь

Последний раз редактировалось Boris; 20.04.2006 в 01:17
Boris вне форума   Ответить с цитированием
Старый 20.04.2006, 10:51   #2
Дылгеров Ц.В.
Senior Member
 
Регистрация: 14.11.2005
Адрес: Улан-Удэ
Сообщений: 158
Отправить сообщение для Дылгеров Ц.В. с помощью ICQ
По умолчанию

а что за метода? создавать extended t3lib_befunc наверняка невозможно. может просто переписать все методы по цепочке?

Последний раз редактировалось Дылгеров Ц.В.; 20.04.2006 в 13:00
Дылгеров Ц.В. вне форума   Ответить с цитированием
Старый 22.04.2006, 00:56   #3
Boris
Продвинутый
 
Регистрация: 15.02.2005
Сообщений: 50
Question

Надо было изменить в t3lib_befunc::getProcessedValue значение $theColConf['MM'].
Так как использую ext:bidirectional, например для того что-бы в категориях можно было присваивать новости.
Но тогда в WEB->Listview вместо категорий выводится N/A.

Проапдейтил вчера на 4.0 и увидел, что в етой методе добавлен НООК

Код:
 
if (is_array ($TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_befunc.php']['preProcessValue'])) {
   foreach ($TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_befunc.php']['preProcessValue'] as $_funcRef) {
            t3lib_div::callUserFunction($_funcRef,$theColConf,$this);
 
    }
   }
В описании callUserFunction написано, что $theColConf передаётся как референц.

В своей функции меняю значение $theColConf['MM']

Код:
 
class tx_t3lib_befunc {
 function preProcessValue(&$theColConf,&$ref) {    
  $MM_Table =$theColConf['MM'];
  if(strstr($MM_Table,"|")){
   $parts = t3lib_div::trimExplode("|",$MM_Table,1);
   $theColConf['MM'] = $parts[0];
  }  
    //return $theColConf;
 
 }
}
Но когда вывожу в t3lib_befunc::getProcessedValue значение $theColConf после HOOK, то вижу что ничего не изменилось(хотя етот array передовался как референц)
Может обьясните почему?

Пришлось возвращать в моей функции $theColConf ( return $theColConf )

А в t3lib_befunc править на:

Код:
$theColConf =& t3lib_div::callUserFunction($_funcRef,$theColConf,$this);
Тогда заработало.

Но мне не нравится, что я сделал изменения прямо в ядре
Может кто-нибудь подскажет, где была ошибка.

Последний раз редактировалось Boris; 22.04.2006 в 13:15
Boris вне форума   Ответить с цитированием
Старый 25.04.2006, 06:19   #4
Дылгеров Ц.В.
Senior Member
 
Регистрация: 14.11.2005
Адрес: Улан-Удэ
Сообщений: 158
Отправить сообщение для Дылгеров Ц.В. с помощью ICQ
По умолчанию

Очень интересная тема

Цитата:
Сообщение от Boris
$theColConf=&t3lib_div::callUserFunction($_funcRef ,$theColConf,$this);
Скорее всего так нельзя делать - ведь хук будет использоваться другими экстеншинами. Другое дело что этот хук "молодой" - и его еще никто не успел использовать.

Можно разобраться с передачей в ваш хук theColConf['MM'] - а это код двух функций - самой callUserFunction и с похожим названием, вызываемой из нее.

А что в bidirectional не работает? у меня вроде работает.

А куда вы вносите изменения - в сам bidirectional или создаете расширение только из-за хука?

Последний раз редактировалось Дылгеров Ц.В.; 25.04.2006 в 06:30
Дылгеров Ц.В. вне форума   Ответить с цитированием
Старый 25.04.2006, 18:12   #5
(:)
Senior Member
 
Регистрация: 05.04.2006
Сообщений: 105
По умолчанию

Цитата:
Сообщение от Boris
В описании callUserFunction написано, что $theColConf передаётся как референц.

В своей функции меняю значение $theColConf['MM']

Код:
 
class tx_t3lib_befunc {
 function preProcessValue(&$theColConf,&$ref) {    
  $MM_Table =$theColConf['MM'];
  if(strstr($MM_Table,"|")){
   $parts = t3lib_div::trimExplode("|",$MM_Table,1);
   $theColConf['MM'] = $parts[0];
  }  
    //return $theColConf;
 
 }
}
Но когда вывожу в t3lib_befunc::getProcessedValue значение $theColConf после HOOK, то вижу что ничего не изменилось(хотя етот array передовался как референц)
Может обьясните почему?
в вашей функции есть условие. вы не проверяли оно выполняется во время теста?
(:) вне форума   Ответить с цитированием
Старый 27.04.2006, 02:25   #6
Boris
Продвинутый
 
Регистрация: 15.02.2005
Сообщений: 50
По умолчанию

Цитата:
Скорее всего так нельзя делать - ведь хук будет использоваться другими экстеншинами. Другое дело что этот хук "молодой" - и его еще никто не успел использовать.
Полностю с вами согласен.

Сам bidirectional работает без проблем. только в WEB->Listview выводится N/A(в поле 'связанных данных').

Цитата:
Values from bidirectional fields may not display correctly in the List module's “extended mode”.
http://typo3.org/documentation/docum....1.0/view/1/4/

Потому-что для bidirectional прописывается в TCA:
Код:
 
'MM' => 'tx_myext_table1_table2_mm | foreign'
'| foreign' мешает для правильного отбражения в Listview
В $theColConf['MM'] ожидается только название таблици связей.

Вносил я изменения в сам bidirectional (в принципе разницы нет)

В ext_localconf.php добавил:
Код:
 
$GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_befunc.php']['preProcessValue'][] = 'tx_t3lib_befunc->preProcessValue';
В ext_tables.php :
Код:
require_once(t3lib_extMgm::extPath('bidirectional').'class.user_t3lib_befunc.php');
Хотя можно и без етого, только в ext_localconf.php:
Код:
 
$GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_befunc.php']['preProcessValue'][] = 'EXT:bidirectional/class.ux_t3lib_befunc.php:tx_t3lib_befunc->preProcessValue';
И соответственно добавил файл class.ux_t3lib_befunc.php с :
Код:
class tx_t3lib_befunc {
function preProcessValue(&$theColConf,&$ref) {    
  $MM_Table =$theColConf['MM'];
  if(strstr($MM_Table,"|")){
   $parts = t3lib_div::trimExplode("|",$MM_Table,1);
   $theColConf['MM'] = $parts[0];
  }  
      //debug($theColConf);    
      //return $theColConf;
 
}
}
Смысл всего хоока обрубить всё лишнее, оставить только tx_myext_table1_table2_mm

Внутри моей методы проверяю(Debug), что содержимое $theColConf меняетя так как мне надо, а с 'наружи' нет.

Проблема с референц! Почему правильно не отрабатывается не пойму.
Хотя в доке написано:

Цитата:
function callUserFunction($funcName,&$params,&$ref,$checkPr efix='user_',$silent=0)
Such a function/method should look like this: "function proc(&$params, &$ref) {...}"

&$params - Parameters to be pass along (typically an array) (REFERENCE!)

Последний раз редактировалось Boris; 27.04.2006 в 02:42
Boris вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB code is Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


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


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

Хостинг и техническая поддержка: TYPO3 Лаборатория