[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Unterkategorien einer ausgewählten Kategorie als Liste - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
psyche-delic
Beiträge: 41
Registriert: 26. Nov 2007, 22:33
Kontaktdaten: Website

Unterkategorien einer ausgewählten Kategorie als Liste

23. Jul 2008, 10:41

Hallo zusammen.

Ich benötige ein Modul, welches mir die Unterkategorien einer ausgewählten Kategorie als Listenpunkte darstellt und diese mit dem Startartikel der entsprechenden Unterkategorie verlinkt. Ich habe bisher nur Module gefunden, die die aktuellen Kategorien auflisten. Ich benötige aber eine Auswahlmöglichkeit.

Weiterhin benötige ich ein Teaser-Modul, welches mir alle Artikel einer Kategorie anteasert, auch wenn in dieser Kategorie noch Artikel in Unterkategorien existieren. Habe ich bisher auch noch nicht gefunden. Bei den üblichen Teaser-Modulen habe ich immer nur die Auswahl einer Kategorie. Aus dieser Kategorie werden dann die Artikel angezeigt, aber Artikel aus Unterkategorien der ausgewählten Kategorie werden nicht aufgelistet.

Hintergrund ist folgender:

Ich habe ein Immobilienportal mit mehreren Kategorien, z.B. Ferienimmobilien, Gewerbeimmobilien und Kaufimmobilien. In den Kategorien stehen jeweils die Beschreibungen der Immobilien in einem Artikel. Als Startartikel gibts eine Übersicht der Immobilien der jeweiligen Kategorie als Teaser. Auf diesem Startartikel muss ich aber eine Übersicht aller Kategorien haben, daher die Kategorien-Auswahlmöglichkeit, die ich benötige.

Dazu benötige ich zusätzlich eine Gesamtliste aller Artikel unabhängig von der Unterkategorie.

Ich hoffe, das ist verständlich und Ihr könnt mir helfen.

Vielen Dank schonmal,

Karsten

marry
Beiträge: 51
Registriert: 17. Mai 2008, 19:15

23. Jul 2008, 11:55

tipp: jeder artikel und jede kategorie basieren auf eine basisklasse, und die haben wunderbare get'er und set'er. damit dürfte sich sowas realisieren lassen

psyche-delic
Beiträge: 41
Registriert: 26. Nov 2007, 22:33
Kontaktdaten: Website

23. Jul 2008, 12:42

marry hat geschrieben:tipp: jeder artikel und jede kategorie basieren auf eine basisklasse, und die haben wunderbare get'er und set'er. damit dürfte sich sowas realisieren lassen
OK, die Kategorienliste habe ich hinbekommen, aber was muss ich anstellen, damit ich eine Liste aller Artikel einer Kategorie inkl. Unterkategorie bekomme?

Code: Alles auswählen

[....]

$articles = OOArticle::getArticlesOfCategory('20', true);

[...]
Hiermit bekomme ich ja nur die Artikel der Kategorie 20, nicht die Artikel der darunter liegenden Kategorien. Die brauche ich aber und zwar ohne Startartikel....

Gruß,

Karsten

stuttgarter
Beiträge: 224
Registriert: 18. Feb 2005, 14:00
Wohnort: stuttgart

23. Jul 2009, 11:32

Hallo

Wäre interessant wie es nun gelöst wurde ?
grüßle Stutti

Tizian
Beiträge: 151
Registriert: 4. Apr 2008, 11:58
Wohnort: Bremen
Kontaktdaten: Website

geschwisterkategorien!

23. Jul 2009, 11:56

hallo,

nur als anregung ein teaser auf alle geschwister.
hier müssen dann noch die startartikel rausgefiltert werden ...

Code: Alles auswählen

<?php
$cat = OOCategory::getCategoryById($this->getValue(category_id)); 
$cats = $cat->getChildren(); 

$wordsPerArticle = "REX_VALUE[1]";

if (is_array($cats)) { 
   foreach ($cats as $cat) { 
      $i += 1;
      if ($i <= $itemsPerSide) 
      {
      if($cat->isOnline()){ 
         
         $catId = $cat->getId(); 
         $catName = $cat->getName(); 
         $article = $cat->getArticles();
         
         if (is_array($article)) { 
            foreach ($article as $var) { 
               $articleId = $var->getId(); 
               $articleName = $var->getName(); 
               $articleDescription = $var->getDescription();
               $art = new article();
               $art->setArticleId($articleId);
               $articleContent = $art->getArticle();  

               $articleContent = trim($articleContent);
               $articleContent = str_replace("</p>", " </p>", $articleContent);
	       $articleContent = str_replace("<br />", " <br />", $articleContent);
		           
               $articlePPath = $REX["HTDOCS_PATH"]."files/".$var->getValue("file"); 
               
               $output = "";
               $words = explode(" ",$articleContent);
            	 $wordsCount = count($words);
	
            	 if ($wordsCount < $wordsPerArticle) $wEnd = $wordsCount;
            	 else  $wEnd = $wordsPerArticle;
				
	        	   for ($w=0;$w<$wEnd;$w++) {
		        	 $output .= $words[$w]." ";
		           }
		
		           $output = trim($output);
	     
		           $isCloseParagraph = substr($output,-4);
	        	   $link = '<a href="'.rex_getUrl($articleId).'"> ...mehr</a>';
	        	   $newString = $link.'</p>';
	
		           if ($isCloseParagraph == '</p>') {
	     		     $output = substr_replace($output,$newString,-4);
	             }
	           	 else {
		           $output .= $newString;
	     	       }
	          	 print '<div class="teaser2">'.$output.'</div>';
            } 
         } 
      } 
   }
} 
} 
?>
hoffe es hilft.
schöne grüße
tizian
********************************
ansichtsache TM

Benutzeravatar
Xong
Beiträge: 2081
Registriert: 5. Jun 2008, 08:30
Wohnort: Halle (Saale)

Re: geschwisterkategorien!

23. Jul 2009, 12:30

Hallo Tizian!

Das Problem mit dem Wörter zählen hatte ich auch gerade.
Um den Text aufzusplitten, würde ich statt

Code: Alles auswählen

$wordCount = count(explode(' ',$text));

Code: Alles auswählen

$wordCount = count(preg_split('/(\s)|(&#x20;)|(&nbsp;)/si', strip_tags($text)));
nutzen.
LG,
Xong

[ externes Bild ] Määääääääääääääääääääääääh!

zehbaeh
Beiträge: 556
Registriert: 17. Okt 2006, 11:52
Wohnort: Solingen

23. Jul 2009, 14:23

Beliebige "Tiefen" lösen sich am einfachsten rekursiv auf:

Code: Alles auswählen

<?php

/**
 * Alle Artikel einer Kategorie inkl. deren Unterkategorien ermitteln
 * die nicht Startartikel der jeweiligen Kategorie sind.
 * 
 * @param mixed  $mCatId     integer ID der Kategorie oder eine Instanz von OOCategory
 * @param &array $aArticles  Array das die Artikel aufnimmt
 * @param bool   $bIOL       wenn TRUE werden Artikel die NICHT "Online" sind ignoriert
 * @param int    $iDepth     -1 für beliebige Verschachtelung, sonst max. Verschachtelungstiefe
 * @param string $sPath      intern - Verwendet zum generieren der "Keys" von $aArticles
 * @return bool              TRUE wenn keine Fehler aufgetreten sind, sonst FALSE
 */
function getArticlesRecursive($mCatId, &$aArticles, $bIOL = FALSE, $iDepth = -1, $sPath = NULL)
{
    $aArticles = (array)$aArticles;
    $oCategory = NULL;
    if($mCatId instanceof OOCategory)
    {
        $oCategory = $mCatId;
        $iCatId    = intval($oCategory->getId());
    }
    elseif(NULL !== $mCatId) // ID der Kategorie
    {
        $iCatId    = intval($mCatId);
        $oCategory = OOCategory::getCategoryById($iCatId);
    }
    if(NULL === $oCategory)
    {
        return FALSE;
    }
    $sPath = NULL === $sPath ? (string)$iCatId : sprintf('%s.%s', $sPath, $oCategory->getId());
    
    foreach($oCategory->getArticles($bIOL) as $oChild)
    {
        if(NULL === $oChild)
        {
            return FALSE;
        }
        $iChildId = intval($oChild->getId());
        if($iCatId !== $iChildId)
        {
            $sKey = sprintf('%s.%d', $sPath, $iChildId);
            $aArticles[$sKey] = $oChild;
        }
    }
    if(0 !== $iDepth)
    {
        foreach($oCategory->getChildren() as $oChild)
        {
            if(FALSE === getArticlesRecursive($oChild, $aArticles, $bIOL, $iDepth - 1, $sPath))
            {
               return FALSE;
            }
        }
    }
    return TRUE;
}

$test = array(
    'category'         => 3, 
    'ignore offlines'  => FALSE,
    'max depth'        => -1,
    'result'           => FALSE,
    'articles'         => array(),
    'articles ksorted' => array()
);
$test['result'] = getArticlesRecursive(
    $test['category'],
    $test['articles'],
    $test['ignore offlines'],
    $test['max depth']
);
$test['articles'] = array_map(create_function('$o', 'return htmlspecialchars($o->getName());'), $test['articles']);
$test['articles ksorted'] = $test['articles'];
ksort($test['articles ksorted']);
var_dump($test);
PS-EDIT: Tiefe.Enum entfernt, da Unsinn!)
PS-EDIT-2: Allgemeiner mit "sinvollen" Array Keys!)

Zurück zu „Allgemeines [R4]“