---
title: "Gästebuch Limit setzen"
url: "https://www.typo3.net/d/1933-gaestebuch-limit-setzen"
source: "typo3.net"
tags: ["Extensions","Frage"]
created: "2003-04-01"
last_reply: "2005-11-20"
replies: 33
solved: false
page: 1
pages: 1
lang: "de"
---

# Gästebuch Limit setzen

Extensions · 33 Antworten · gestartet 2003-04-01

## Eröffnungsbeitrag

**Eduard Zimmermann** · 2003-04-01 · [Beitrag #1](https://www.typo3.net/d/1933-gaestebuch-limit-setzen/1)

Hallo,
wie ist es möglich ein Gästebuch so zu definieren, dass z.B. die neuesten 50 Einträge auf der ersten Seite angezeigt werden und die älteren auf anderen Seiten verfügbar sind. So wie das bei dem Newsmodul möglich ist (Archiv).

Siehe:
<http://www.before-four.de/24.html>

besten Dank,
Euer Eduard

## Antworten

### [#2](https://www.typo3.net/d/1933-gaestebuch-limit-setzen/2) · Eduard Zimmermann · 2003-04-01

Ein Dankeschön an Marco!

### [#3](https://www.typo3.net/d/1933-gaestebuch-limit-setzen/3) · LineMan · 2003-04-07

Und wie geht das jetzt  #paralyzed#

### [#4](https://www.typo3.net/d/1933-gaestebuch-limit-setzen/4) · brainkiller2000 · 2003-05-02

Hi,

würde mich auch interessieren!

MfG
BK

### [#5](https://www.typo3.net/d/1933-gaestebuch-limit-setzen/5) · Mathias netfielders · 2003-05-02

Wieso programmiert sowas eigentlich keiner?

[Klasse runterladen](http://www.lefaux.com/fileadmin/lefaux/typo3/class.tx_ttguest.zip)
includeLibs.ts_guest = wo die neue datei liegt, potentiell fileadmin
TS Anpassen
plugin.tt_guest.showPerPage.next = weiter
// Text des Links für weiter
plugin.tt_guest.showPerPage.back = zurück
// Text des Links für zurück
plugin.tt_guest.showPerPage = 3
// Wieviele Einträge pro Seite?

Dann noch das HTML Template anpassen:
Dazu gibt es 2 neue Marker, die ihr fröhlich hinsetzen könnt, wo ihr wollt: ###NEXT### (der "weiter" linktext) ###BACK### (der "zurück" linktext)

Grüße und viel Spaß damit

### [#6](https://www.typo3.net/d/1933-gaestebuch-limit-setzen/6) · brainkiller2000 · 2003-05-02

Hi,

DANKE - ich hoffe es klappt :-))

LG
BK

### [#7](https://www.typo3.net/d/1933-gaestebuch-limit-setzen/7) · Jobock · 2003-06-21

Hallo Mathias,
ist zwar schon etwas her - aber vielleicht kannst Du trotzdem nochmal kurz drüber schauen:

Also deine Klasse hab ich mir prima runtergeladen und in fileadmin abgelegt.

Doch wo finde ich den Eintrag includeLibs.ts_guest bzw. wo muss ich die Zeile:
includeLibs.ts_guest = fileadmin/class.tx_ttguest.php einfügen? Oder bin ich völlig auf dem Holzweg?

Und da bin ich ja noch nicht fertig. Es ist mir auch nicht klar, an welcher Stelle die Zeilen
plugin.tt_guest.showPerPage.next = weiter (etc.)
eingefügt werden müssen.

Kannst Du bitte mal die Lampe anmachen, ich steh total im Dunkeln.
Schon mal Danke und Sorry für die Anfängerfragen.

### [#8](https://www.typo3.net/d/1933-gaestebuch-limit-setzen/8) · Jobock · 2003-06-22

Eine Nacht darüber geschlafen und schon ging es wie von alleine. Also hab ich meine Frage zu früh gestellt oder einfach mal wieder zu wenig Pausen gemacht.

Danke für das wunderbare Tool.
Jetzt muss ich nur noch die Marker ###BACK### und ###NEXT### zum laufen bringen. Meine Einträge:

includeLibs.ts_guest = fileadmin/class.tx_ttguest.php
plugin.tt_guest.showPerPage = 10
plugin.tt_guest.showPerPage.next = weiter
plugin.tt_guest.showPerPage.back = zurück

erzeugen zwar die Beschränkung auf 10 Einträge. Die Marker erscheinen im Browser aber immer noch als ###NEXT### etc.

### [#9](https://www.typo3.net/d/1933-gaestebuch-limit-setzen/9) · Renko · 2003-07-07

Erweiterung der abgeänderten Klasse von Mathias.
Bei der abgeänderten Klasse von Mathias gab es noch das Problem, das die gelöschten bzw. nicht sichtbaren Seiten mitgezählt wurden , somit wurde ein Next Button angezeigt obwohl die nächste Seite eigentlich leer ist.

Irene Hoeppner hat eine kleine Änderung gemacht, sodas nun die gelöschten Seiten nicht mehr mitgezählt werden.

Hier der Code

###### MATHIAS CODES
		//debug($conf["showPerPage."]);
		$start = t3lib_div::GPVar("start");
		$start = (isset($start)) ? abs((int)$start) : 0;
		$limit = $conf["showPerPage"];                     // Datensätze pro Ausgabeseite

		##### IRENE'S CODES
                $this->init($this->cObj->enableFields("tt_guest")); // Variable enableFields belegen für die folgende sql-Abfrage
       	        //echo $this->enableFields;
	        ##### IRENE'S CODES ende

$resultID = mysql(TYPO3_db,"SELECT COUNT(uid) FROM tt_guest WHERE pid IN (".$pid.")".$this->enableFields);
		$totalX = mysql_fetch_array($resultID);
		$total = $totalX[0];

