Nur Startartikel aus News Modul ausgeben!

Gesperrt
conti79
Beiträge: 57
Registriert: Fr 31. Mär 2006, 10:09
Kontaktdaten:

Nur Startartikel aus News Modul ausgeben!

Beitrag von conti79 »

Hallo,

ich habe ein Problem: ich möchte mit dem Standard-News-Modul von Contenido nur den Startartikel einer Kategorie auslesen und anzeigen lassen. Standardmäßig kann man ja nur die Artikel OHNE Startartikel oder eben MIT Startartikel ausgeben lassen.

Was müsste ich am Code ändern, damit NUR der Startartikel und alle anderen Artikel NICHT ausgegeben werden?

Danke für jede Hilfe.

Hier der Code des News-Standard-Moduls aus Contenido 4.6.15

Code: Alles auswählen

<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname  :      News
* Author(s)   :     Andreas Lindner, 4fb
* Copyright   :     Contenido - four for business, Andreas Lindner
* Created     :     12.08.2005
************************************************/

cInclude('classes', 'class.article.php');
cInclude('includes', 'functions.api.string.php');
cInclude('includes', 'functions.api.images.php');

if (!is_object($tpl)) {
	$tpl = new Template;
}

$tpl->reset();

$sql = "SELECT
            htmlpath, frontendpath
        FROM
            ".$cfg["tab"]["clients"]." 
        WHERE
            idclient = ".$client." ";

$db->query($sql);

if ($db->next_record()) {
	$htmlpath = $db->f('htmlpath');
	$frontendpath = $db->f('frontendpath');
}

// selected category
$selcat = "CMS_VALUE[1]";
$template = "teaser-aufmacher.html";
// anzahl der zeichen text
$mxtext = 1500;

$limit = "CMS_VALUE[15]";

$cms_sort_direction = "CMS_VALUE[16]";
if ($cms_sort_direction == '') {
	$cms_sort_direction = 'desc';
}

if ("CMS_VALUE[3]" == "sortdate") {
	$order = 'lastmodified';
} else {
	$order = 'artsort';
}

if ("CMS_VALUE[17]" != '') {
	$with_start = true;
} else {
	$with_start = true;
}

$newsheadline = "CMS_VALUE[4]";

$tpl->set('s', 'TITLE', $newsheadline);

if (strlen($selcat) > 0 AND $selcat != '0') {
	$options = array ('idcat' => $selcat, "start" => $with_start, "order" => $order, "direction" => $cms_sort_direction);

	$list = new ArticleCollection($options);

	$count = $list->count;

	if ($count > 0) {
		if (is_numeric($limit) AND strlen($limit) > 0) {
			if ($limit < $list->count) {
				$limit_art = $limit;
			} else {
				$limit_art = $list->count;
			}
		} else {
			$limit_art = $list->count;
		}

		for ($i = 0; $i < $limit_art; $i ++) {

			$article = $list->nextArticle();

			$article_id = $article->getField('idart');

			$teaser_img = '';
			if ($noimg != 'true') {
				$text_html = $article->getContent('CMS_HTML', 1);

				$regEx = "/<img[^>]*?>.*?/i";
				$match = array ();
				preg_match($regEx, $text_html, $match);

				$regEx = "/(src)(=)(['\"]?)([^\"']*)(['\"]?)/i";
				$img = array ();
				preg_match($regEx, $match[0], $img);
				$img_src = preg_split("/\//", $img[0]);

				$img_name = $img_src[count($img_src) - 1];
				$img_name = preg_replace("/\"/", "", $img_name);
				$img_split = preg_split("/\./", $img_name);
				$img_type = $img_split[count($img_split) - 1];

				$img_split2 = preg_split("/_/", $img_split[0]);

				$name = $img_name;

				if (count($img_split2) > 1) {
					$img_x = $img_split2[count($img_split2) - 1];
					$img_y = $img_split2[count($img_split2) - 2];

					if (is_numeric($img_x) AND is_numeric($img_y)) {
						$suffix = "_".$img_x."_".$img_y.".".$img_type;
						$name = preg_replace("/$suffix/", "", $img_name);
						$name = $name.".[a-zA-Z]{3}";
					}
				}

				$img_teaser = '';

				if (strlen($name) > 0) {
					$sql = "SELECT
													*
												FROM
													".$cfg["tab"]["upl"]." 
												WHERE
													filename REGEXP '$name' ";

					//echo "<pre>"; print_r($sql); echo "</pre>";

					$db->query($sql);

					if ($db->next_record()) {
						$filename = $db->f('filename');
						$dirname = $db->f('dirname');
					}

					$img_path = $cfgClient[$client]["upl"]["path"].$dirname.$filename;

					$img_size = "CMS_VALUE[14]";

					$img_teaser = capiImgScale($img_path, $img_size, $img_size, $crop = false, $expand = false, $cacheTime = 1000, $wantHQ = false);
				} // end if strlen

				if (strlen($img_teaser) > 0) {
					$teaser_img = '<img src="'.$img_teaser.'" class="teaser_img">';
				} else {
					$teaser_img = '';
				}

			} // end if noimg 		

			$headline = strip_tags($article->getContent('CMS_HTMLHEAD', 1));
			$headline = str_replace($replace, " ", $headline);

			$subheadline = strip_tags($article->getContent('CMS_HTMLHEAD', 2));
						$subheadline = str_replace($replace, " ", $subheadline);

			$teaserheadline = /*$subheadline."&nbsp;-&nbsp;".*/
			$headline;
			$href = $sess->url("front_content.php?idcat=$selcat&idart=$article_id");
			$teasertext = $article->getField('summary');

			if (strlen(trim($teasertext)) == 0) {
				$teasertext = $article->getContent('CMS_HTML', 1);
				$teasertext2 = $teasertext;
				$teasertext = capiStrTrimAfterWord($teasertext, $mxtext);
				if ($teasertext!=$teasertext2) {
					$teasertext.= '...';
				}
				
			} // end if   			

			$teasertext = $teasertext."&nbsp;";

			$tpl->set('d', 'HEADLINE', $teaserheadline);
			$tpl->set('d', 'SUBHEADLINE', $subheadline);
			$tpl->set('d', 'TEXT', $teasertext);
			$tpl->set('d', 'HREF', $href);
			$tpl->set('d', 'IMG', $teaser_img);
			$tpl->set('d', 'MORE', mi18n("mehr"));

			$tpl->next();

		} // end for

		$tpl->generate('templates/'.$template);

	}
}
?>
xmurrix
Beiträge: 3215
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 4 Mal
Danksagung erhalten: 17 Mal
Kontaktdaten:

