Zufallsartikel ausgeben (wie angelegt)

derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Zufallsartikel ausgeben (wie angelegt)

Beitrag von derSteffen »

Hallo,

ich suche ein Zufalls-Artikelmodul!
Die Artikel sollen in das Layout reingeladen werden, wie es bereits beim Teaser, bzw. beim Article Include Input der fall ist. Das heißt diese Artikel sehen recht ackig aus, wenn Sie nichts ins Hauptlayout reingeladen werden. Sowas kann ich ja supergut mit Artikellisten oder besagten Article Include Input machen.

Allerdings soll jetzt aus einem Pool einer bestimmten Kategorie diese kleinen Artikel reingeladen werden.
Problem: Diese Artikel emthalten auch das Modul Bildergalerie und dieses kann ich ja leider nicht mit einer Artikl-Liste generieren, sondern nur Headline, Bild, Bild im Text und Text.

Also soll der Artikel so wie er ist mit Headline, Text und Bildergalerie einfach ausgegeben werden. Aber per Zufall.

Hat dort jemand einen Tipp für mich?

Viel Dank

MfG Steffen
OliverL
Beiträge: 870
Registriert: Do 28. Jun 2007, 09:28
Kontaktdaten:

Re: Zufallsartikel ausgeben (wie angelegt)

Beitrag von OliverL »

Moin moin,

Ich denke nicht das es ein Modul gibt das andere Container included und diese dann auch noch richtig ausgibt.

Aber vielleicht ist das Modul eine Lösung für dich:
Modul: http://www.contenido-wiki.org/wiki/inde ... terleitung
Forum: http://forum.contenido.org/viewtopic.php?f=60&t=22841

mfg OliverL
derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Re: Zufallsartikel ausgeben (wie angelegt)

Beitrag von derSteffen »

Hallo Oliver und vielen Dank für die Antwort.

Doch so ein Modul gibt es noch aus der 4.6.4 welches aber auch unter aktuellen Contenido-Versionen läuft.

Beispiel

Input

Code: Alles auswählen

?><?php
/**
* $RCSfile$
*
* Description: Article Include Input
*
* @version 1.0.0
* @author Willi Man
* @copyright four for business AG <www.4fb.de>
*
* {@internal
* created 2003-12-18
* modified 2004-01-02
* modified 2005-08-05 Andreas Lindner
* }}
*
* $Id$
*/

#Get current settings
$name         = "CMS_VAR[1]";
$cms_idcat    = "CMS_VALUE[1]";
$cms_idcatart = "CMS_VALUE[2]";

#Cat selector
echo buildCategorySelect($name, $cms_idcat);

$bDebug = false;
if ($bDebug)
    echo "<pre>cat $cms_idcat catart $cms_idcatart client $client lang $lang <br>webpath ".$cfgClient[$client]['path']['htmlpath']."</pre>";

echo '<table cellpadding="0" cellspacing="0" border="0">';

#Article selector
echo '
      <tr><td class="text_medium" style="padding:5px">'.mi18n("Artikel wählen").': </td></tr>
      <tr><td class="text_medium" style="padding:5px">';
echo '<select name="CMS_VAR[2]" style="width:240px">';
echo '<option value="" selected>'.i18n("Please choose").'</option>';

if ($cms_idcat != "0" && strlen($cms_idcat) > 0) {
    $sql = "SELECT
                        a.title AS title,
                        b.idcatart AS idcatart
                    FROM
                        ".$cfg["tab"]["art_lang"]." AS a,
                        ".$cfg["tab"]["cat_art"]." AS b
                        WHERE
                        b.idcat = '".$cms_idcat."' AND
                        a.idart = b.idart AND
                        a.idlang = '".$lang."'";

    $db->query($sql);

    while ($db->next_record()) {

        $catartid = $db->f('idcatart');
        $title = $db->f('title');

        if ($cms_idcatart != $catartid) {
            echo '<option value="'.$catartid.'">&nbsp;'.$title.'</option>';
        } else {
            echo '<option selected="selected" value="'.$catartid.'">&nbsp;'.$title.'</option>';
        }

    }
}

echo '</select>&nbsp;<input type="image" src="images/submit.gif">';
echo '</td></tr></table>';
?><?php
Output

Code: Alles auswählen

<?php
/**
* $RCSfile$
*
* Description: Article Include Output
*
* @version 1.0.0
* @author Willi Man
* @copyright four for business AG <www.4fb.de>
*
* {@internal
* created 2003-12-18
* modified 2004-01-02
* modified 2005-08-05 Andreas Lindner
* }}
*
* $Id$
*/

#Get current settings

$cms_idcat    = "CMS_VALUE[1]";
$cms_idcatart = "CMS_VALUE[2]";

$bDebug = false;

#Check data
$cms_idcat    = (int)$cms_idcat;
$cms_idcatart = (int)$cms_idcatart;

if ($bDebug) {
   echo "<pre> cat $cms_idcat catart $cms_idcatart</pre>";
}

