[TYPO3-UG Oesterreich] tt_news catmenu als select

Stephan Petzl spetzl at gmx.at
Tue Sep 16 13:52:35 CEST 2008


> Es besteht auch die möglichkeit das menü gänzlich in php zu machen und 
> das dann per hook einzubinden. damit hat man dann natürlich am wenigsten 
> einschränkungen. falls du daran interessiert sein solltest kann ich dir 
> hier weiterhelfen..


erstelle zuerst eine extension im kickstarter.
dann speichere und installiere die extension.
dann erstelle (wenn noch nicht vorhanden) eine ext_localconf.php im root 
deiner extension.
für folgendes in der ext_localconf.php ein:
<?php
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['tt_news']['userDisplayCatmenuHook'][] 
= 
t3lib_extMgm::extPath($_EXTKEY).'hooks/class.tx_tt_news_categorymenu_hook.php:&tx_tt_news_categorymenu_hook';
?>

erstelle eine datei hooks/class.tx_tt_news_categorymenu_hook.php und 
folgendes einfügen:

<?php
/**
  * @property t3lib_DB $db
  * @property t3lib_tsfeBeUserAuth $tsfe;
  */
class tx_tt_news_categorymenu_hook{

     public function init($conf,&$ref){

         global $TYPO3_DB,$TSFE;
         $this->db = $TYPO3_DB;
         $this->tsfe = $TSFE;
         $this->ref = $ref;
         $this->conf = $conf;

     }
     public function userDisplayCatmenu(&$conf, &$ref){
         $this->init($conf,$ref);

         if($ref->conf['displayCatMenu.']['mode'] == 'xyn_ext') {	
             $rows = $this->db->exec_SELECTgetRows("*",
                                                     "tt_news_cat",
                                                     "deleted=0 AND 
hidden=0",
                                                     "",
                                                     "parent_category 
ASC,title ASC"
                                                     );

             $html = $this->addSubCategoriesRec($rows,0);
             return $html;
         }
     }
     // recursively adds childs of the category record with uid "&cat_uid"
     private function addSubCategoriesRec(&$rows, $cat_uid){

         $html = "";
         $i=0;
         $pid = $this->conf['displayCatMenu.']['targetPid'];
         if(!$pid)
             $pid = $this->tsfe->id;
         foreach($rows as $row){
             if($row['parent_category'] == $cat_uid){
                 $title = htmlspecialchars($row['title']);
                 $urlParams = array('tx_ttnews[cat]' => $row['uid']);
                 //$aTagParams .= ' title="'.$row['descrition'].'"';
                 $conf = array(
			'useCacheHash'     => $this->conf['allowCaching'],
			'no_cache'         => !$this->conf['allowCaching'],
			'parameter'        => $pid,
                         'additionalParams' => 
$this->conf['parent.']['addParams'].t3lib_div::implodeArrayForUrl('',$urlParams,'',1).$this->pi_moreParams,
			//'ATagParams'       => $aTagParams
		);

		$link = $this->ref->cObj->typoLink($title, $conf);
                 $href = 
$this->ref->pi_getPageLink($pid,'',array('tx_ttnews[cat]'=>$row['uid']));
                 $html .= '<li id="li_news_cat_'.$row['uid'].'">';
                 $html .= $link;//'<a href="'.$href.'" 
alt="'.$row['title'].'">'.$row['title'].'</a>';
                 //unset($rows[$i]);
                 $html .= $this->addSubCategoriesRec($rows,$row['uid']);
                 $html .= '</li>';
             }
             $i++;
         }
         //debug(count($rows));
         if($html)
             $html = '<ul class="tt_news_cat_'.$cat_uid.'">'.$html.'</ul>';

         return $html;

     }
}
?>

anschließend in deinem typoscript template folgenden parameter setzen:
plugin.tt_news.displayCatMenu.mode = xyn_ext

nun kannst du ein normales tt_news catmenu an entsprechender stelle auf 
deiner seite einfügen, das rendering übernimmt deine 
tx_tt_news_categorymenu_hook klasse. entsprechende php kenntnisse 
vorausgesetzt sollte es kein problem sein den code so anzupassen dass du 
dropdowns angezeigt bekommst...




More information about the TYPO3-at mailing list