Russian TYPO3 community

Russian TYPO3 community (http://forum.typo3.ru/index.php)
-   Общие вопросы (http://forum.typo3.ru/forumdisplay.php?f=12)
-   -   Динамическое меню из PHP в TYPO3 (http://forum.typo3.ru/showthread.php?t=2792)

c0d3r 05.03.2007 14:14

Динамическое меню из PHP в TYPO3
 
Требуется в меню отобразить все подразделы 3-го уровня.
Главная -> Раздел -> Подраздел 1 ... Подраздел N

С Главной и Разделом вопросов нет, а для подразделов есть только 1 страница-шаблон "Подраздел", где подраздел задаётся через GET-параметр, а надо отобразить все подразделы.

Как вы генерите меню в таких случаях?
Заполняете $GLOBALS["TSFE"] данными в PHP или как-то иначе?

Заранее благодарю за помощь :)

Pavel Antonov 05.03.2007 14:18

Не понятнаааа.... (С)

c0d3r 05.03.2007 14:24

1. В TYPO3 у меня только 1 страница-подраздел (шаблон), которая обрабатывает много подразделов по их id (подразделы плавающие, берутся из другой БД). То есть при генерации HMENU TS ничего о них не знает, пока ему не сунуть их список из PHP. Вопрос - как правильно совать :)))

Например, вот так будет верно?

temp.page_menu = HMENU
temp.page_menu {
special = userfunction
special.wrap = ...
special.userFunc = subsections->generate
...
}

2. Возможно ли что-то аналогичное с помощью USER?

PhilD 05.03.2007 16:59

посмотрите еще itemArrayProcFunc

c0d3r 05.03.2007 17:30

Спасибо... время читать TSref... всё откладываю.... А можно привести пример использования, а то с ходу мне сложно писать на TS правильно :)

2.
И ещё вопрос по вышеприведённому:
temp.page_menu = HMENU
temp.page_menu {
special = userfunction
special.wrap = ...
special.userFunc = subsections->generate
...
}

В классе php имеем:
function generate($aMenu, $aConf) {
...
}

У неё есть два параметра, но в TS-setup на этот счёт тишина.
Вопрос экспертам: где указываются real-time параметры в эту функцию? Где-то в PHP искать или возможно в TS?

Спасибо.

Pavel Antonov 05.03.2007 21:57

А PHP то зачем??? Почему нельзя стандартным функционалом HMENU обойтись?

PhilD 05.03.2007 22:48

http://support.typo3.org:8080/jive/t...start=0#302260

c0d3r 06.03.2007 10:44

Pavel Antonov:
PHP затем, что я не знаю как или HMENU не может конфить данные из сторонней таблицы, для этого конфигурируется через (см. выше)
special = userfunction
special.wrap = ...
special.userFunc = subsections->generate

Что-то не так? :)

PhilD: спасибо, пошёл читать
там часть меню дёргается из плагина, у меня не плагин

Ну и для полного счастья - в один прекрасный момент всё перестало работать :(
То есть меню подразделов через special перестало выводиться.
На выходе функции оно есть, через дебуг отображается.
Но на сайте перестало появляться.
Не могу понять, где оно теряется... может быть, есть у кого идеи кроме залазанья в дебри сырцов... буду очень признателен :)

Дмитрий Самойлов 06.03.2007 12:25

Вот пример
 
temp.extraMenu = HMENU
temp.extraMenu {
special = userdefined
special.file = fileadmin/scripts/menu.php
# дальше идут собственные параметры, основываясь на которых выводится меню
special.pid = {$plugin.tx_ladymanager_pi1.listPid}
special.singlePid = {$plugin.tx_ladymanager_pi1.singlePid}
special.townStore = {$plugin.tx_ladymanager_pi1.pid}
1 {
wrap = <UL>|</UL>
NO.allWrap = <LI>|</LI>
CUR = 1
CUR.allWrap = <LI>|</LI>
CUR.linkWrap = <b>|</b>
ACT = 1
ACT.allWrap = <LI>|</LI>
}
}

fileadmin/scripts/menu.php
<?php
$townPid = intval($conf['pid']);
$singlePid = intval($conf['singlePid']);
$val = t3lib_div::_GP('tx_ladymanager_pi1');
$actTown = intval($val['city']);
$townStore = intval($conf['townStore']);
// в массиве с именем menuItemsArray должны хранится пункты меню
$menuItemsArray = array();

$selectSetup = Array(
'pidInList'=>$townStore,
'orderBy'=>'sorting',
);


$res = $GLOBALS['TSFE']->cObj->exec_getQuery('tx_ladymanager_city', $selectSetup);
while( $row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res) )
{
if( is_array($row) )
{
$menuItemsArray[] = array(
'title'=>$row['name'],
'_OVERRIDE_HREF'=>$this->parent_cObj->getTypoLink_URL( $townPid, array( 'tx_ladymanager_pi1[city]' => $row['uid'] ) ),
'ITEM_STATE' => ($actTown==$row['uid'] && ($GLOBALS['TSFE']->id == $townPid || $GLOBALS['TSFE']->id == $singlePid) ) ? 'CUR' : '',
);
}
}
?>

c0d3r 06.03.2007 15:49

Спасибо, буду разбираться, с ходу не понял.


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

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