if ($cms_idcat >= 0 && $cms_idcatart >= 0)
{
   $bArticleAvailable = false;
   # Get idcat, idcatart, idart and lastmodified from the database
   $sql = "SELECT A.idart AS idart, A.idcat AS idcat, A.createcode AS createcode,
                  A.idcatart AS idcatart, B.lastmodified AS lastmodified
           FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["art_lang"]." AS B
           WHERE
            A.idart = B.idart AND
            B.online = 1 AND ";

   if ($cms_idcatart == 0)
   {
      $sql .= "A.idcat = '" . $cms_idcat . "' ORDER BY B.lastmodified DESC"; # Only idcat specified, get latest article of category
   } else {
      $sql .= "A.idcatart = '" . $cms_idcatart . "'"; # Article specified
   }

   if ($bDebug)
   {
      echo "<pre>";
      print_r($sql);
      echo "</pre>";
   }
   $db->query($sql);

   if ($db->next_record())
   { 
      $bArticleAvailable = true; 
      $iIDCatArt   = $db->f("idcatart"); 
      $iIDCat      = $db->f("idcat"); 
      $iIDArt      = $db->f("idart"); 
      $iCreateCode = $db->f("createcode"); 
      $sModified   = $db->f("lastmodified"); 
   } 

   $db->free();

   # Check if category is online or protected
   $sql = "SELECT public, visible 
           FROM " . $cfg["tab"]["cat_lang"] . " 
           WHERE idcat = '" . $iIDCat . "' AND idlang = '" . $lang . "'";
   
   if ($bDebug)
   {
      echo "<pre>";
      print_r($sql);
      echo "</pre>";
   }
   
   $db->query($sql);
   $db->next_record();

   $iPublic  = $db->f("public");
   $iVisible = $db->f("visible"); 

   $db->free(); 

   # Check if article is online
   # Not needed anymore, as only online articles are used
   /* $sql = "SELECT online FROM " . $cfg["tab"]["art_lang"] . "
           WHERE idart = '" . $cms_artid . "' AND idlang = '" . $lang . "'";

   if ($bDebug)
   {
      echo "<pre>";
      print_r($sql);
      echo "</pre>";
   }
   $db->query($sql);
   $db->next_record();

   $online = $db->f("online");

   $db->free(); */

   # If the article is online and the according category is not protected and visible, include the article
   if ($bArticleAvailable && $iPublic == 1 && $iVisible == 1) 
   { 
      # Check, if code creation is necessary 
      # Note, that createcode may be 0, but no code is available (all code for other languages will be deleted in 
      # front_content, if code for one language will be created). This "bug" may be fixed in future releases. 
      if ($iCreateCode == 0) 
      { 
         $sql = "SELECT count(*) AS CodeCount FROM " . $cfg["tab"]["code"] . " 
                 WHERE idcatart = '" . $iIDCatArt . "' AND idlang = '" . $lang . "'";
         
         if ($bDebug)
         {
            echo "<pre>";
            print_r($sql);
            echo "</pre>";
         }

         $db->query($sql);
         $db->next_record();

         if ($db->f("CodeCount") == 0) {
            $iCreateCode = 1;
         }
         $db->free();
      }

      # Create code if necessary
      if ($iCreateCode == 1)
      {
         cInclude('includes', 'functions.con.php');
         cInclude('includes', 'functions.tpl.php');
         cInclude('includes', 'functions.mod.php');

         conGenerateCode($iIDCat, $iIDArt, $lang, $client);
      } 

      # Get code from database and execute it 
      $sql = "SELECT code FROM " . $cfg["tab"]["code"] . " 
              WHERE idcatart = '" . $iIDCatArt . "' AND idlang = '" . $lang . "'";

      if ($bDebug)
      {
         echo "<pre>"; 
         print_r($sql); 
         echo "</pre>"; 
      } 

      $db->query($sql); 

      if ($db->next_record()) 
      {
         $sCode = stripslashes($db->f("code")); 
         $db->free(); 

         ob_start();
         eval("?>
".$sCode."
<?php
");
         $sCode = ob_get_contents();

         # Clean buffer
         ob_end_clean();

         $iStartPos = strpos($sCode, "<!--start:content-->");
         $iEndPos   = strpos($sCode, "<!--end:content-->");
         $iDiffLen  = $iEndPos - $iStartPos;

         $sCode = substr($sCode, $iStartPos, $iDiffLen);

         echo $sCode;
      } else {
         echo "<!-- ERROR in module Article Include<pre>no code created for article to include!<br>idcat $cms_catid, idart $cms_artid, idlang $lang, idclient $client</pre>-->";
      }
   }
}
?>
Beispiel-Layout:

Code: Alles auswählen

<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<html>
<head>
    <title>Include Text</title>
    <link rel="stylesheet" href="css/styles.css" type="text/css">
</head>
<body>
<!--start:content-->
<div class="box">
    <container id="1000" name="Text" types="Content" mode="fixed" default="Text">Text</container>
</div>

<!--end:content-->
</body>
</html>
Also ähnlich wie der neue Teaser-Typ.

Dann legt man seinen zu inkludieren Artikel mit dem Template an, welches auf diesem Beispiel-Layout basiert und im richtigen Hauptlayout muss man das Modul angelegt haben, dann kann man anhand der Auswahlboxen seinen zu inkludiernden Artikel auswählen. Das klappt mit allem was zwischen <!--start:content--> und <!--end:content--> egal ob Text, Headline, Bildergalerie.

Schön wäre jetzt nur gewesen, wenn man nicht eine Kategorie und Artikel angibt, sondern nur eine Kategorie und dann per Zufall aus dieser kategorie immer einen Artikel anzeigt.

Übrigens das Weiterleitungsmodul ist klasse.

MfG Steffen
OliverL
Beiträge: 870
Registriert: Do 28. Jun 2007, 09:28
Kontaktdaten:

Re: Zufallsartikel ausgeben (wie angelegt)

Beitrag von OliverL »

Poste morgen mal hier rein (damit ich es nicht vergesse :) ).
Dann wurschtel ich die Sachen zusammen.