//echo $total;

$start    = ($start >= $total) ? $total - $limit : $start;

##### IRENE'S CODES
    		$typeStr = $GLOBALS["type"] > 0 ? "&type=".$GLOBALS["type"] :"";  // wird in die URL eingefügt, damits auch mit frames tut
		##### IRENE'S CODES ende

### [#10](https://www.typo3.net/d/1933-gaestebuch-limit-setzen/10) · s.​sach · 2003-07-26

> **Jobock schrieb:**
>
> Jetzt muss ich nur noch die Marker ###BACK### und ###NEXT### zum laufen bringen. Meine Einträge:

Diese Einträge habe ich in das "guest_template1.tmpl" eingefügt. So funktionierts bei mir  ;)

Gruß
Steffen

### [#11](https://www.typo3.net/d/1933-gaestebuch-limit-setzen/11) · deraxel · 2003-08-07

Hat soweit geklappt. Nur bei dem "Next"-Marker wird die ID leider nicht eingesetzt. Komisch - beim "Back"-Marker geht's. Hat das schonmal wer erlebt?
Ich habe jetzt die ID meiner Gästebuchseite direkt im PHP-Code eingetragen.
Aber warum funzt das bei mir nicht so wie Mathias und Irene es geschrieben haben?

Hat wer 'ne Idee?

### [#12](https://www.typo3.net/d/1933-gaestebuch-limit-setzen/12) · tdorn · 2003-08-16

Hallo,

ich scheitere schon daran, die PHP-Datei hochzuladen. Es erscheint immer eine Meldung, die sagt, Dateien mit der Endung bzw. dem Typ php sind in fileadmin etc. nicht erlaubt.

Thorsten

### [#13](https://www.typo3.net/d/1933-gaestebuch-limit-setzen/13) · lingamyoni.​de · 2003-09-12

> **deraxel schrieb:**
>
> Nur bei dem "Next"-Marker wird die ID leider nicht eingesetzt.

das würde mich auch interessieren warum im quell-code plöztlich ein $GLOBALS["id"] auftaucht?!

benutze ich die klasse von mathias, werden bei mir gar keine id's im link gesetzt (weder bei back, noch bei next).

werden die entsprehchenden stellen durch ein $config["pid_list"] ersetzt, funktioniert's, solange nicht mehrere pid's im setup definiert werden..

hat jemad einen eleganteren vorschlag?

### [#14](https://www.typo3.net/d/1933-gaestebuch-limit-setzen/14) · magengeschwür · 2003-11-26

ARRRGHHH..HILFE!

Ich hab die Originalklasse durch die von Mathias inkl. der Anpassungen von Iris ausgetauscht. Leiderr erhalte ich folgende Nachricht:

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:htdocs	ypo3	ypo3ext	t_guestpiclass.tx_ttguest.php on line 258

Ich kann nicht wirklich erkennen, was das PRoblem ist?

Hat sonst niemand eine Fehlermeldung?
Außerdem verschwinden die aktuellen einteäge aus dem Gästebuch....?

### [#15](https://www.typo3.net/d/1933-gaestebuch-limit-setzen/15) · magengeschwür · 2003-11-28

Wie es eben so ist, gestern ging garnichts, heute auf anhieb alles. Manche dinge brauchen halt etwas länger:

Vielen Dan an Alle, ihr habt mich glücklich gemacht  :p  :p  :p  :p  :p  :p

Villeicht als Hilfe für diejenigen, die auch noch schwirigkeiten hatten:

Die Klasse von Mathias gemäß Iris anpassen (copy, delete, paste)
danach die Klasse umbenennen in *.inc statt *.php. Mit Typo3 in den Fileadmin-Ordner uploaden.

danach hab ich im Setup meines Templates diese Zeilen eingefügt:

includeLibs.ts_guest = fileadmin/templates/class.tx_ttguest.inc
plugin.tt_guest.showPerPage = 10
plugin.tt_guest.showPerPage.next = weiter
plugin.tt_guest.showPerPage.back = zurück

Nun noch das Guestbook-Template anpassen:

Die ###Back### und ###Next### Marker hab ich hinter diesen TAGs
<!-- ###POST_1### end-->
<!-- ###CONTENT###  end -->
und vor diesem Tag
<!-- ###TEMPLATE_GUESTBOOK### end -->

platziert. Fertig es läuft prima.
Thats it...
ich brauch jetzt keine Tabletten mehr  ;)
magengeschwür

### [#16](https://www.typo3.net/d/1933-gaestebuch-limit-setzen/16) · derhansen · 2004-04-12

Huch, nun kann man die Klasse nicht mehr runterladen. Hat die vielleicht noch jemand rumliegen und kann sie hier posten, damit auch alle was davon haben. Danke!

Gruß,
derHansen

### [#17](https://www.typo3.net/d/1933-gaestebuch-limit-setzen/17) · Renko · 2004-04-12

habe glaube ich noch den Code von Mathias
hier der Code ohne ergänzung von Irene

basiert aber noch auf alter guestbook extension

<?php
/***************************************************************
*  Copyright notice
*
*  (c) 1999-2003 Kasper Skårhøj (kasper@typo3.com)
*  All rights reserved
*
*  This script is part of the Typo3 project. The Typo3 project is
*  free software; you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
*  the Free Software Foundation; either version 2 of the License, or
*  (at your option) any later version.
*
*  The GNU General Public License can be found at
*  <http://www.gnu.org/copyleft/gpl.html>.
*  A copy is found in the textfile GPL.txt and important notices to the license
*  from the author is found in LICENSE.txt distributed with these scripts.
*
*
*  This script is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU General Public License for more details.
*
*  This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
/**
 * guestLib.inc
 *
 * Creates a guestbook/comment-list.
 *
 * TypoScript config:
 * - See static_template "plugin.tt_guest"
 * - See TS_ref.pdf
 *
 * Other resources:
 * 'guest_submit.inc' is used for submission of the guest book entries to the database. This is done through the FEData TypoScript object. See the static_template 'plugin.tt_guest' for an example of how to set this up.
 *
 * @author	Kasper Skårhøj <kasper@typo3.com>
 */

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

