Zum Inhalt springen

Zufälligen Datensatz holen

Erstellt am 15. Oktober 2003 · 7 Antworten · letzte Antwort am 7. Januar 2006

Tags: Frage

computerdoktor ·

Hallo,

ich habe folgendes "Problem":

temp.ao_bannercode = COA 
temp.ao_bannercode { 
    10 = CONTENT 
    10 { 
        stdWrap.required = 1 
        stdWrap.wrap = {$plugin.ao_bannercodes.stdWrap} 
        table = tx_aobannercodes_bannercodes 
        select { 
            pidInList = {$plugin.ao_bannercodes.pid} 
            orderBy = sorting 
        } 
        renderObj = TEXT 
        renderObj.field = bannercode 
        renderObj.wrap = {$plugin.ao_bannercodes.wrap} 
    } 
}

Dieser Code (aus der Extension ao_bannercodes) holt mir alle Banner aus meinen Recods. Soll er aber nicht, ich will immer nur ein Banner. Einen Teil der Aufgabe habe ich bereits gelöst, mit

temp.ao_bannercode = COA 
temp.ao_bannercode { 
    10 = CONTENT 
    10 { 
        stdWrap.required = 1 
        stdWrap.wrap = {$plugin.ao_bannercodes.stdWrap} 
        table = tx_aobannercodes_bannercodes 
        select { 
            pidInList = {$plugin.ao_bannercodes.pid} 
            ############
            max = 1
            ############
            orderBy = sorting 
        } 
        renderObj = TEXT 
        renderObj.field = bannercode 
        renderObj.wrap = {$plugin.ao_bannercodes.wrap} 
    } 
}

bekomme ich nur mehr den ersten Satz.
Ich möchte aber irgendeinen Satz. Ich dachte, dass das mit

begin = random

oder etwas in der Richtung gehen müsste - finde aber dazu nichts in der Doku.

Kann mir wer weiterhelfen?

lg

Herbert

computerdoktor ·

allerdings nicht mit "Bordmittel" TS, sondern mit einer sehr guten Extension, die ich dann nur mehr aufbohren musste: RandomRecords.

Damit kann man nun zusätzlich bestimmen, aus welchen Bannern jeweils ein zufälliges auf der Seite angezeigt werden soll. Zudem kann man Banner damit nun als "normalen" Content anzeigen lassen.

Die Codeänderung muss man in class.tx_jhrandomrecords_pi1.php vornehmen:

<?php

require_once(PATH_tslib."class.tslib_content.php");

class ux_tslib_cObj extends tslib_cObj {

	function RECORDS($conf)	{

		$theValue="";

		$originalRec=$GLOBALS["TSFE"]->currentRecord;	

                                
		if ($originalRec)	{		// If the currentRecord is set, we register, that this record has invoked this function. It's should not be allowed to do this again then!!
			$GLOBALS["TSFE"]->recordRegister[md5($originalRec)]++;
		}

		$conf["source"] = $this->stdWrap($conf["source"],$conf["source."]);
 
		if ($conf["tables"] && $conf["source"]) {
			$allowedTables = $conf["tables"];
                                                $allowedTables.=","."tx_aobannercodes_bannercodes";
			if (is_array($conf["conf."]))	{
				reset($conf["conf."]);
				while(list($k)=each($conf["conf."]))	{
					if (substr($k,-1)!=".")		$allowedTables.=",".$k;
				}
			}

			$loadDB = t3lib_div::makeInstance("FE_loadDBGroup");
			$loadDB->start($conf["source"], $allowedTables);
			reset($loadDB->tableArray);
			while(list($table,)=each($loadDB->tableArray))	{
				if (is_array($GLOBALS["TCA"][$table]))	{
					$loadDB->additionalWhere[$table]=$this->enableFields($table);
				}
			}
			$loadDB->getFromDB();

			reset($loadDB->itemArray);
			$data = $loadDB->results;

			$cObj =t3lib_div::makeInstance("tslib_cObj");
			$cObj->setParent($this->data,$this->currentRecord);
			$this->currentRecordNumber=0;
			$this->currentRecordTotal = count($loadDB->itemArray);

			$random = 0;
			if ($this->stdWrap($this->cObjGet($conf["conf."]["random."], "conf.random"),$conf["conf."]["random."])) {
				mt_srand((double)microtime()*1000000);
				$random = mt_rand(1, $this->currentRecordTotal);
			}

			reset($loadDB->itemArray);
			while(list(,$val)=each($loadDB->itemArray))	{
				$row = $data[$val["table"]][$val["id"]];
				if (!$conf["dontCheckPid"])	{
					$row = $this->checkPid($row["pid"]) ? $row : "";
				}
				if ($row && !$GLOBALS["TSFE"]->recordRegister[md5($val["table"].":".$val["id"])])	{

                                                                                if ($val["table"]=="tx_aobannercodes_bannercodes") {
                                                                                       $renderObjName = "";
                                                                                       $renderObjKey = "";
                                                                                       $renderObjConf = "";
                                                                                } 
                                                                                if (!($val["table"]=="tx_aobannercodes_bannercodes")) {
					       $renderObjName = $conf["conf."][$val["table"]] ? $conf["conf."][$val["table"]] : "<".$val["table"];
					       $renderObjKey = $conf["conf."][$val["table"]] ? "conf.".$val["table"] : "";
					       $renderObjConf = $conf["conf."][$val["table"]."."];
                                                                                }

					$this->currentRecordNumber++;
					$GLOBALS["TSFE"]->currentRecord=$val["table"].":".$val["id"];
					$this->lastChanged($row["tstamp"]);
					$cObj->start($row,$val["table"]);

					if ($random == 0 || $random == $this->currentRecordNumber) {
						if ($GLOBALS["TSFE"]->config["config"]["insertDmailerBoundaries"])	{$theValue.="<!--DMAILER_SECTION_BOUNDARY_".intval($row["module_sys_dmail_category"])."-->";}
                                                                                                
                                                                                                if ($val["table"]=="tx_aobannercodes_bannercodes") {
                                                                                                             $theValue.=$cObj->data[bannercode];
                                                                                                }
                                                                                                if ($val["table"]!=="tx_aobannercodes_bannercodes") {
  						             $theValue.=$cObj->cObjGetSingle($renderObjName, $renderObjConf, $renderObjKey);
                                                                                                }
						if ($GLOBALS["TSFE"]->config["config"]["insertDmailerBoundaries"])	{$theValue.="<!--DMAILER_SECTION_BOUNDARY_END-->";}
					}
				}
			}
		}
		$GLOBALS["TSFE"]->currentRecord=$originalRec;
		return $this->wrap($theValue,$conf["wrap"]);
	}


}