mfg OliverL
derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Re: Zufallsartikel ausgeben (wie angelegt)

Beitrag von derSteffen »

Hallo OliverL,

ich sollte hier heute noch einmal posten, dass mache ich hiermit :-)

Ich habe gestern selber noch versucht die beiden Module zu kombinieren, aber leider ohne Erfolg.

MfG Steffen
OliverL
Beiträge: 870
Registriert: Do 28. Jun 2007, 09:28
Kontaktdaten:

Re: Zufallsartikel ausgeben (wie angelegt)

Beitrag von OliverL »

siehste! ich habs schon wieder vergessen gehabt :)

so hab mal einen neuen Output-Code für dich.
Die Random Funktion wird aktiviert wenn du in den Konfigurationen den Artikel nicht angibst.
Siehe erste IF: hier muss es eine idcat geben aber es darf keine idcatart geben.

Wurde getestet (s.u.).

OUTPUT:

Code: Alles auswählen

    <?php
    /**
    * $RCSfile$
    *
    * Description: Article Include Output
    *
    * @version 1.0.0
    * @author Willi Man
    * @copyright four for business AG <www.4fb.de>
    *
    * {@internal
    * created 2003-12-18
    * modified 2004-01-02
    * modified 2005-08-05 Andreas Lindner
    * }}
    *
    * $Id$
    */

    #Get current settings

    $cms_idcat    = "CMS_VALUE[1]";
    $cms_idcatart = "CMS_VALUE[2]";
	
	

    $bDebug = false;

    #Check data
    $cms_idcat    = (int)$cms_idcat;
    $cms_idcatart = (int)$cms_idcatart;

	
	/*
	 * RAMDOM FUNCTION - START
	 */
	$randomfunction = false;
	
	if( !$cms_idcatart && $cms_idcat )
	{
		$randomfunction = true;
	
		$sql  = "SELECT  tblData.value        AS headline, "
			 .         "ARTLANG.idart        AS id, "
			 .         "ARTLANG.lastmodified AS lastmodified, "
			 .         "ARTLANG.created      AS created, "
			 .         "ARTLANG.published    AS published, "
			 .         "ARTLANG.artsort      AS artsort, "
			 .         "CATLANG.name         AS category, "
			 .         "ARTLANG.idartlang    AS idartlang, "
			 .         "CATART.idcat         AS idcat, "
			 .         "CATART.idcatart      AS idcatart "
			 . "FROM "
			 .         $cfg["tab"]["cat_art"]."  AS CATART, "
			 .         $cfg["tab"]["art_lang"]." AS ARTLANG, "
			 .         $cfg["tab"]["cat_lang"]." AS CATLANG, "
			 .         $cfg["tab"]["content"]."  AS tblData "
			 . "WHERE "
			 .         "CATART.idcat = ".$cms_idcat." "
			 .     "AND ARTLANG.idlang = '".$lang."' "
			 .     "AND tblData.idartlang = ARTLANG.idartlang "
			 .     "AND CATLANG.idlang = ARTLANG.idlang "
			 .     "AND CATLANG.idcat = CATART.idcat "
			 .     "AND ARTLANG.idart = CATART.idart ";
	   
		$sql .= "AND ARTLANG.online = '1' ";
	
		// Sort by
		$sql .= " ORDER BY RAND() ";
	
		// LIMIT
		$sql .= "LIMIT 0, 1";
	
	   // execute query
		$db->query($sql);
		
		$lCount = $db->num_rows();
		
		if( $lCount ) {
		   $db->next_record();
		   $cms_idcatart = $db->f("idcatart");
		}
	}

	/*
	 * RAMDOM FUNCTION - START
	 */


    if ($bDebug) {
       echo "<pre> cat $cms_idcat catart $cms_idcatart - Random-Function:".($randomfunction ? 'yes' : 'no')."</pre>";
    }

    if ($cms_idcat >= 0 && $cms_idcatart >= 0)
    {
       $bArticleAvailable = false;
       # Get idcat, idcatart, idart and lastmodified from the database
       $sql = "SELECT A.idart AS idart, A.idcat AS idcat, A.createcode AS createcode,
                      A.idcatart AS idcatart, B.lastmodified AS lastmodified
               FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["art_lang"]." AS B
               WHERE
                A.idart = B.idart AND
                B.online = 1 AND ";

       if ($cms_idcatart == 0)
       {
          $sql .= "A.idcat = '" . $cms_idcat . "' ORDER BY B.lastmodified DESC"; # Only idcat specified, get latest article of category
       } else {
          $sql .= "A.idcatart = '" . $cms_idcatart . "'"; # Article specified
       }

       if ($bDebug)
       {
          echo "<pre>";
          print_r($sql);
          echo "</pre>";
       }
       $db->query($sql);

       if ($db->next_record())
       {
          $bArticleAvailable = true;
          $iIDCatArt   = $db->f("idcatart");
          $iIDCat      = $db->f("idcat");
          $iIDArt      = $db->f("idart");
          $iCreateCode = $db->f("createcode");
          $sModified   = $db->f("lastmodified");
       }

       $db->free();

       # Check if category is online or protected
       $sql = "SELECT public, visible
               FROM " . $cfg["tab"]["cat_lang"] . "
               WHERE idcat = '" . $iIDCat . "' AND idlang = '" . $lang . "'";
       
       if ($bDebug)
       {
          echo "<pre>";
          print_r($sql);
          echo "</pre>";
       }
       
       $db->query($sql);
       $db->next_record();

       $iPublic  = $db->f("public");
       $iVisible = $db->f("visible");

       $db->free();

       # Check if article is online
       # Not needed anymore, as only online articles are used
       /* $sql = "SELECT online FROM " . $cfg["tab"]["art_lang"] . "
               WHERE idart = '" . $cms_artid . "' AND idlang = '" . $lang . "'";

       if ($bDebug)
       {
          echo "<pre>";
          print_r($sql);
          echo "</pre>";
       }
       $db->query($sql);
       $db->next_record();

       $online = $db->f("online");

       $db->free(); */

       # If the article is online and the according category is not protected and visible, include the article
       if ($bArticleAvailable && $iPublic == 1 && $iVisible == 1)
       {
          # Check, if code creation is necessary
          # Note, that createcode may be 0, but no code is available (all code for other languages will be deleted in
          # front_content, if code for one language will be created). This "bug" may be fixed in future releases.
          if ($iCreateCode == 0)
          {
             $sql = "SELECT count(*) AS CodeCount FROM " . $cfg["tab"]["code"] . "
                     WHERE idcatart = '" . $iIDCatArt . "' AND idlang = '" . $lang . "'";
             
             if ($bDebug)
             {
                echo "<pre>";
                print_r($sql);
                echo "</pre>";
             }

             $db->query($sql);
             $db->next_record();

             if ($db->f("CodeCount") == 0) {
                $iCreateCode = 1;
             }
             $db->free();
          }

          # Create code if necessary
          if ($iCreateCode == 1)
          {
             cInclude('includes', 'functions.con.php');
             cInclude('includes', 'functions.tpl.php');
             cInclude('includes', 'functions.mod.php');

             conGenerateCode($iIDCat, $iIDArt, $lang, $client);
          }

          # Get code from database and execute it
          $sql = "SELECT code FROM " . $cfg["tab"]["code"] . "
                  WHERE idcatart = '" . $iIDCatArt . "' AND idlang = '" . $lang . "'";

          if ($bDebug)
          {
             echo "<pre>";
             print_r($sql);
             echo "</pre>";
          }

          $db->query($sql);

          if ($db->next_record())
          {
             $sCode = stripslashes($db->f("code"));
             $db->free();

             ob_start();
             eval("?>
    ".$sCode."
    <?php
    ");
             $sCode = ob_get_contents();

             # Clean buffer
             ob_end_clean();

             $iStartPos = strpos($sCode, "<!--start:content-->");
             $iEndPos   = strpos($sCode, "<!--end:content-->");
             $iDiffLen  = $iEndPos - $iStartPos;

             $sCode = substr($sCode, $iStartPos, $iDiffLen);

             echo $sCode;
          } else {
             echo "<!-- ERROR in module Article Include<pre>no code created for article to include!<br>idcat $cms_catid, idart $cms_artid, idlang $lang, idclient $client</pre>-->";
          }
       }
    }
    ?>

mfg OliverL
derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Re: Zufallsartikel ausgeben (wie angelegt)

Beitrag von derSteffen »

Vielen Dank Oliver,

das klappt auf Anhieb wunderbar! Das freut mich wirklich sehr. Vielen lieben Dank. Klasse,

MfG Steffen
OliverL
Beiträge: 870
Registriert: Do 28. Jun 2007, 09:28
Kontaktdaten:

Re: Zufallsartikel ausgeben (wie angelegt)

Beitrag von OliverL »

Das freut mich.

Hab auch gleich den Post verschoben :)