Beitrag von xmurrix »

Hallo conti79,

deine Frage ist einige Tage alt, daher weiß ich nicht, ob du eine Lösung hast oder nicht. Falls du noch dafür eine Lösung brauchst, kannst du es folgendermaßen umsetzen.

Die Klasse ArticleCollection bietet eine Möglichkeit, nur den Startarikel zur einer Kategorie zu bekommen. Dafür ist das Modul so zu konfigurieren, dass zunächst alle Artikel zur der Kategorie geladen werden, also alle Artikel inklusive Startartikel.

Dann ist der Modulcode vor und nach der for Schleife so anzupassen, dass nur der Startartikel verarbeitet wird.
Vorher:

Code: Alles auswählen

      ...
      if (is_numeric($limit) AND strlen($limit) > 0) { 
         if ($limit < $list->count) { 
            $limit_art = $limit; 
         } else { 
            $limit_art = $list->count; 
         } 
      } else { 
         $limit_art = $list->count; 
      } 

      for ($i = 0; $i < $limit_art; $i ++) { 

         $article = $list->nextArticle(); 

         $article_id = $article->getField('idart'); 

         $teaser_img = ''; 
      ...
Nachher:

Code: Alles auswählen

      ...
      if (is_numeric($limit) AND strlen($limit) > 0) { 
         if ($limit < $list->count) { 
            $limit_art = $limit; 
         } else { 
            $limit_art = $list->count; 
         } 
      } else { 
         $limit_art = $list->count; 
      } 

      // id de startatikels setzen
      $start_article_id = $list->startArticle();

      for ($i = 0; $i < $limit_art; $i ++) { 

         $article = $list->nextArticle(); 

         $article_id = $article->getField('idart'); 

         if ($article_id != $start_article_id) {
            // aktuelle id ist nicht id des startartikels, zum naechsten schleifendurchlauf
            continue;
         }

         $teaser_img = ''; 
      ...
Die for-Schleife durchläuft dann alle Article-Objekte von ArticleCollection und nur bei einem Startartikel wird der Code in der Schleife ausgeführt.

Du kannst auch die Modulkonfiguration um die zusätzliche Option "nur Startartikel anzeigen" erweitern und die Eingabe/Ausgabe dementsprechend anpassen. Dann hättest du 3 Möglichkeiten:
- Alle Artikel mit Startartikel
- Alle Artikel ohne Startartikel
- Nur Startartikel

Gruß
xmurrix
Gesperrt