class tx_ttguest extends tslib_pibase {
	var $cObj;		// The backReference to the mother cObj object set at call time

var $enableFields ="";		// The enablefields of the tt_board table.
	var $dontParseContent=0;

	var $orig_templateCode="";

/**
	 * Main guestbook function.
	 */
	function main_guestbook($content,$conf)	{
		$content="";

		// *************************************
		// *** getting configuration values:
		// *************************************
		$alternativeLayouts = intval($conf["alternatingLayouts"])>0 ? intval($conf["alternatingLayouts"]) : 2;

			// pid_list is the pid/list of pids from where to fetch the guest items.
		$config["pid_list"] = trim($this->cObj->stdWrap($conf["pid_list"],$conf["pid_list."]));
		$config["pid_list"] = $config["pid_list"] ? implode(t3lib_div::intExplode(",",$config["pid_list"]),",") : $GLOBALS["TSFE"]->id;
		list($pid) = explode(",",$config["pid_list"]);

			// "CODE" decides what is rendered:
		$config["code"] = $this->cObj->stdWrap($conf["code"],$conf["code."]);

			// template is read.
		$this->orig_templateCode = $this->cObj->fileResource($conf["templateFile"]);

// globally substituted markers, fonts and colors.
		$splitMark = md5(microtime());
		$globalMarkerArray=array();
		list($globalMarkerArray["###GW1B###"],$globalMarkerArray["###GW1E###"]) = explode($splitMark,$this->cObj->stdWrap($splitMark,$conf["wrap1."]));
		list($globalMarkerArray["###GW2B###"],$globalMarkerArray["###GW2E###"]) = explode($splitMark,$this->cObj->stdWrap($splitMark,$conf["wrap2."]));
		$globalMarkerArray["###GC1###"] = $this->cObj->stdWrap($conf["color1"],$conf["color1."]);
		$globalMarkerArray["###GC2###"] = $this->cObj->stdWrap($conf["color2"],$conf["color2."]);
		$globalMarkerArray["###GC3###"] = $this->cObj->stdWrap($conf["color3"],$conf["color3."]);
		###### MATHIAS CODES
		//debug($conf["showPerPage."]);
		$start = t3lib_div::GPVar("start");
		$start = (isset($start)) ? abs((int)$start) : 0;
		$limit = $conf["showPerPage"];                     // Datensätze pro Ausgabeseite

$this->init($this->cObj->enableFields("tt_guest"));  // has to be done here already (Irene)
		$resultID = mysql(TYPO3_db,"SELECT COUNT(uid) FROM tt_guest WHERE pid IN (".$pid.")".$this->enableFields);
		$totalX = mysql_fetch_array($resultID);
		$total = $totalX[0];

//echo $total;

$start    = ($start >= $total) ? $total - $limit : $start;

if ($start > 0) {
			$newStart = ($start - $limit < 0) ? 0 : ($start-$limit);
			$globalMarkerArray["###BACK###"] = "<a href=".$PHP_SELF."?start=".$newStart."&id=".$GLOBALS["id"]."&no_cache=1>".$conf["showPerPage."]["back"]."</a>";
		} else {
			$globalMarkerArray["###BACK###"] = " ";
		}

if ($start + $limit < $total) {
			$newStart = $start + $limit;
			$globalMarkerArray["###NEXT###"] = " <a href=".$PHP_SELF."?start=".$newStart."&id=".$GLOBALS["id"]."&no_cache=1>".$conf["showPerPage."]["next"]."</a>";
		} else {
			$globalMarkerArray["###NEXT###"] = " ";
		}

// Substitute Global Marker Array
		$this->orig_templateCode= $this->cObj->substituteMarkerArray($this->orig_templateCode, $globalMarkerArray);

// If the current record should be displayed.
		$config["displayCurrentRecord"] = $conf["displayCurrentRecord"];
		if ($config["displayCurrentRecord"])	{
			$config["code"]="GUESTBOOK";
		}

// *************************************
		// *** doing the things...:
		// *************************************
//		$this->init($this->cObj->enableFields("tt_guest"));	// already done some lines above
		$this->dontParseContent = $conf["dontParseContent"];
		$cObj =t3lib_div::makeInstance("tslib_cObj");	// Initiate new cObj, because we're loading the data-array

		$codes=t3lib_div::trimExplode(",", $config["code"]?$config["code"]:$conf["defaultCode"],1);
		if (!count($codes))	$codes=array("");
		while(list(,$theCode)=each($codes))	{
			$theCode = (string)strtoupper(trim($theCode));
			switch($theCode)	{
				case "POSTFORM":
					$lConf = $conf["postform."];
					$content.=$cObj->FORM($lConf);
				break;
				case "GUESTBOOK":
					$lConf=$conf;

					if (!$lConf["subpartMarker"])	{
						$lConf["subpartMarker"]="TEMPLATE_GUESTBOOK";
					}

						// Getting template subpart from file.
					$templateCode = $cObj->getSubpart($this->orig_templateCode, "###".$lConf["subpartMarker"]."###");
					if ($templateCode)	{
							// Getting the specific parts of the template
						$postHeader=$this->getLayouts($templateCode,$alternativeLayouts,"POST");

// Fetching the guest book item(s) to display:
						if ($config["displayCurrentRecord"])	{
							$recentPosts=array();
							$recentPosts[] = $this->cObj->data;
						} else {

							//$content.= $cObj->substituteSubpart($templateCode,"###CONTENT###",$subpartContent) ;
							//$start = 0;
							$recentPosts = $this->getItems($pid,$limit,$start);
						}
							// Traverse the items and display them:
						reset($recentPosts);
						$c_post=0;
						$subpartContent="";
						while(list(,$recentPost)=each($recentPosts))	{
								// Passing data through stdWrap and into the markerArray
							$cObj->start($recentPost);		// Set this->data to the current record tt_guest record.
							$markerArray=array();
							$markerArray["###POST_TITLE###"] = $cObj->stdWrap($this->formatStr($recentPost["title"]), $conf["title_stdWrap."]);
							$markerArray["###POST_CONTENT###"] = $cObj->stdWrap($this->formatStr($recentPost["note"]), $conf["note_stdWrap."]);
							$markerArray["###POST_AUTHOR###"] = $cObj->stdWrap($this->formatStr($recentPost["cr_name"]), $conf["author_stdWrap."]);
							$markerArray["###POST_EMAIL###"] = $cObj->stdWrap($this->formatStr($recentPost["cr_email"]), $conf["email_stdWrap."]);
							$markerArray["###POST_WWW###"] = $cObj->stdWrap($this->formatStr($recentPost["www"]), $conf["www_stdWrap."]);
							$markerArray["###POST_DATE###"] = $cObj->stdWrap($recentPost["crdate"],$conf["date_stdWrap."]);
							$markerArray["###POST_TIME###"] = $cObj->stdWrap($recentPost["crdate"],$conf["time_stdWrap."]);
							$markerArray["###POST_AGE###"] = $cObj->stdWrap($recentPost["crdate"],$conf["age_stdWrap."]);
								// Substitute the markerArray in the proper template code (POST subparts, alternating)
							$out=$postHeader[$c_post%count($postHeader)];
							$c_post++;
							$subpartContent.=$cObj->substituteMarkerArrayCached($out,$markerArray);
						}

							// Total Substitution:
						if ($lConf["requireRecords"] && !count($recentPosts))	{
							$content.= "";
						} else {
							$content.= $cObj->substituteSubpart($templateCode,"###CONTENT###",$subpartContent) ;
						}
					} else {
						debug("No template code for the subpart maker ###".$lConf["subpartMarker"]."###");
					}

				break;
				default:
					$langKey = strtoupper($GLOBALS["TSFE"]->config["config"]["language"]);
					$helpTemplate = $this->cObj->fileResource("EXT:tt_guest/pi/guest_help.tmpl");

// Get language version
					$helpTemplate_lang="";
					if ($langKey)	{$helpTemplate_lang = $this->cObj->getSubpart($helpTemplate,"###TEMPLATE_".$langKey."###");}
					$helpTemplate = $helpTemplate_lang ? $helpTemplate_lang : $this->cObj->getSubpart($helpTemplate,"###TEMPLATE_DEFAULT###");

// Markers and substitution:
					$markerArray["###CODE###"] = $theCode;
					$content.=$this->cObj->substituteMarkerArray($helpTemplate,$markerArray);
				break;
			}
		}
		return $content;
	}