mfg OliverL
derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Re: Zufallsartikel ausgeben (wie angelegt)

Beitrag von derSteffen »

Hallo Oliver,

eine Sache ist mir jetzt doch aufgefallen.

Ich lade ja jetzt per Zufall oder mit direkterAuswahl immer mal eine Bildergalerie rein.
Mit dem normalen "Article Include" klappt dass, aber wenn jetzt per Zufall eine Bildergalerie ausgegeben wird, erscheint folgende Fehlermeldung zusätzlich:
Fatal error: Cannot redeclare ig_getreadablefilesize() (previously declared in C:\Programme\zampp\htdocs\test\cms\front_content.php(985) : eval()'d code(856) : eval()'d code:313) in C:\Programme\zampp\htdocs\test\cms\front_content.php(985) : eval()'d code(1028) : eval()'d code on line 336
Gibt es da irgendwelche Konflikte die das verursachen?

Wenn ich besagte Bildergalerie dirket als Artikel aufrufe kommt keine Fehlermeldung. Wenn ich besagte Bildergalerie über das normale "Article Include"-Modul aufrufe kommt ebenfalls keine Fehlermeldung.

Vielen lieben Dank.

MfG Steffen

PS: Das ist besagt Funktion:

Code: Alles auswählen

function ig_GetReadableFileSize($path) {
 $filesize = filesize($path);
 $unit = "bytes";

 if( $filesize > 1024 ) {
  $filesize = ($filesize / 1024);
  $unit = "kB";
 }
 if( $filesize > 1024 ) {
  $filesize = ($filesize / 1024);
  $unit = "MB";
 }
 if( $filesize > 1024 ) {
  $filesize = ($filesize / 1024);
  $unit = "GB";
 }
 if( $filesize > 1024 ) {
  $filesize = ($filesize / 1024);
  $unit = "TB";
 }

 $filesize = round($filesize, 0);
 return $filesize." ".$unit;
}
OliverL
Beiträge: 870
Registriert: Do 28. Jun 2007, 09:28
Kontaktdaten:

Re: Zufallsartikel ausgeben (wie angelegt)

Beitrag von OliverL »

mmmmhhh ...

würde jetzt quick-n-dirty das sagen: einfach den frolgenden Code um die Funktion

Code: Alles auswählen

if( !function_exists('ig_GetReadableFileSize') ) {
...
}
mfg oli
derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Re: Zufallsartikel ausgeben (wie angelegt)

Beitrag von derSteffen »

Hallo Oliver L,

danke für die Antwort, aber das ging auch nicht. Ich habe mir noch mal mein Modul angeschaut und ich hatte eine Änderung vorgenommen, die hat denn Fehler verursacht. Somit ist das Modul wie du es gepostet hast perfekt und funktionert.

MfG

Steffen
derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Zufallsartikel, Standard-Artikel, ausgewählten ausgeben

Beitrag von derSteffen »

Hier mal kurz mein Modul für die Allgemeinheit!

Mit dem Modul kann man in der Template-Konfiguration einen Artikel im Layout anzeigen lassen (entweder einen Standard-Artikel, einen individuell ausgewählten oder einen Zufallsartikel aus der Kategorie).

Wichtig dabei ist natürlich, das diese kleinen Artikel in etwa nur aus einem einfachen Layout bestehen.

Code: Alles auswählen

<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<html>
<head>
    <title>Include Text</title>
    <link rel="stylesheet" href="css/styles.css" type="text/css">
</head>
<body>
<!--start:content-->
<container id="555" name="TeaserBox flexibel 1" default="" mode="fixed">TeaserBox flexibel 1</container>
<container id="556" name="TeaserBox flexibel 2" default="" mode="fixed">TeaserBox flexibel 2</container>
<container id="557" name="TeaserBox flexibel 3" default="" mode="fixed">TeaserBox flexibel 3</container>
<!--end:content-->
</body>
</html>
Hier kann man dann indivduell seine Container zuweisen.


Und das Modul einfach in sein Haupt-Template packen:
Input

Code: Alles auswählen

?><?php

$Showroomoption="CMS_VALUE[9922]";

echo '<table cellspacing="0" cellpadding="2" border="0" width="100%"><tr><td>'.mi18n("Bitte wählen Sie ob ein bestimmter Showroom angezeigt werden soll <br />(individuelle Auswahl - dann bitte in der Auswahlboxen den Gewünschten auswählen), <br /> ob der Haupt-Showroom oder eine zufälliger Showroom aus dem Pool angezeigt werden soll.").'</td></tr><tr><td>'."\n";
if ($Showroomoption== "zufaellig") {
   echo '<input type="radio" name="CMS_VAR[9922]" value="zufaellig" checked>'.mi18n("Zuf&auml;llig").'&nbsp; <input type="radio" name="CMS_VAR[9922]" value="standard">'.mi18n("Standard").'&nbsp; <input type="radio" name="CMS_VAR[9922]" value="auswahl">'.mi18n("individuelle Auswahl").'';
} else if ($Showroomoption== "standard") {
   echo '<input type="radio" name="CMS_VAR[9922]" value="zufaellig">'.mi18n("Zuf&auml;llig").'&nbsp; <input type="radio" name="CMS_VAR[9922]" value="standard" checked>'.mi18n("Standard").'&nbsp; <input type="radio" name="CMS_VAR[9922]" value="auswahl">'.mi18n("individuelle Auswahl").'';
} else {
   echo '<input type="radio" name="CMS_VAR[9922]" value="zufaellig">'.mi18n("Zuf&auml;llig").'&nbsp; <input type="radio" name="CMS_VAR[9922]" value="standard">'.mi18n("Standard").'&nbsp; <input type="radio" name="CMS_VAR[9922]" value="auswahl" checked>'.mi18n("individuelle Auswahl").'';
}
echo '</td></tr>'."\n";
echo '</table>'."\n";


/**
* $RCSfile$
*/

#Get current settings
$name         = "CMS_VAR[1]";
$cms_idcat    = "CMS_VALUE[1]";
$cms_idcatart = "CMS_VALUE[2]";

#Cat selector
echo buildCategorySelect($name, $cms_idcat);

$bDebug = false;
if ($bDebug)
    echo "<pre>cat $cms_idcat catart $cms_idcatart client $client lang $lang <br>webpath ".$cfgClient[$client]['path']['htmlpath']."</pre>";

echo '<table cellpadding="0" cellspacing="0" border="0">';

#Article selector
echo '
      <tr><td class="text_medium" style="padding:5px">'.mi18n("Artikel wählen").': </td></tr>
      <tr><td class="text_medium" style="padding:5px">';
echo '<select name="CMS_VAR[2]" style="width:240px">';
echo '<option value="" selected>'.i18n("Please choose").'</option>';

if ($cms_idcat != "0" && strlen($cms_idcat) > 0) {
    $sql = "SELECT
                        a.title AS title,
                        b.idcatart AS idcatart
                    FROM
                        ".$cfg["tab"]["art_lang"]." AS a,
                        ".$cfg["tab"]["cat_art"]." AS b
                        WHERE
                        b.idcat = '".$cms_idcat."' AND
                        a.idart = b.idart AND
                        a.idlang = '".$lang."'";

    $db->query($sql);

    while ($db->next_record()) {

        $catartid = $db->f('idcatart');
        $title = $db->f('title');

        if ($cms_idcatart != $catartid) {
            echo '<option value="'.$catartid.'">&nbsp;'.$title.'</option>';
        } else {
            echo '<option selected="selected" value="'.$catartid.'">&nbsp;'.$title.'</option>';
        }

    }
}