if (defined("TYPO3_MODE") && $TYPO3_CONF_VARS[TYPO3_MODE]["XCLASS"]["ext/jh_random_records/pi1/class.tx_jhrandomrecords_pi1.php"])	{
	include_once($TYPO3_CONF_VARS[TYPO3_MODE]["XCLASS"]["ext/jh_random_records/pi1/class.tx_jhrandomrecords_pi1.php"]);
}

?>

Das anhaken von "Random" im Content nicht vergessen...

lg

Herbert

Mike Maier ·

orderBy = rand()
max = 1

Geht ab mysql 3.23

computerdoktor schrieb

Hallo,

ich habe folgendes "Problem":

temp.ao_bannercode = COA 
temp.ao_bannercode { 
    10 = CONTENT 
    10 { 
        stdWrap.required = 1 
        stdWrap.wrap = {$plugin.ao_bannercodes.stdWrap} 
        table = tx_aobannercodes_bannercodes 
        select { 
            pidInList = {$plugin.ao_bannercodes.pid} 
            orderBy = sorting 
        } 
        renderObj = TEXT 
        renderObj.field = bannercode 
        renderObj.wrap = {$plugin.ao_bannercodes.wrap} 
    } 
}

bekomme ich nur mehr den ersten Satz.
Ich möchte aber irgendeinen Satz. Ich dachte, dass das mit

Herbert

SpeedyBZ ·

hallo,

ich habe mir jetzt mal das "ao_bannercodes" und "jh_random_records" installiert.
dann habe ich in "jh_random_records" die änderungen vorgenommen die computerdoktor gepostet hat.
doch nun stehe ich vor dem problem, das ich den haken "random" nirgends finden kann o.O

funktioniert diese lösung nicht mehr mit typo 3.7.0 ?
oder hat noch jemand eine andere lösung?

das mit dem orderBy = rand() funktioniert zwar, aber mit random_records muss es ja auch irgendwie gehen.

habe auch mal die änderungen von herbert lackner von hier #121586 probiert. aber auch dort kein "random" zu finden.

bin für jede hilfe dankbar.

gruß micha

SpeedyBZ ·

ok.. kommando zurück.. hat sich erledigt..... #giggle# #giggle# #giggle#

hab es jetzt gefunden durch zufall :o

für alle die es vielleicht auch noch suchen bzw. noch suchen werden:

auf die seite gehen wo der werbebanner eingeblendet werden soll -> neuen Datensatz in der Seite einfügen z.Bsp "normaler Text" (nicht anlegen sondern einfügen) 😉 -> dann den Typ auf "Datensatz einfügen" -> entsprechenden Sysordner auswählen bei Objekte -> und dann ist auch unten der Haken zu setzen/finden

so einfach kann es sein wenn man weiß wie #giggle#
könnte natürlich auch sein das es einen einfacheren weg gibt, aber das ist der einzigste den ich bis jetzt gefunden habe

gruß micha

mamo ·

Bei mir klappt das tatsächlich auch. Danke für die Tipps.
Allerdings ergibt sich gleich ein neues Problem: Damit beim neu Laden zufällig ein anderer Datensatz ausgewählt wird, muss ich auf der Seite den Cache deaktivieren. Der ist aber nötig, damit die Indexed Search korrekt läuft. Gibt es eine Möglichkeit, diese Schwanzbeisserei zu umgehen?

Gruss
mamo

RT-Schwabe ·

HAllo

bei mir werden alle Datensätze die in dem SysOrdner liegen angezeigt und nicht nur einer per Zufall ausgewählt. Der Haken ist gesetzt.

Ich habe Version 3.8.1

Ich habe gelesen, dass es da ein Problem bei dieser Version gibt. Wurde das inzwischen gelöst oder hat jemand einen Tipp für mich?

Gruß
Thorsten