	/**
	 * Main guestbook function.
	 */
	function init($enableFields)	{
		$this->enableFields = $enableFields;
	}

/**
	 * Main guestbook function.
	 */
	function getLayouts($templateCode,$alternativeLayouts,$marker)	{
		$out=array();
		for($a=0;$a<$alternativeLayouts;$a++)	{
			$m= "###".$marker.($a?"_".$a:"")."###";
			if(strstr($templateCode,$m))	{
				$out[]=$GLOBALS["TSFE"]->cObj->getSubpart($templateCode, $m);
			} else {
				break;
			}
		}
		return $out;
	}

/**
	 * Main guestbook function.
	 */
	function getItems($pid,$limit,$start)	{
		### BLÄTTERACTION
		$query = "SELECT * FROM tt_guest WHERE pid IN (".$pid.")".$this->enableFields." ORDER BY crdate DESC LIMIT ".$start.",".$limit;
		$res = mysql(TYPO3_db,$query);
		//debug($query);
		$out=array();
		while($row = mysql_fetch_assoc($res))	{
			$out[]=$row;
		}
		return $out;
	}

/**
	 * Main guestbook function.
	 */
	function formatStr($str)	{
		if (!$this->dontParseContent)	{
			return nl2br(htmlspecialchars($str));
		} else {
			return $str;
		}
	}
}

if (defined("TYPO3_MODE") && $TYPO3_CONF_VARS[TYPO3_MODE]["XCLASS"]["ext/tt_guest/pi/class.tx_ttguest.php"])	{
	include_once($TYPO3_CONF_VARS[TYPO3_MODE]["XCLASS"]["ext/tt_guest/pi/class.tx_ttguest.php"]);
}

?>

### [#18](https://www.typo3.net/d/1933-gaestebuch-limit-setzen/18) · derhansen · 2004-04-13

Danke!

### [#19](https://www.typo3.net/d/1933-gaestebuch-limit-setzen/19) · frontal · 2004-05-18

die marker müssen ###BACK### ###NEXT###
und nicht ###Back### und ###Next### heissen.

bei mir gings sonst nicht.

### [#20](https://www.typo3.net/d/1933-gaestebuch-limit-setzen/20) · stefan72 · 2004-06-25

Hallo T3ler,

Ich versuche diese Funktion ebenfalls hinzubekommen, leider immer noch mit Error:

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /typo3_src-3.5.0/typo3/ext/tt_guest/pi/class.tx_ttguest.php on line 246

Habe die Anleitung gemäss T3 User Forum (DE) FAQ auf typo3.org gemacht:

**********************