echo '</select>&nbsp;<input type="image" src="images/submit.gif">';
echo '</td></tr></table>';
?><?php
Output

Code: Alles auswählen

<?php

$Showroomoption="CMS_VALUE[9922]";

if ($Showroomoption == "zufaellig") {

#Get current settings

$cms_idcat    = "CMS_VALUE[1]";
$cms_idcatart = "";

$bDebug = false;

#Check data
$cms_idcat    = (int)$cms_idcat;
$cms_idcatart = (int)$cms_idcatart;


/*
* RAMDOM FUNCTION - START
*/
$randomfunction = false;

if( !$cms_idcatart && $cms_idcat )
{
  $randomfunction = true;

  $sql  = "SELECT  tblData.value        AS headline, "
      .         "ARTLANG.idart        AS id, "
      .         "ARTLANG.lastmodified AS lastmodified, "
      .         "ARTLANG.created      AS created, "
      .         "ARTLANG.published    AS published, "
      .         "ARTLANG.artsort      AS artsort, "
      .         "CATLANG.name         AS category, "
      .         "ARTLANG.idartlang    AS idartlang, "
      .         "CATART.idcat         AS idcat, "
      .         "CATART.idcatart      AS idcatart "
      . "FROM "
      .         $cfg["tab"]["cat_art"]."  AS CATART, "
      .         $cfg["tab"]["art_lang"]." AS ARTLANG, "
      .         $cfg["tab"]["cat_lang"]." AS CATLANG, "
      .         $cfg["tab"]["content"]."  AS tblData "
      . "WHERE "
      .         "CATART.idcat = ".$cms_idcat." "
      .     "AND ARTLANG.idlang = '".$lang."' "
      .     "AND tblData.idartlang = ARTLANG.idartlang "
      .     "AND CATLANG.idlang = ARTLANG.idlang "
      .     "AND CATLANG.idcat = CATART.idcat "
      .     "AND ARTLANG.idart = CATART.idart ";
  
  $sql .= "AND ARTLANG.online = '1' ";

  // Sort by
  $sql .= " ORDER BY RAND() ";

  // LIMIT
  $sql .= "LIMIT 0, 1";

  // execute query
  $db->query($sql);
  
  $lCount = $db->num_rows();
  
  if( $lCount ) {
     $db->next_record();
     $cms_idcatart = $db->f("idcatart");
  }
}

/*
* RAMDOM FUNCTION - START
*/


if ($bDebug) {
   echo "<pre> cat $cms_idcat catart $cms_idcatart - Random-Function:".($randomfunction ? 'yes' : 'no')."</pre>";
}

if ($cms_idcat >= 0 && $cms_idcatart >= 0)
{
   $bArticleAvailable = false;
   # Get idcat, idcatart, idart and lastmodified from the database
   $sql = "SELECT A.idart AS idart, A.idcat AS idcat, A.createcode AS createcode,
                  A.idcatart AS idcatart, B.lastmodified AS lastmodified
           FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["art_lang"]." AS B
           WHERE
            A.idart = B.idart AND
            B.online = 1 AND ";

   if ($cms_idcatart == 0)
   {
      $sql .= "A.idcat = '" . $cms_idcat . "' ORDER BY B.lastmodified DESC"; # Only idcat specified, get latest article of category
   } else {
      $sql .= "A.idcatart = '" . $cms_idcatart . "'"; # Article specified
   }

   if ($bDebug)
   {
      echo "<pre>";
      print_r($sql);
      echo "</pre>";
   }
   $db->query($sql);

   if ($db->next_record())
   {
      $bArticleAvailable = true;
      $iIDCatArt   = $db->f("idcatart");
      $iIDCat      = $db->f("idcat");
      $iIDArt      = $db->f("idart");
      $iCreateCode = $db->f("createcode");
      $sModified   = $db->f("lastmodified");
   }

   $db->free();

   # Check if category is online or protected
   $sql = "SELECT public, visible
           FROM " . $cfg["tab"]["cat_lang"] . "
           WHERE idcat = '" . $iIDCat . "' AND idlang = '" . $lang . "'";
   
   if ($bDebug)
   {
      echo "<pre>";
      print_r($sql);
      echo "</pre>";
   }
   
   $db->query($sql);
   $db->next_record();

   $iPublic  = $db->f("public");
   $iVisible = $db->f("visible");

   $db->free();

   # Check if article is online
   # Not needed anymore, as only online articles are used
   /* $sql = "SELECT online FROM " . $cfg["tab"]["art_lang"] . "
           WHERE idart = '" . $cms_artid . "' AND idlang = '" . $lang . "'";

   if ($bDebug)
   {
      echo "<pre>";
      print_r($sql);
      echo "</pre>";
   }
   $db->query($sql);
   $db->next_record();

   $online = $db->f("online");

   $db->free(); */

   # If the article is online and the according category is not protected and visible, include the article
   if ($bArticleAvailable && $iPublic == 1 && $iVisible == 1)
   {
      # Check, if code creation is necessary
      # Note, that createcode may be 0, but no code is available (all code for other languages will be deleted in
      # front_content, if code for one language will be created). This "bug" may be fixed in future releases.
      if ($iCreateCode == 0)
      {
         $sql = "SELECT count(*) AS CodeCount FROM " . $cfg["tab"]["code"] . "
                 WHERE idcatart = '" . $iIDCatArt . "' AND idlang = '" . $lang . "'";
         
         if ($bDebug)
         {
            echo "<pre>";
            print_r($sql);
            echo "</pre>";
         }

         $db->query($sql);
         $db->next_record();

         if ($db->f("CodeCount") == 0) {
            $iCreateCode = 1;
         }
         $db->free();
      }

      # Create code if necessary
      if ($iCreateCode == 1)
      {
         cInclude('includes', 'functions.con.php');
         cInclude('includes', 'functions.tpl.php');
         cInclude('includes', 'functions.mod.php');

         conGenerateCode($iIDCat, $iIDArt, $lang, $client);
      }

      # Get code from database and execute it
      $sql = "SELECT code FROM " . $cfg["tab"]["code"] . "
              WHERE idcatart = '" . $iIDCatArt . "' AND idlang = '" . $lang . "'";

      if ($bDebug)
      {
         echo "<pre>";
         print_r($sql);
         echo "</pre>";
      }

      $db->query($sql);

      if ($db->next_record())
      {
         $sCode = stripslashes($db->f("code"));
         $db->free();

         ob_start();
         eval("?>
".$sCode."
<?php
");
         $sCode = ob_get_contents();

         # Clean buffer
         ob_end_clean();

         $iStartPos = strpos($sCode, "<!--start:content-->");
         $iEndPos   = strpos($sCode, "<!--end:content-->");
         $iDiffLen  = $iEndPos - $iStartPos;

         $sCode = substr($sCode, $iStartPos, $iDiffLen);

         echo $sCode;
         
      } else {
         echo "<!-- ERROR in module Article Include<pre>no code created for article to include!<br>idcat $cms_catid, idart $cms_artid, idlang $lang, idclient $client</pre>-->";
      }
   }
}
} 
else if (($Showroomoption == "standard") || ($Showroomoption == "auswahl")) {
if ($Showroomoption == "standard") {
$cms_idcat    = "4";
$cms_idcatart = "2";
} else {
$cms_idcat    = "CMS_VALUE[1]";
$cms_idcatart = "CMS_VALUE[2]";
};

$bDebug = false;

#Check data
$cms_idcat    = (int)$cms_idcat;
$cms_idcatart = (int)$cms_idcatart;

if ($bDebug) {
   echo "<pre> cat $cms_idcat catart $cms_idcatart</pre>";
}

if ($cms_idcat >= 0 && $cms_idcatart >= 0)
{
   $bArticleAvailable = false;
   # Get idcat, idcatart, idart and lastmodified from the database
   $sql = "SELECT A.idart AS idart, A.idcat AS idcat, A.createcode AS createcode,
                  A.idcatart AS idcatart, B.lastmodified AS lastmodified
           FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["art_lang"]." AS B
           WHERE
            A.idart = B.idart AND
            B.online = 1 AND ";

   if ($cms_idcatart == 0)
   {
      $sql .= "A.idcat = '" . $cms_idcat . "' ORDER BY B.lastmodified DESC"; # Only idcat specified, get latest article of category
   } else {
      $sql .= "A.idcatart = '" . $cms_idcatart . "'"; # Article specified
   }

   if ($bDebug)
   {
      echo "<pre>";
      print_r($sql);
      echo "</pre>";
   }
   $db->query($sql);

   if ($db->next_record())
   { 
      $bArticleAvailable = true; 
      $iIDCatArt   = $db->f("idcatart"); 
      $iIDCat      = $db->f("idcat"); 
      $iIDArt      = $db->f("idart"); 
      $iCreateCode = $db->f("createcode"); 
      $sModified   = $db->f("lastmodified"); 
   } 

   $db->free();

   # Check if category is online or protected
   $sql = "SELECT public, visible 
           FROM " . $cfg["tab"]["cat_lang"] . " 
           WHERE idcat = '" . $iIDCat . "' AND idlang = '" . $lang . "'";
   
   if ($bDebug)
   {
      echo "<pre>";
      print_r($sql);
      echo "</pre>";
   }
   
   $db->query($sql);
   $db->next_record();

   $iPublic  = $db->f("public");
   $iVisible = $db->f("visible"); 

   $db->free(); 

   # Check if article is online
   # Not needed anymore, as only online articles are used
   /* $sql = "SELECT online FROM " . $cfg["tab"]["art_lang"] . "
           WHERE idart = '" . $cms_artid . "' AND idlang = '" . $lang . "'";

   if ($bDebug)
   {
      echo "<pre>";
      print_r($sql);
      echo "</pre>";
   }
   $db->query($sql);
   $db->next_record();

   $online = $db->f("online");

   $db->free(); */

   # If the article is online and the according category is not protected and visible, include the article
   if ($bArticleAvailable && $iPublic == 1 && $iVisible == 1) 
   { 
      # Check, if code creation is necessary 
      # Note, that createcode may be 0, but no code is available (all code for other languages will be deleted in 
      # front_content, if code for one language will be created). This "bug" may be fixed in future releases. 
      if ($iCreateCode == 0) 
      { 
         $sql = "SELECT count(*) AS CodeCount FROM " . $cfg["tab"]["code"] . " 
                 WHERE idcatart = '" . $iIDCatArt . "' AND idlang = '" . $lang . "'";
         
         if ($bDebug)
         {
            echo "<pre>";
            print_r($sql);
            echo "</pre>";
         }

         $db->query($sql);
         $db->next_record();

         if ($db->f("CodeCount") == 0) {
            $iCreateCode = 1;
         }
         $db->free();
      }

      # Create code if necessary
      if ($iCreateCode == 1)
      {
         cInclude('includes', 'functions.con.php');
         cInclude('includes', 'functions.tpl.php');
         cInclude('includes', 'functions.mod.php');

         conGenerateCode($iIDCat, $iIDArt, $lang, $client);
      } 

      # Get code from database and execute it 
      $sql = "SELECT code FROM " . $cfg["tab"]["code"] . " 
              WHERE idcatart = '" . $iIDCatArt . "' AND idlang = '" . $lang . "'";

      if ($bDebug)
      {
         echo "<pre>"; 
         print_r($sql); 
         echo "</pre>"; 
      } 

      $db->query($sql); 

      if ($db->next_record()) 
      {
         $sCode = stripslashes($db->f("code")); 
         $db->free(); 

         ob_start();
         eval("?>
".$sCode."
<?php
");
         $sCode = ob_get_contents();

         # Clean buffer
         ob_end_clean();

         $iStartPos = strpos($sCode, "<!--start:content-->");
         $iEndPos   = strpos($sCode, "<!--end:content-->");
         $iDiffLen  = $iEndPos - $iStartPos;

         $sCode = substr($sCode, $iStartPos, $iDiffLen);

         echo  "";
         echo  $sCode ;
         echo  "";
      } else {
         echo "<!-- ERROR in module Article Include<pre>no code created for article to include!<br>idcat $cms_catid, idart $cms_artid, idlang $lang, idclient $client</pre>-->";
      }
   }
}
}
?>
Wichtig nochmal: Im Output findet man folgende zwei Zeilen:

Code: Alles auswählen

$cms_idcat    = "4";
$cms_idcatart = "2";
diese muss man natürlich mit seinem Standard-Artikel ersetzen.

MfG Steffen und Danke noch mal OliverL
derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Re: Zufallsartikel ausgeben (wie angelegt)

Beitrag von derSteffen »

Hallo,

ich würde jetzt noch gerne immer den Link zu den angezeigten Artikel ausgeben lassen.

Wie geht das?

Ich habe versucht in diesem Bereich den Link ausgeben zu lassen:

Code: Alles auswählen

         $sCode = substr($sCode, $iStartPos, $iDiffLen);

         echo "";
         echo  $sCode ;
         echo  "AUSGABE DES LINKS ";
      } else {
         echo "<!-- ERROR in module Article Include<pre>no code created for article to include!<br>idcat $cms_catid, idart $cms_artid, idlang $lang, idclient $client</pre>-->";
      }
Leider kein Erfolg: mit CMS_RAWLINK und CMS_LINK ging es nicht und dann hatte ich noch folgendes versucht, aber das hat auch nicht gefruchtet:

Kann man da irgendwas mit Contenido_Url:: machen oder gibt es da eine einfachere Variante?

Vielen Dank

MfG Steffen
derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Re: Zufallsartikel ausgeben (wie angelegt)

Beitrag von derSteffen »

Also ich habe eine Lösung für die Link-Ausgabe, welche aber wahrscheinlich nicht das Optimalste ist:

Code: Alles auswählen

 
         $sCode = substr($sCode, $iStartPos, $iDiffLen);

         $aParams = array('idcat' => $cms_idcat, 'idart' => $iIDArt, 'client' => $client, 'lang' => $lang);
         
         $link1 = "front_content.php?idart=";
         $link2 = $iIDArt;

         echo "";
         echo  $sCode ;
         echo "<a href=\"$link1$link2\">DER LINK</a> ";

} else {
         echo "<!-- ERROR in module Article Include<pre>no code created for article to include!<br>idcat $cms_catid, idart $cms_artid, idlang $lang, idclient $client</pre>-->";
      }

