---
title: "Php-funktion per link aufrufen!"
url: "https://www.typo3.net/d/76351-php-funktion-per-link-aufrufen"
source: "typo3.net"
tags: ["Extensions","Entwicklung","Frage"]
created: "2008-04-21"
last_reply: "2008-04-24"
replies: 4
solved: false
page: 1
pages: 1
lang: "de"
---

# Php-funktion per link aufrufen!

Extensions › Entwicklung · 4 Antworten · gestartet 2008-04-21

## Eröffnungsbeitrag

**sefer** · 2008-04-21 · [Beitrag #1](https://www.typo3.net/d/76351-php-funktion-per-link-aufrufen/1)

Hi,

ich möchte per link eine Funktion aufrufen, ich weiß ungefähr wie das mit einem Formular button geht:

```html
 <form name="detailAnsicht_form" action="index.php?id='.$GLOBALS['TSFE']-">id.'" method="post" enctype="multipart/form-data">
                              <input type="hidden" name="searchSave" value="sendDetailAnsicht" />
                              <input type="submit" value="DETAILANSICHT" />
                        </form>
```

.

Allerdings möchte ich einen link erzeugen der dann die Funktion detailAnsicht($uid) aufruft.

Ich gebe eine Tabelle mit drei Spalten aus, in der nur der "wer_sucht", "wen" und der Button (Detailansicht) ausgegeben werden. Nach Klick auf Detailansicht sollen Alle Felder die zu dem Datensatz dazugehören ausgegeben werden.

Wie mache ich das per link, anstatt per Button?

EDIT:
Hier ist die Vorlage meiner Extension, der Link "Details" ist das was ich suche.
<http://jhh.sport-nord.de/boerse/suche.php?cat=sv>

thx,
Sefer

Hier die Extension im experimental zum ausprobieren:
<http://www.amafu.de/alfa2_1/index.php?id=469>

DETAILANSICHT funktioniert aber per Formular auch noch nicht! #angry#

**MEIN KOMPLETTER CODE**

```php
<?php
/***************************************************************
*  Copyright notice
*
*  (c) 2008  <>
*  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.
*
*  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!
***************************************************************/

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

/**Funktionen ### ANFANG
 * main ()
 * suchern()
 * speichern()
 * zurueck()
 * datenEingabe()
 * getList()
 * getItems()
 * getAusgangspunkt()
 *         
*///Funktionen ### Ende

/**
 * Plugin 'plugin_boerse_01' for the 'sd_boerse_01' extension.
 *
 * @author	 <>
 * @package	TYPO3
 * @subpackage	tx_sdboerse01
 */
class tx_sdboerse01_pi1 extends tslib_pibase {
	var $prefixId      = 'tx_sdboerse01_pi1';		// Same as class name
	var $scriptRelPath = 'pi1/class.tx_sdboerse01_pi1.php';	// Path to this script relative to the extension dir.
	var $extKey        = 'sd_boerse_01';	// The extension key.
		var $conf;
/**
	 * The main method of the PlugIn
	 *
	 * @param	string		$content: The PlugIn content
	 * @param	array		$conf: The PlugIn configuration
	 * @return	The content that is displayed on the website
	 */
	function main($content, $conf) {
                $this->conf = $conf;
                $this->pi_setPiVarDefaults();
                $this->pi_loadLL();
                $this->pi_USER_INT_obj=1; 
                    
                //Hier wird die postArray Variable erzeugt, diese bekommt ihren Inhalt von t3lib_div::_POST(); bzw. vom Formular 
                $postArray = t3lib_div::_POST();
                
                if($postArray['send'] == 1){
                  switch($postArray['searchSave']){
                    case "suchen": 
                      $content=$this->zurueck();
                      $content.= "<br />SUCHEN ERFOLGRICH!!!";
                      $content.=$this->getList();
                    break;
                      
                    case "speichern":
                      $content.=$this->speichern();
                    break;
                    //
                      case "sendDetailAnsicht":                 
                      $content.="<br />Detailansicht!!!";
                    //
                    
                  }
                }else{
                  //Das Formular für die Dateneingabe wird angezeigt    
                  $content.=$this->datenEingabe();
                }

        return $this->pi_wrapInBaseClass($content);
}
	
 
   /**
	 * Die Funktion speichern
	 */
	 
	 function speichern(){
	$pidAusgangspunkt= $this->getAusgangspunkt();
	$postArray = t3lib_div::_POST();
                //Ein Array wird erzeugt, welches die Werte enthält die über das Formular mit Hilfe von Post gesendet werden
                //Wichtig hierbei ist, dass man manuell die pid des Sysordners angeben muss, wo die Daten im BE angelegt werden sollen
                //Vielleicht sollte man für pid den Wert automatisch ermitteln lassen z.B. die pid von der aktuellen Seite 
                $insertValuesArray = array(
                        'pid' => $pidAusgangspunkt,
                        'wer_sucht' => $postArray['wer_sucht'],
                        'wen' => $postArray['wen'],
                               
                        );
                
                //Es wird zwar ein Array erzeugt, dieses wird aber nur dazu genutzt, um eine Insertabfrage zu starten
                //Das eigentliche passiert mit Hilfe von 'exec_INSERTquery(Tabelle,newValues)
                //Die in insertValuesArray vorhandenen Daten werden in der Tabelle 'tx_sdboerse01_daten' hinzugefügt
                $newDataQuery = $GLOBALS['TYPO3_DB']->exec_INSERTquery(
                                'tx_sdboerse01_daten',
                                $insertValuesArray
                        );
                
                //Die content-Variable enthält alle Elemente die ausgegeben werden
                $content=$this->zurueck();
                $content.= "<br />Super, alles gespeichert";
                
                
                //Der Inhalt aus der $content-Variablen  von der Funktion getList() wird  ebf. ausgegeben.
                $content.=$this->getList();
                
              return $content;
   }
   
	 /**
	 * Die Funktion 
	 */
	 
	 function zurueck(){
	 //So erzeugt man automatisch einen Link auf die Seite aktuelle Seite
                //Würde man einfach die Seite Aktualisieren, dann wird die PostVariable erneut gesendet
                $content.= ''.$this->pi_linkToPage('<< zurück!',$GLOBALS['TSFE']->id).'';    
                $content.='<br /><a href="javascript:history.back()">JavaScript zurück</a>';     
                return $content;
   }
	 /**
	 * Die Funktion datenEingabe() ermöglicht im Formular Daten einzugeben
	 */
	 
	 function datenEingabe() {
	           $content ='
                        <form name="new_data_form" action="index.php?id='.$GLOBALS['TSFE']-">id.'" method="post" enctype="multipart/form-data">
                        <table>
                          <tr>
                            <td>Wer sucht:</td>
                            <td>
                              <select size="1" name="wer_sucht">
                              <option value="spieler">Spieler</option>
                              <option value="verein">Verein</option>
                              </select>
                            </td>
                            <td>
                              <input type="radio" name="searchSave" value="suchen" checked="checked" />SUCHEN
                              
                            </td>
                            <td></td>
                          </tr>
                          <tr>
                            <td>Wen:</td>
                            <td>
                              <select size="1" name="wen">
                              <option value="spieler">Spieler</option>
                              <option value="verein">Verein</option>
                              </select>
                            </td>
                        
                            <td>
                              <input type="radio" name="searchSave" value="speichern" />SPEICHERN
                            
                            </td>
                            <td>
                              <input type="hidden" name="send" id="send" value="1" />
                              <input type="submit" value="SENDEN" />
                            </td>
                          </tr>
                        </table>
                        </form>
                        ';
            return $content;

	 }
	/**
	 * Die Funktion getList liest alle Items mit Hilfe der Funbktion getItems aus und gibt diese als Tabelle aus.
	 * Um die Tabelle anzuzeigen genügt es folgendes in der main-Funktion hinzuzufügen: 
	 * $content.=$this->getList();   	 
	 */
	 
	 function getList() {	 
	 //$rows enthält alle Datensätze die von getItems ermittelt wurde
   $rows=$this->getItems();
   $postArray = t3lib_div::_POST();

   	 $content.='<table border="2">';
     $content.='<thead bgcolor="grey"><tr><th>wer_sucht</th><th>wen</th><th>uid</th></tr></thead>';
     //$content.='<tr>';
   	 //Die Schleife wird solange wiederholt, bis alle Datensätze gelesen worden sind.
   	 //Jeder einzelne Datensatz kann nun über die Variable $row ["FELDNAME"]angesprochen werden
   	 while(list($c,$row)=each($rows))	{
       $content.='<tr>';
       $content.='<td>'.($row["wer_sucht"]).'</td>';
       $content.='<td>'.($row["wen"]).'</td>';
       $content.='<td>'.$this->detailAnsicht(($row["uid"])).'</td>';
       $content.='</tr>';
              	 
     }
     $content.='</table>';
     return $content;
    }
    
    
    /**
    * Die Funktion getItems führt ein einfaches SQL-Statement durch und speichert diesen in der Variablen $query
    * Das Ergebnis wird als array in der Variablen $out gespeichert und als return an die aufrufende Stelle zurückgegeben    
    */    
	function getItems()	{
    $lang = $GLOBALS["TSFE"]->sys_language_uid;
    $pidAusgangspunkt= $this->getAusgangspunkt();
    $postArray = t3lib_div::_POST();
    
    $queryWhere =" AND wer_sucht = '".$postArray['wer_sucht']."'";
    $queryWhere.=" AND wen = '".$postArray['wen']."'";

		// Datenbank ansprechen und in Schleife ausgeben 
    // function exec_SELECTquery($select_fields,$from_table,$where_clause,$groupBy='',$orderBy='',$limit='')
    $res = $GLOBALS["TYPO3_DB"]->exec_SELECTquery("*", "tx_sdboerse01_daten","deleted = 0 ".$queryWhere." AND hidden = 0 AND pid='".$pidAusgangspunkt."'", "", "uid desc");
    //$res = $GLOBALS["TYPO3_DB"]->exec_SELECTquery("*", "tx_sdboerse01_daten","deleted = 0 AND hidden = 0 AND pid='".$pidAusgangspunkt."'", "", "uid desc");

		$out=array();
		while($row = mysql_fetch_assoc($res))	{
			$out[]=$row;
		}
		return $out;
	}
	
	  /**
    * Diese Funktion ermittelt, ob im Plugin ein Ausganspunkt für die Datensätze festegelegt wurde.
    * Falls nicht, dann wird die PageID der Seite, wo das Plugin ist, zurückgegeben    
    */    

function getAusgangspunkt() {
	// ist ein Ausgangspunkt gesetzt wird dieser ausgelesen und verwendet, ansonsten wird die aktuelle Seite auf der sich das Plugin befindet verwendet
		$pidAusgangspunkt = $this->cObj->data["pages"];

		if (!intval($pidAusgangspunkt)) $pidAusgangspunkt=$GLOBALS["TSFE"]->id;
    
    return $pidAusgangspunkt;
}
/**
	 * Die Funktion detailAnsicht($uid)
	 */
	 
	 function detailAnsicht($uid) {
	        
            $content ='
                        <form name="detailAnsicht_form" action="index.php?id='.$GLOBALS['TSFE']-">id.'" method="post" enctype="multipart/form-data">
                              <input type="hidden" name="searchSave" value="sendDetailAnsicht" />
                              <input type="submit" value="DETAILANSICHT" />
                        </form>
                        ';
            $content.="'".$uid."'";  
                               
            return $content;

	 }
	 
}
if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/sd_boerse_01/pi1/class.tx_sdboerse01_pi1.php'])	{
	include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/sd_boerse_01/pi1/class.tx_sdboerse01_pi1.php']);
}

?>
```

## Antworten

### [#2](https://www.typo3.net/d/76351-php-funktion-per-link-aufrufen/2) · sefer · 2008-04-22

Hat keiner eine Idee,

oder einen Tip in welcher Extension das so gemacht wurde?

Alle Funktionsaufrufe die ich gefunden habe erfolgen über den "senden"button, aber keiner per link!

gruß,
Sefer

### [#3](https://www.typo3.net/d/76351-php-funktion-per-link-aufrufen/3) · Desmond · 2008-04-22

Ich verstehe nicht genau was du willst. Du kannst einen Link auf eine Seite machen (über ID vielleicht noch mit Parameter). Die Anleitung dazu ist hier: <http://typo3.org/development/articles/using-links-in-frontend-plugins/>

Dort kannst du ein Plugin einfügen dass dann irgendwas macht. Per Link eine PHP Funktion aufrufen ist nicht möglich.

Du könntest aber per Link (onClick) eine Java Script Funktion aufrufen. Dann eine AJAX-Abfrage machen (Stichwort eID) und so vielleicht das gewünschte Ergebnis erhalten.

### [#4](https://www.typo3.net/d/76351-php-funktion-per-link-aufrufen/4) · sefer · 2008-04-23

Hi Desmond,
danke dass du genatwortet hast, auch wenn mein post etwas undeutlich war.

Ich denke ich habe meine Lösung. Im Kickstarter kann man unter
-->"Frontend Plugin"
----->Add to 'Insert Plugin' list in Content Elements'
-------->If you have configured custom tables you can select one of the tables to list by default as an example: **>>Die gewünschte Tabelle<<** auswählen.

Der Kickstarter erzeugt sofort einen Code, der einem die Tabelle mit allen Datensätzen ausgibt und wenn man einen Datensatz(uid) auswählt, dann bekommt man den dazugehörigen singleview angezeigt.

Ich habe nur noch nicht herausgefunden, was die beiden checkboxen machen?
-------->Listing: Sections instead of table-rows
-------->Singleview: Sections instead of table-rows

thx,
Sefer

### [#5](https://www.typo3.net/d/76351-php-funktion-per-link-aufrufen/5) · sefer · 2008-04-24

Hi,

ich habe mir den vom Kickstarter erzeugten Code angeguckt (*bzgl. der Auswahl im FE-Plugin :f you have configured custom tables you can select one of the tables to list by default as an example)*.

Der Code erzeugt eine Tabelle mit den Überschriften
[uid]-feld1-feld2,usw:
-1----hansi-meier
-2----wolfi-müller
Wobei die Datensätze für [uid] anklickbare links sind, welches ein über die Funktion getFieldContent() ein singleview [pi_list_linkSingle('detail',1)] ausführt.

Nun habe ich versucht diese Funktionen bei mir auch zu verwenden, aber hat irgendwie nicht funktioniert. Hat jemand einen Hinweis wie man das einfach macht?

Ich habe mir schon überlegt, ob ich nicht eine zweite versteckte Seite erzeuge und auf dieser meinen Singleview anzeige. Allerdings stelle ich mir das für die Installation der extension kompliziert vor. Deshalb soll jede ausgabe auf der einen seite erfolgen.
thx,
sefer

Hier ein bisschen Code von **typo3/sysext/cms/tslibclass.tslib_pibase.php**

```html
<td><p>'.$this->getFieldContent('uid').'</p></td>
```

```php
<?php>/**
	 * Returns the content of a given field
	 *
	 * @param	string		$fN: name of table field
	 * @return	Value of the field
	 */
	function getFieldContent($fN)	{
		switch($fN) {
			case 'uid':
				return $this->pi_list_linkSingle('detail',1);	// The "1" means that the display of single items is CACHED! Set to zero to disable caching.
			break;
			
						
			default:
				return $this->internal['currentRow'][$fN];
			break;
		}
	}
/**
	 * Wraps the $str in a link to a single display of the record (using piVars[showUid])
	 * Uses pi_linkTP for the linking
	 *
	 * @param	string		The content string to wrap in <a> tags
	 * @param	integer		UID of the record for which to display details (basically this will become the value of [showUid]
	 * @param	boolean		See pi_linkTP_keepPIvars
	 * @param	array		Array of values to override in the current piVars. Same as $overrulePIvars in pi_linkTP_keepPIvars
	 * @param	boolean		If true, only the URL is returned, not a full link
	 * @param	integer		Alternative page ID for the link. (By default this function links to the SAME page!)
	 * @return	string		The input string wrapped in <a> tags
	 * @see pi_linkTP(), pi_linkTP_keepPIvars()
	 */
function pi_list_linkSingle($str,$uid,$cache=FALSE,$mergeArr=array(),$urlOnly=FALSE,$altPageId=0)	{
		if ($this->prefixId)	{
			if ($cache)	{
				$overrulePIvars=$uid?array('showUid'=>$uid):Array();
				$overrulePIvars=array_merge($overrulePIvars,(array)$mergeArr);
				$str = $this->pi_linkTP($str,Array($this->prefixId=>$overrulePIvars),$cache,$altPageId);
			} else {
				$overrulePIvars=array('showUid'=>$uid?$uid:'');
				$overrulePIvars=array_merge($overrulePIvars,(array)$mergeArr);
				$str = $this->pi_linkTP_keepPIvars($str,$overrulePIvars,$cache,0,$altPageId);
			}

				// If urlOnly flag, return only URL as it has recently be generated.
			if ($urlOnly)	{
				$str = $this->cObj->lastTypoLinkUrl;
			}
		}
		return $str;
	}
<?>
```

---

Quelle: „Php-funktion per link aufrufen!“, typo3.net, https://www.typo3.net/d/76351-php-funktion-per-link-aufrufen
Beiträge von Mitgliedern des Forums. Bitte mit Link auf die Diskussion zitieren.