Patch für tt_guest von der folgenden Location herunterladen (vielen Dank noch mal
(ich hoffe der Link bleibt erhalten, ansonsten mailt mir)

<http://www.lefaux.com/fileadmin/lefaux/typo3/class.tx_ttguest.zip>

entpacken und ins Verzeichnis ../ext/tt_guest/pi/ entpacken, vorhandene datei ersetzen

Im Template muss im Bereich zwischen ###TEMPLATE begin und dem
Bereich ###CONTENT begin

2 Marker ###BACK### und ###NEXT### eingefügt werden, das ist wenn das standarttemplate verwendet wird die datei ../ext/tt_guest/pi/guest_template1.tmpl

im setup müssen folgende Zeilen eingefügt werden

plugin.tt_guest.showPerPage = <anzahl der anzuzeigenden Einträge>
plugin.tt_guest.showPerPage.next = <Text der für die nächsten Einträge dastehen soll>
plugin.tt_guest.showPerPage.back = <Text der für die vorherigen Einträge dastehen soll>

********************

Auch alle anderen Varianten von oben gemacht.... Kein Erfolg.

Benutze noch Version 3.5 und die guestbook Version 1.05? Ob es wohl daran liegt?

Jede Hilfe ist sehr geschätzt!

Stefan

### [#21](https://www.typo3.net/d/1933-gaestebuch-limit-setzen/21) · stefan72 · 2004-06-28

Hallo T3ler,

Mit der Funktion

if(!$res) die(mysql_error ());

konnte ich folgendes bewirken:

You have an error in your SQL syntax near '' at line 1

Dies erscheint als output. Ich erkenne aber immer noch nicht das Problem. Mag es sogar an der PHP version liegen oder tatsächlich beim SQL syntax?
Jegliche Hilfe ist sehr willkommen.

Grüsse
Stefan

### [#22](https://www.typo3.net/d/1933-gaestebuch-limit-setzen/22) · yip · 2004-07-23

Kleine Ergänzung für den, der Frames benutzt und bei dem die vorherigen Änderungen nicht zum Erfolg führten.

Ich musste, damit auch der Seitentyp (&type) übergeben wird, folgende zwei Zeilen ändern.

```php
$globalMarkerArray["###BACK###"] = "<a href=".$PHP_SELF."?start=".$newStart."&id=".$GLOBALS["id"]."&no_cache=1>".$conf["showPerPage."]["back"]."</a>";
```

ersetzen durch

```php
$globalMarkerArray["###BACK###"] = "<a href=".$PHP_SELF."?start=".$newStart.$typeStr."&id=".$GLOBALS["id"]."&no_cache=1>".$conf["showPerPage."]["back"]."</a>";
```

und

```php
$globalMarkerArray["###NEXT###"] = " <a href=".$PHP_SELF."?start=".$newStart."&id=".$GLOBALS["id"]."&no_cache=1>".$conf["showPerPage."]["next"]."</a>";
```

ersetzen durch

```php
$globalMarkerArray["###NEXT###"] = " <a href=".$PHP_SELF."?start=".$newStart.$typeStr."&id=".$GLOBALS["id"]."&no_cache=1>".$conf["showPerPage."]["next"]."</a>";
```

yip

### [#23](https://www.typo3.net/d/1933-gaestebuch-limit-setzen/23) · yip · 2004-07-23

Der Code incl. der Ergänzung von Irene.
Funktioniert bei mir unter Typo 3.5 mit und ohne Frames.

```php
<?php
/***************************************************************
*  Copyright notice
*  
*  (c) 1999-2003 Kasper Skårhøj (kasper@typo3.com)
*  All rights reserved
*
*  This script is part of the Typo3 project. The Typo3 project is 
*  free software; you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
*  the Free Software Foundation; either version 2 of the License, or
*  (at your option) any later version.
* 
*  The GNU General Public License can be found at
*  http://www.gnu.org/copyleft/gpl.html.
*  A copy is found in the textfile GPL.txt and important notices to the license 
*  from the author is found in LICENSE.txt distributed with these scripts.
*
* 
*  This script is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU General Public License for more details.
*
*  This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
/**
 * guestLib.inc
 * 
 * Creates a guestbook/comment-list.
 * 
 * TypoScript config:
 * - See static_template "plugin.tt_guest"
 * - See TS_ref.pdf
 *
 * Other resources:
 * 'guest_submit.inc' is used for submission of the guest book entries to the database. This is done through the FEData TypoScript object. See the static_template 'plugin.tt_guest' for an example of how to set this up.
 *
 * @author	Kasper Skårhøj <kasper@typo3.com>
 */


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

class tx_ttguest extends tslib_pibase {
	var $cObj;		// The backReference to the mother cObj object set at call time

	var $enableFields ="";		// The enablefields of the tt_board table.
	var $dontParseContent=0;	
	
	var $orig_templateCode="";

	/**
	 * Main guestbook function.
	 */
	function main_guestbook($content,$conf)	{
		$content="";
		
		// *************************************
		// *** getting configuration values:
		// *************************************
		$alternativeLayouts = intval($conf["alternatingLayouts"])>0 ? intval($conf["alternatingLayouts"]) : 2;
			
			// pid_list is the pid/list of pids from where to fetch the guest items.
		$config["pid_list"] = trim($this->cObj->stdWrap($conf["pid_list"],$conf["pid_list."]));
		$config["pid_list"] = $config["pid_list"] ? implode(t3lib_div::intExplode(",",$config["pid_list"]),",") : $GLOBALS["TSFE"]->id;
		list($pid) = explode(",",$config["pid_list"]);
	
			// "CODE" decides what is rendered:
		$config["code"] = $this->cObj->stdWrap($conf["code"],$conf["code."]);
	
			// template is read.
		$this->orig_templateCode = $this->cObj->fileResource($conf["templateFile"]);
	

			// globally substituted markers, fonts and colors.	
		$splitMark = md5(microtime());
		$globalMarkerArray=array();
		list($globalMarkerArray["###GW1B###"],$globalMarkerArray["###GW1E###"]) = explode($splitMark,$this->cObj->stdWrap($splitMark,$conf["wrap1."]));
		list($globalMarkerArray["###GW2B###"],$globalMarkerArray["###GW2E###"]) = explode($splitMark,$this->cObj->stdWrap($splitMark,$conf["wrap2."]));
		$globalMarkerArray["###GC1###"] = $this->cObj->stdWrap($conf["color1"],$conf["color1."]);
		$globalMarkerArray["###GC2###"] = $this->cObj->stdWrap($conf["color2"],$conf["color2."]);
		$globalMarkerArray["###GC3###"] = $this->cObj->stdWrap($conf["color3"],$conf["color3."]);
//		###### MATHIAS CODES
//		//debug($conf["showPerPage."]);
//		$start = t3lib_div::GPVar("start");
//		$start = (isset($start)) ? abs((int)$start) : 0;
//		$limit = $conf["showPerPage"];                     // Datensätze pro Ausgabeseite
//
//		$this->init($this->cObj->enableFields("tt_guest"));  // has to be done here already (Irene)
//		$resultID = mysql(TYPO3_db,"SELECT COUNT(uid) FROM tt_guest WHERE pid IN (".$pid.")".$this->enableFields);
//		$totalX = mysql_fetch_array($resultID);
//		$total = $totalX[0];
//
//		//echo $total;
//
//		$start    = ($start >= $total) ? $total - $limit : $start;


###### MATHIAS CODES 
//debug($conf["showPerPage."]); 
$start = t3lib_div::GPVar("start"); 
$start = (isset($start)) ? abs((int)$start) : 0; 
$limit = $conf["showPerPage"]; // Datensätze pro Ausgabeseite 

##### IRENE'S CODES 
$this->init($this->cObj->enableFields("tt_guest")); // Variable enableFields belegen für die folgende sql-Abfrage 
//echo $this->enableFields; 
##### IRENE'S CODES ende 

$resultID = mysql(TYPO3_db,"SELECT COUNT(uid) FROM tt_guest WHERE pid IN (".$pid.")".$this->enableFields); 
$totalX = mysql_fetch_array($resultID); 
$total = $totalX[0]; 

		//echo $total;

$start = ($start >= $total) ? $total - $limit : $start; 

##### IRENE'S CODES 
$typeStr = $GLOBALS["type"] > 0 ? "&type=".$GLOBALS["type"] :""; // wird in die URL eingefügt, damits auch mit frames tut 
##### IRENE'S CODES ende

		if ($start > 0) {
			$newStart = ($start - $limit < 0) ? 0 : ($start-$limit);
			$globalMarkerArray["###BACK###"] = "<a href=".$PHP_SELF."?start=".$newStart.$typeStr."&id=".$GLOBALS["id"]."&no_cache=1>".$conf["showPerPage."]["back"]."</a>";
		} else {
			$globalMarkerArray["###BACK###"] = " ";
		}
		

		if ($start + $limit < $total) {
			$newStart = $start + $limit;
			$globalMarkerArray["###NEXT###"] = " <a href=".$PHP_SELF."?start=".$newStart.$typeStr."&id=".$GLOBALS["id"]."&no_cache=1>".$conf["showPerPage."]["next"]."</a>";
		} else {
			$globalMarkerArray["###NEXT###"] = " ";
		}

			// Substitute Global Marker Array
		$this->orig_templateCode= $this->cObj->substituteMarkerArray($this->orig_templateCode, $globalMarkerArray);

			// If the current record should be displayed.
		$config["displayCurrentRecord"] = $conf["displayCurrentRecord"];
		if ($config["displayCurrentRecord"])	{
			$config["code"]="GUESTBOOK";
		}
			

		// *************************************
		// *** doing the things...:
		// *************************************
//		$this->init($this->cObj->enableFields("tt_guest"));	// already done some lines above
		$this->dontParseContent = $conf["dontParseContent"];
		$cObj =t3lib_div::makeInstance("tslib_cObj");	// Initiate new cObj, because we're loading the data-array
		
		$codes=t3lib_div::trimExplode(",", $config["code"]?$config["code"]:$conf["defaultCode"],1);
		if (!count($codes))	$codes=array("");
		while(list(,$theCode)=each($codes))	{
			$theCode = (string)strtoupper(trim($theCode));
			switch($theCode)	{
				case "POSTFORM":
					$lConf = $conf["postform."];
					$content.=$cObj->FORM($lConf);
				break;
				case "GUESTBOOK":
					$lConf=$conf;
				
					if (!$lConf["subpartMarker"])	{
						$lConf["subpartMarker"]="TEMPLATE_GUESTBOOK";
					}
	
						// Getting template subpart from file.
					$templateCode = $cObj->getSubpart($this->orig_templateCode, "###".$lConf["subpartMarker"]."###");
					if ($templateCode)	{
							// Getting the specific parts of the template
						$postHeader=$this->getLayouts($templateCode,$alternativeLayouts,"POST");

							// Fetching the guest book item(s) to display:
						if ($config["displayCurrentRecord"])	{
							$recentPosts=array();
							$recentPosts[] = $this->cObj->data;	
						} else {
							
							//$content.= $cObj->substituteSubpart($templateCode,"###CONTENT###",$subpartContent) ;
							//$start = 0;
							$recentPosts = $this->getItems($pid,$limit,$start);
						}
							// Traverse the items and display them:
						reset($recentPosts);
						$c_post=0;
						$subpartContent="";
						while(list(,$recentPost)=each($recentPosts))	{
								// Passing data through stdWrap and into the markerArray
							$cObj->start($recentPost);		// Set this->data to the current record tt_guest record.
							$markerArray=array();
							$markerArray["###POST_TITLE###"] = $cObj->stdWrap($this->formatStr($recentPost["title"]), $conf["title_stdWrap."]);
							$markerArray["###POST_CONTENT###"] = $cObj->stdWrap($this->formatStr($recentPost["note"]), $conf["note_stdWrap."]);
							$markerArray["###POST_AUTHOR###"] = $cObj->stdWrap($this->formatStr($recentPost["cr_name"]), $conf["author_stdWrap."]);
							$markerArray["###POST_EMAIL###"] = $cObj->stdWrap($this->formatStr($recentPost["cr_email"]), $conf["email_stdWrap."]);
							$markerArray["###POST_WWW###"] = $cObj->stdWrap($this->formatStr($recentPost["www"]), $conf["www_stdWrap."]);
							$markerArray["###POST_DATE###"] = $cObj->stdWrap($recentPost["crdate"],$conf["date_stdWrap."]);
							$markerArray["###POST_TIME###"] = $cObj->stdWrap($recentPost["crdate"],$conf["time_stdWrap."]);
							$markerArray["###POST_AGE###"] = $cObj->stdWrap($recentPost["crdate"],$conf["age_stdWrap."]);
								// Substitute the markerArray in the proper template code (POST subparts, alternating)
							$out=$postHeader[$c_post%count($postHeader)];
							$c_post++;
							$subpartContent.=$cObj->substituteMarkerArrayCached($out,$markerArray);
						}
						
							// Total Substitution:
						if ($lConf["requireRecords"] && !count($recentPosts))	{
							$content.= "";
						} else {
							$content.= $cObj->substituteSubpart($templateCode,"###CONTENT###",$subpartContent) ;
						}
					} else {
						debug("No template code for the subpart maker ###".$lConf["subpartMarker"]."###"); 
					}
			
				break;
				default:
					$langKey = strtoupper($GLOBALS["TSFE"]->config["config"]["language"]);
					$helpTemplate = $this->cObj->fileResource("EXT:tt_guest/pi/guest_help.tmpl");

						// Get language version
					$helpTemplate_lang="";
					if ($langKey)	{$helpTemplate_lang = $this->cObj->getSubpart($helpTemplate,"###TEMPLATE_".$langKey."###");}
					$helpTemplate = $helpTemplate_lang ? $helpTemplate_lang : $this->cObj->getSubpart($helpTemplate,"###TEMPLATE_DEFAULT###");

						// Markers and substitution:
					$markerArray["###CODE###"] = $theCode;
					$content.=$this->cObj->substituteMarkerArray($helpTemplate,$markerArray);
				break;
			}
		}
		return $content;
	}
	
	/**
	 * Main guestbook function.
	 */
	function init($enableFields)	{
		$this->enableFields = $enableFields;
	}

	/**
	 * Main guestbook function.
	 */
	function getLayouts($templateCode,$alternativeLayouts,$marker)	{
		$out=array();
		for($a=0;$a<$alternativeLayouts;$a++)	{
			$m= "###".$marker.($a?"_".$a:"")."###";
			if(strstr($templateCode,$m))	{
				$out[]=$GLOBALS["TSFE"]->cObj->getSubpart($templateCode, $m);
			} else {
				break;
			}
		}
		return $out;
	}

	/**
	 * Main guestbook function.
	 */
	function getItems($pid,$limit,$start)	{
		### BLÄTTERACTION
		$query = "SELECT * FROM tt_guest WHERE pid IN (".$pid.")".$this->enableFields." ORDER BY crdate DESC LIMIT ".$start.",".$limit;
		$res = mysql(TYPO3_db,$query);
		//debug($query);
		$out=array();
		while($row = mysql_fetch_assoc($res))	{
			$out[]=$row;
		}
		return $out;
	}

	/**
	 * Main guestbook function.
	 */
	function formatStr($str)	{
		if (!$this->dontParseContent)	{
			return nl2br(htmlspecialchars($str));
		} else {
			return $str;
		}
	}
}


if (defined("TYPO3_MODE") && $TYPO3_CONF_VARS[TYPO3_MODE]["XCLASS"]["ext/tt_guest/pi/class.tx_ttguest.php"])	{
	include_once($TYPO3_CONF_VARS[TYPO3_MODE]["XCLASS"]["ext/tt_guest/pi/class.tx_ttguest.php"]);
}

?>
```

yip

### [#24](https://www.typo3.net/d/1933-gaestebuch-limit-setzen/24) · Andreas B.​ · 2004-09-02

Ich denke, ich habe vielleicht das selbe Problem wie Stefan72.

Bei mir kommt als Antwort von MySQL:

```plaintext
MySQL meldet: 
#1064 - You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF (  ! $res )die( mysql_error(  ) )' at line 1
```

Mein Problem habe ich unter [/d/15443-gaestebuch-wird-per-guestbook-nicht-mehr-angezeigt/2](https://www.typo3.net/d/15443-gaestebuch-wird-per-guestbook-nicht-mehr-angezeigt/2) beschrieben.

Auch das Problem unter [/d/4693-fehler-headers-already-sent](https://www.typo3.net/d/4693-fehler-headers-already-sent) könnte gleich sein. Meine localconf.php scheint aber keine Fehler zu haben, da der dortige Tip mein Problem nicht gelöst hat.

Übrigens: Mir ist auch aufgefallen, daß bei mir das UserTracking nicht mehr richtig funktioniert.

Schon vorab Danke für jede Antwort.

### [#25](https://www.typo3.net/d/1933-gaestebuch-limit-setzen/25) · Renko · 2004-09-07

Da vielleicht noch ein paar Probleme mit der Anpassung der class.tx_ttguest.php mit den Änderungen von Matthias und Irene haben, anbei ein Link zum Downloaden meines aktuellen angepassten Files

[class.tx_ttguest.zip](http://www.dieling.info/fileadmin/user_upload/class.tx_ttguest.zip)

Dieses funktioniert bei mir auch mit tt_guest 1.0.8 und typo 3.6.2

Hier noch meine Constants
###
# Guestbook
###
# Change Text of Error Message
styles.content.mailform.badMess = Sie müssen folgende Felder ausfüllen:
# Notify when new guestbook entry
plugin.tt_guest.notifyEmail = Hier Benachrichtigungs Emailadresse eingeben

# Path to template
plugin.tt_guest.file.templateFile = Hier Pfad zum Template angeben
#
PAGE_TARGET = _top

und mein Setup Script
###
# Guestbook
###
# Path to new class.tx_ttguest.php
includeLibs.ts_guest = %hier Pfad zur angepassten class eingeben %/class.tx_ttguest.php

styles.content.mailform.target = _top

plugin.tt_guest {
# Text for Link next
showPerPage.next = weiter
# Text for Link back
showPerPage.back = zurück
# How many Entry´s per page ?
showPerPage = 3

# new guestbook entries have to be accepted from admin
# hidden = 1

postform.dataArray {

# Format of the input fields
# Fields which have to be filled out have to be sign with an * before data
10.type = *data[tt_guest][NEW][title]=input,60
20.type = *data[tt_guest][NEW][note]=textarea,60,6
30.type = *data[tt_guest][NEW][cr_name]=input,60
40.type = data[tt_guest][NEW][cr_email]=input,60
50.type = data[tt_guest][NEW][www]=input,60

# change Textmessages Input
10.label = Titel:
20.label = Kommentar:
30.label = Name:
40.label = Email:
50.label = Webseite:
60.type = formtype_db=submit
60.value = Eintrag senden

}

}

Viel Spass damit !
Renko

### [#26](https://www.typo3.net/d/1933-gaestebuch-limit-setzen/26) · stefan72 · 2004-09-16

Hallo T3ler,

Mit der Version von Renko hat es schlussendlich geklappt mit Version 3.5! Besten Dank!

### [#27](https://www.typo3.net/d/1933-gaestebuch-limit-setzen/27) · keule80 · 2004-09-30

Tach auch  :)

Ich könnte noch mal jemanden gebrauchen der mir zu dem Thema unter die Arme greift...

und zwar funzt bei mir der seitenumbruch nicht mehr. Vor kurzem hatte ich Ihn noch am laufen aber seitdem ich meine seiten in html ausgebe um alles etwas suchmaschinenfreundlicher zu machen, geht nichts mehr.

Ich bekomme nach wie vor nur 5 Einträge angezeigt und alles ist soweit ok. Nur wenn der sechste Eintrag kommt, wird mir zwar der "weiter" Link angezeigt aber er tuts nicht.

In der URL verweist er mich auf www.meinedomain.de/4.0.html?start

es fehlt die id un der ganze kram...
4.0.html steht dabei für mein Gästebuch

Kennt jemand ne Lösung für das Problem? Würde mich sehr freuen

Viele Grüße
Dennis

### [#28](https://www.typo3.net/d/1933-gaestebuch-limit-setzen/28) · keule80 · 2004-10-04

kennt keiner dieses Problem?  :(

### [#29](https://www.typo3.net/d/1933-gaestebuch-limit-setzen/29) · Andreas B.​ · 2004-10-08

Auch ich habe seit dem Update auf 3.7 das Problem, daß bei mir - unabhängig von der Einstellung "plugin.tt_guest.showPerPage" - immer nur zwischen 2 und 3 Einträgen angezeigt werden.
:-(

### [#30](https://www.typo3.net/d/1933-gaestebuch-limit-setzen/30) · mobyd1ck · 2004-12-30

Hallo,
ich hab mir die angepasste class.tx_ttguest runtergeladen und wollte das grad auch mal machen, aber bei mir kommt immer folgender Fehler:

```plaintext
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /srv/www/htdocs/web1/html/ftpuser/w12/fileadmin/vorlage/class.tx_ttguest.php on line 261

Warning: Cannot modify header information - headers already sent by (output started at /srv/www/htdocs/web1/html/ftpuser/w12/fileadmin/vorlage/class.tx_ttguest.php:261) in /srv/www/htdocs/web1/html/ftpuser/w12/tslib/class.tslib_fe.php on line 2402
```

Typo 3.7. wird verwendet!

Setup:

```typoscript
#includeLibs.ts_guest = EXT:tt_guest/pi/class.tx_ttguest.php 
includeLibs.ts_guest = fileadmin/vorlage/class.tx_ttguest.php
plugin.tt_guest.showPerPage = 10 
plugin.tt_guest.showPerPage.next = weiter 
plugin.tt_guest.showPerPage.back = zurück
```

vielleicht hat jemand ne idee?!?

Lg
Moby

### [#31](https://www.typo3.net/d/1933-gaestebuch-limit-setzen/31) · ralf321 · 2005-05-17

Also zu dem ID Problem:

Einfach im code die

```php
$PHP_SELF
```

durch

```php
$_SERVER['PHP_SELF']
```

ersetzen, dann gings bei mir.

### [#32](https://www.typo3.net/d/1933-gaestebuch-limit-setzen/32) · banger3000 · 2005-05-20

Hallo, obwohl ich den Eintrag

plugin.tt_guest.showPerPage = 2

im Setup des Template gemacht habe, zeigt das Gästebuch allerdings immer noch alle Einträge an.

Kann mir jemand helfen???

Danke

### [#33](https://www.typo3.net/d/1933-gaestebuch-limit-setzen/33) · Faircamion · 2005-10-22

Moin,

kann evtl. mal jemand ne funktionierende Anleitung in einem Beitrag schreiben, denn mit dem rest hier funktioniert´s irgendwie nicht!

danke!

### [#34](https://www.typo3.net/d/1933-gaestebuch-limit-setzen/34) · Renko · 2005-11-20

Du nimmst am besten das ve_guestbook als Gästebuch, dort ist diese funktion integriert !

---

Quelle: „Gästebuch Limit setzen“, typo3.net, https://www.typo3.net/d/1933-gaestebuch-limit-setzen
Beiträge von Mitgliedern des Forums. Bitte mit Link auf die Diskussion zitieren.