BZW. geht das auch mit ModeRewrite so:

Code: Alles auswählen

 
         $sCode = substr($sCode, $iStartPos, $iDiffLen);

         $aParams = array('idcat' => $cms_idcat, 'idart' => $iIDArt, 'client' => $client, 'lang' => $lang);     
         $link = Contenido_Url::getInstance()->build($aParams, true);

         echo $sCode;
         echo "<a href=\"$link\" title=\"\">more</a>";
         
      } else {
         echo "<!-- ERROR in module Article Include<pre>no code created for article to include!<br>idcat $cms_catid, idart $cms_artid, idlang $lang, idclient $client</pre>-->";
      }
MfG
derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Re: Zufallsartikel ausgeben (wie angelegt)

Beitrag von derSteffen »

Hallo Oliver,

ich habe doch noch einmal eine Frage.

Ich habe das Gefühl, dass irgendwie nicht alle Artikel in den Pool aufgenommen werden, aus denen dann der Zufallsartikel generiert wird, owohl diese alle in der Kategorie liegen und alle gleich sind (gleiches Template, Inhalte ausgefüllt, alle online, kein Startartikel).
Ist das jetzt wirklich Zufall?! Kann ich im Output was ändern, dass der Zufallsgenerator es irgendwie anderes berechnet? Vielleicht feine oder gröber?

Vielen Dank

MfG Steffen
Zuletzt geändert von derSteffen am Fr 1. Okt 2010, 09:54, insgesamt 2-mal geändert.
Gesperrt