Zum Inhalt springen

Feldtyp

Erstellt am 28. September 2005 · 21 Antworten · letzte Antwort am 26. Oktober 2006 · Seite 1 von 2

Tags: Frage

Andrea_Herzog ·

Hallo Markus, Hallo Woida,

sicher muss ich die PHP-Datei anpassen.

Und - Woida - für einen statischen Link stimmt das ja. Aber auch für einen Link zu den Webadressen?

Ich habe eine Adress-Datei, in einem Feld der Tabelle steht die Internetadresse der Firma. Die Daten werden ausgegeben. Klicke ich drauf, kein Link.
Ich habe das Feld aber im Kickstarter als Link-Feld definiert.

Weiss jemand wie das geht.

Viele Grüße,
Andrea :o

woida ·

Hallo Andrea,
der Code ist genau dafür da, ein Link-Feld zu verarbeiten. (Er kommt also sowol mit einer uid, einer http-Adresse und einer Mailadresse aus)
Probiers doch einfach aus.

Andrea_Herzog ·

Hallo,
:o
ja also...
Wo muss das denn stehen? Kannst du helfen? Wäre riesig nett.

Hier der Code:

<?php
/***************************************************************
*  Copyright notice
*
*  (c) 2005 Andrea (a.herzog@kienastdv.de)
*  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!
***************************************************************/
/**
 * Plugin 'plugin.bivmetal' for the 'user_bivmetal' extension.
 *
 * @author	Andrea <a.herzog@kienastdv.de>
 */
  require_once(PATH_tslib.'class.tslib_pibase.php');
 
  class user_bivmetal_pi1 extends tslib_pibase {
                  var $prefixId = 'user_bivmetal_pi1'; // Same as class name
                  var $scriptRelPath = 'pi1/class.user_bivmetal_pi1.php'; // Path to this script relative to the extension dir.
                  var $extKey = 'user_bivmetal'; // The extension key.
                  //var $pi_checkCHash = TRUE;
                  var $conf;   
                  //var $emailMarkHTMLSuffix = '_HTML';
		              //var $charset = 'iso-8859-1'; // charset to be used in emails and form conversions
 
                  function main($content,$conf) {
                                $this->conf=$conf;
                                $this->pi_setPiVarDefaults();
                                $this->pi_loadLL();
                                $this->pi_USER_INT_obj=1;       # Configuring so caching is not expected. This value means that no cHash params are ever set. We do this, because it's a USER_INT object!
                                $content='
                                                <strong>Sie suchen einen Metallbildner-Betrieb?</strong>
                                                <p>Hier können Sie ein Unternehmen in Ihrer Nähe finden.<br />
                                                Tragen Sie einfach die gewünschte Postleitzahl, oder auch nur die erste Zahl oder die 
                                                ersten beiden Zahlen ein und betätigen den Suche - Button. Schon erhalten Sie die gewünschte Information.</p>
                                                <h3>Bitte geben Sie die Postleitzahl ein:</h3>
                                                <form action="'.$this-">pi_getPageLink($GLOBALS['TSFE']->id).'" method="POST">
                                                <input type="hidden" name="no_cache" value="1" />
                                                <input type="text" name="'.$this-" />prefixId.'[plz]" value="'.htmlspecialchars($this->piVars['plz']).'">
                                                <input type="submit" name="'.$this-" />prefixId.'[submit]" value="'.htmlspecialchars($this->pi_getLL('submit_button_label')).'">
                                                </form>
                                                
                                                <p>Klicken Sie hier '.$this->pi_linkToPage('um diese Seite noch einmal aufzurufen',$GLOBALS['TSFE']->id).'</p>
                                                ';                                    
                                 //Isset, weil PLZ auch mit 0 beginnen können. !empty kann nicht auf Null-Werte prüfen               
                                if (isset($this->piVars['plz'])) {
                                        
                                        $content .= $this->lookupPlz($content, $this->piVars['plz']); 
                                        return $this->pi_wrapInBaseClass($content);
                                        
                                } else {
                                
                                        return $this->pi_wrapInBaseClass($content);
                                }

                        }                     

                        function lookupPlz($content,$plz) {
                                  
                                  //Die ausgelesenen Daten
                                  $rows = $this->getItems($plz);
                                  //Counts Adresses, see Line 82
                                  $counter = sizeof($rows);
                                  
                                  if (count($rows) == 0)  {                      
                                                $content = "<h3>Es wurden keine Einträge gefunden</h3>";          
                                  } 
                                  else {                              
                                                $content = '<h3>Es wurde(n) ' . $counter . ' Adresse(n) gefunden:</h3>';
                                                //ob der Punkt vor das Komma kommt, ist nicht sicher
                                                $content2 .= '<table>';          
                                                foreach ($rows as $value) {
                                                          $content2 .='<tr><td colspan="2" bgcolor="#E7E9F0"><p><strong>'.$value['firma_1'].'</p></strong></td></tr>
                                                          <tr><td>'. $value['firma_2'].'</td></tr>
                                                          <tr><td>'. $value['strasse'].' '. $value['hausnr'].'</td></tr>
                                                          <tr><td>'. $value['plz']. ' '. $value['ort'].'</td></tr>
                                                          <tr><td>'. 'Tel.: '. $value['tel'].'</td></tr>
                                                          <tr><td>'. 'Fax: '. $value['fax'].'</td></tr>
                                                          <tr><td>'. $value['email'].'</td></tr>
                                                          <tr><td>'. $value['internet'].'</td></tr>
                                                          <tr><td>'. ' '.'</td></tr>';
                                                }
                                                
                                                $content2 .= '</table>';
                                                $content = $content . $content2;
                                  }                      
                                  
                                  return $content;    
                  }

   

                  function getItems($plz) {
                                  $query = "SELECT * FROM user_bivmetal_bivmetal WHERE plz LIKE '".$plz."%'";
                                  $res = mysql(TYPO3_db,$query);
                                  $out=array();
                                  while($row = mysql_fetch_assoc($res)) {
                                                  $out[]=$row;
                                  }  
                                  return $out;
                  }       

  }

   

  if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/user_bivmetal/pi1/class.user_bivmetal_pi1.php']) {  
                  include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/user_bivmetal/pi1/class.user_bivmetal_pi1.php']);
  }
?>

Vielen Dank im Voraus,

Andrea

woida ·

Also ich rate jetzt einfach mal, daß du deinen Link im Feld "internet" speicherst.
Dann muß Zeile 94 geändert werden:

<tr><td>'.$value['internet'].'</td></tr>

in

<tr><td>'.$this->cObj->getTypoLink($value['internet'],$value['internet']).'</td></tr>

War doch nicht so schwer?

Andrea_Herzog ·

Hallo Woida,

vielen, vielen Dank #angry# Ich hatte einfach den zweiten $value nicht gesetzt :o

Weisst du auch, wie man mit diesem Link ein neues Fenster öffnet?

Viele Grüße

Andrea

woida ·
$typolink_conf=array(
  "parameter" => $value['internet'],
  "extTarget" => '_blank',
  "extTarget" => '_self'
);
$this->cObj->getTypoLink($value['internet'],$typolink_conf)

Dann kommen werden alle externen Links in einer neuen Seite geöffnet und alle internen auf der gleichen Seite.

woida ·

In die Funktion lookupPlz. Logischerweise überhalb der Zeile in der du typolink aufrufst, sonst ist die Variable $typolink_conf ja nicht bekannt und innerhalb deiner Schleife, sonst wird der Link nicht gesetzt.
Also ich würds unterhalb der foreach-Schleife einbauen (Zeile 87).

Ich denke du solltest dich erstmal vernünftig mit PHP auseinandersetzen, bevor du dich ans Extensionschreiben machst.

Andrea_Herzog ·

Hallo Woida,
entschuldige bitte, ich hätte mich besser ausdrücken sollen.
Also ich habe den Array natürlich in die Funktion Lookup geschrieben.
Nachdem ich den Array direkt unterhalb der Funktion schrieb,
tat sich nichts.
Also habe ich ausprobiert, was ist, wenn er direkt unterhalb der foreach Schleife steht.
Auch nichts

Wenn ich in der Tabelle die Variable übergebe, wird der Link gar nicht mehr ausführbar.

<tr><td>'. $this->cObj->getTypoLink($value['internet'],$typolink_conf).'</td></tr>

Bin ich nun wirklich dümmer als erlaubt oder ????

Gerne hätte ich mehr Zeit, mein PHP zu verbessern, aber ich brauche nun mal dieses Ding, also was soll ich machen?

Viele Grüße

Andrea

PS: Wenn du schon völlig genervt bist, anworte einfach mit ja (bezieht sich auf die Dummheit).

Stoneage ·

@woida:

Es muß natürlich heissen:

Also ich würds INNERHALB der foreach-Schleife einbauen (Zeile 87).

@andrea:

Das Array kommt in die foreach-Schleife, weil es sonst den Wert $value['internet'] nicht kennt.

woida ·
Tetramatrix schrieb

@woida:

Es muß natürlich heissen:

Also ich würds INNERHALB der foreach-Schleife einbauen (Zeile 87).

Ähh, ja, ich hab gemeint unterhalb von foreach, also in Zeile 87.

Andrea_Herzog ·

Hallo ihr beiden,
schön, dass ihr so viel Geduld habt.
Also ich habs so gemacht und der Link wird nicht mehr als solcher erkannt.
Also gehe ich davon aus, dass die Variable nicht erkannt wird.

 foreach ($rows as $value) {
                                                         $typolink_conf=array(
                                                         "parameter" => $value['internet'],
                                                         "extTarget" => '_blank',
                                                         "extTarget" => '_self'
                                                         ); 
                                      
                                                          $content2 .='<tr><td colspan="2" bgcolor="#E7E9F0"><p><strong>'.$value['firma_1'].'</p></strong></td></tr>
                                                          <tr><td>'. $value['firma_2'].'</td></tr>
                                                          <tr><td>'. $value['strasse'].' '. $value['hausnr'].'</td></tr>
                                                          <tr><td>'. $value['plz']. ' '. $value['ort'].'</td></tr>
                                                          <tr><td>'. 'Tel.: '. $value['tel'].'</td></tr>
                                                          <tr><td>'. 'Fax: '. $value['fax'].'</td></tr>
                                                          <tr><td>'. $value['email'].'</td></tr>
                                                          <tr><td>'. $this->cObj->getTypoLink($value['internet'],$typolink_conf).'</td></tr>
                                                          <tr><td>'. ' '.'</td></tr>';
                                                }

So jedenfalls geht es nicht.

Gruß Andrea :o

woida ·

Tschuldigung, hab dir die falsche Funktion genannt:
nimm statt getTypoLink: typolink.
also

$this->cObj->typolink($value['internet'],$typolink_conf)

Die Paramter sind die gleichen.

Andrea_Herzog ·

Hi,
ich habe es gefunden. Am Array lag es. So sieht er aus:

$typolink_conf=array(
"parameter" => $value['internet'],
"extTarget" => '_blank',
"extTarget" => '_self'
 );

Aber das haut sich natürlich.
Wenn man den Self-Teil rausnimmt, funktioniert es wunderbar.
Die internen müssen ja eigentlich nicht ausdürcklich auf self gsetzt werden.
Wenn doch, dann aber als int, denke ich.

Vielen Dank für die großartige Unterstützung. Ich gelobe Besserung.

Viele Grüße,
Andrea 🙂

woida ·

Oh Mann, schon wieder mein Fehler:
Irgendwie erzähl ich heute nur Mist.
Richtig ist:

$typolink_conf=array(
  "parameter" => $value['internet'],
  "extTarget" => '_blank',
  "target" => '_self'
 );

Dann klappts auch mitm target...

Wobei du natürlich recht hast: Für interen Links muß "target" nicht explizit gesetzt werden, aber bevor die Frage kommt wie man das ändert, hab ichs mal mit dazugenommen. Dann hat auch die Nachwelt was davon...

Andrea_Herzog ·

Hallo Woida,

na da bin ich aber froh, dass das nicht nur mir so geht.

Aber du hast Recht, der interne sollte auch gesetzt sein, damit alles korrekt ist.

Bis bald einmal,

Andrea

Unbekannter Benutzer ·

Verdammt schöner Thread: ich das Problem auch.

Allerdings bin ich Newbie und von eurem Hin-und_her irritiert worden 😉

Vielleicht besteht ja die Möglichkeit, mir das für mein Konkretes Bsp zu erläutern -ich hab schwer versucht eure Aussagen zu verwerten, allerdings ohne Erfolg #angry#

....

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

class user_mtbspotguide_pi1 extends tslib_pibase {
	var $prefixId = 'user_mtbspotguide_pi1';		// Same as class name
	var $scriptRelPath = 'pi1/class.user_mtbspotguide_pi1.php';	// Path to this script relative to the extension dir.
	var $extKey = 'user_mtb_spotguide';	// The extension key.
	var $pi_checkCHash = TRUE;
	var $stateCache = array();
	var $kind_of_spotCache = array();
	
	/**
	 * [Put your description here]
	 */
	function main($content,$conf)	{
		switch((string)$conf['CMD'])	{
			case 'singleView':
				list($t) = explode(':',$this->cObj->currentRecord);
				$this->internal['currentTable']=$t;
				$this->internal['currentRow']=$this->cObj->data;
				return $this->pi_wrapInBaseClass($this->singleView($content,$conf));
			break;
			default:
				if (strstr($this->cObj->currentRecord,'tt_content'))	{
					$conf['pidList'] = $this->cObj->data['pages'];
					$conf['recursive'] = $this->cObj->data['recursive'];
				}
				
				return $this->pi_wrapInBaseClass($this->listView($content,$conf));
			break;
		}
	}
	
	/**
	 * [Put your description here]
	 */
	function listView($content,$conf)	{
		$this->conf=$conf;		// Setting the TypoScript passed to this function in $this->conf
		$this->pi_setPiVarDefaults();
		$this->pi_loadLL();		// Loading the LOCAL_LANG values
		
		$lConf = $this->conf['listView.'];	// Local settings for the listView function
	
		if ($this->piVars['showUid'])	{	// If a single element should be displayed:
			$this->internal['currentTable'] = 'user_mtbspotguide_spots';
			$this->internal['currentRow'] = $this->pi_getRecord('user_mtbspotguide_spots',$this->piVars['showUid']);
	
			$content = $this->singleView($content,$conf);
			return $content;
		} else {
			$items=array(
				'1'=> $this->pi_getLL('list_mode_1','Mode 1'),
				'2'=> $this->pi_getLL('list_mode_2','Mode 2'),
				'3'=> $this->pi_getLL('list_mode_3','Mode 3'),
			);
			if (!isset($this->piVars['pointer']))	$this->piVars['pointer']=0;
			if (!isset($this->piVars['mode']))	$this->piVars['mode']=1;
	
				// Initializing the query parameters:
			list($this->internal['orderBy'],$this->internal['descFlag']) = explode(':',$this->piVars['sort']);
			$this->internal['results_at_a_time']=t3lib_div::intInRange($lConf['results_at_a_time'],0,1000,5);		// Number of results to show in a listing.
			$this->internal['maxPages']=t3lib_div::intInRange($lConf['maxPages'],0,1000,1000);;		// The maximum number of "pages" in the browse-box: "Page 1", "Page 2", etc.
			$this->internal['searchFieldList']='city,state,kind_of_spot';
			$this->internal['orderByList']='city,state,kind_of_spot';
	
				// Get number of records:
			$res = $this->pi_exec_query('user_mtbspotguide_spots',1);
			list($this->internal['res_count']) = $GLOBALS['TYPO3_DB']->sql_fetch_row($res);
	
				// Make listing query, pass query to SQL database:
			$res = $this->pi_exec_query('user_mtbspotguide_spots');
			$this->internal['currentTable'] = 'user_mtbspotguide_spots';
	
				// Put the whole list together:
			$fullTable='';	// Clear var;
		#	$fullTable.=t3lib_div::view_array($this->piVars);	// DEBUG: Output the content of $this->piVars for debug purposes. REMEMBER to comment out the IP-lock in the debug() function in t3lib/config_default.php if nothing happens when you un-comment this line!
	
				// Adds the mode selector.
#			$fullTable.=$this->pi_list_modeSelector($items);
	
				// Adds the search box:
			$fullTable.=$this->pi_list_searchBox();	
			
				// Adds the whole list table
			$fullTable.=$this->pi_list_makelist($res);

				// Adds the result browser:
			$fullTable.=$this->pi_list_browseresults();
	
				// Returns the content from the plugin.
			return $fullTable;
		}
	}
	/**
	 * [Put your description here]
	 */
	function singleView($content,$conf)	{
		$this->conf=$conf;
		$this->pi_setPiVarDefaults();
		$this->pi_loadLL();
		;
	
			// This sets the title of the page for use in indexed search results:
		if ($this->internal['currentRow']['title'])	$GLOBALS['TSFE']->indexedDocTitle=$this->internal['currentRow']['title'];
	
		$content='<div'.$this->pi_classParam('singleView').'>
			<h1>Details</h1>
			<table>
				<tr>
					<td nowrap="" valign="top" this-="">pi_classParam('singleView-HCell').'><p><strong>'.$this->getFieldHeader('city').'</strong>  </p></td>
					<td valign="top"><p>'.$this->getFieldContent('city').'</p></td>
				</tr>
				<tr>
					<td nowrap="" valign="top" this-="">pi_classParam('singleView-HCell').'><p><strong>'.$this->getFieldHeader('state').'</strong>  </p></td>
					<td valign="top"><p>'.$this->getFieldContent('state').'</p></td>
				</tr>
				<tr>
					<td nowrap="" valign="top" this-="">pi_classParam('singleView-HCell').'><p><strong>'.$this->getFieldHeader('kind_of_spot').'</strong>  </p></td>
					<td valign="top"><p>'.$this->getFieldContent('kind_of_spot').'</p></td>
				</tr>
				<tr>
					<td nowrap="" valign="top" this-="">pi_classParam('singleView-HCell').'><p><strong>'.$this->getFieldHeader('description').'</strong>  </p></td>
					<td valign="top"><p>'.$this->getFieldContent('description').'</p></td>
				</tr>
				<tr>
					<td nowrap="" valign="top" this-="">pi_classParam('singleView-HCell').'><p><strong>'.$this->getFieldHeader('route').'</strong>  </p></td>
					<td valign="top"><p>'.$this->getFieldContent('route').'</p></td>
				</tr>
				<tr>
					<td nowrap="" valign="top" this-="">pi_classParam('singleView-HCell').'><p><strong>'.$this->getFieldHeader('image').'</strong>  </p></td>
					<td valign="top"><p>'.$this->getFieldContent('image').'</p></td>
				</tr>
				<tr>
					<td nowrap="" valign="top" this-="">pi_classParam('singleView-HCell').'><p><strong>'.$this->getFieldHeader('link_to_website').'</strong>  </p></td>
					<td valign="top"><p>'.$this->getFieldContent('link_to_website').'</p></td>
				</tr>
			</table>
		<p>'.$this->pi_list_linkSingle($this->pi_getLL('back','Back'),0).'</p></div>'.
		$this->pi_getEditPanel();
	
		return $content;
	}
	/**
	 * [Put your description here]
	 */
	function pi_list_row($c)	{
		$editPanel = $this->pi_getEditPanel();
		if ($editPanel)	$editPanel='<td>'.$editPanel.'</td>';
	
		return '<tr'.($c%2 this-="">pi_classParam('listrow-odd') : '').'>
				<td valign="top"><p>'.$this->getFieldContent('city').'   </p></td>
				<td valign="top"><p>'.$this->getFieldContent('kind_of_spot').'   </p></td>
				<td valign="top"><p>'.$this->getFieldContent('state').'   </p></td>
			</tr>';
	}
	/**
	 * [Put your description here]
	 */
	function pi_list_header()	{
		return '<tr'.$this->pi_classParam('listrow-header').'>
				<td><p>'.$this->getFieldHeader_sortLink('city').'   </p><p></p></td>
				<td><p>'.$this->getFieldHeader_sortLink('kind_of_spot').'   </p><p></p></td>
				<td><p>'.$this->getFieldHeader_sortLink('state').'   </p><p></p></td>
			</tr>';
	}
	/**
	 * [Put your description here]
	 */
	function getFieldContent($fN)	{
		switch($fN) {
			case 'city':
				return $this->pi_list_linkSingle($this->internal['currentRow'][$fN],$this->internal['currentRow']['uid'],1);	// The "1" means that the display of single items is CACHED! Set to zero to disable caching.
			break;
			case 'state':
				if (!count($this->stateCache)) {
				$query = 'SELECT * FROM user_mtbspotguide_states WHERE pid='.intval($GLOBALS["TSFE"]->id).
						$this->cObj->enableFields('user_mtbspotguide_states');
					$res = mysql(TYPO3_db,$query);
					while($row=mysql_fetch_assoc($res)) {
					$this->stateCache[$row['uid']]=$row;
					}
				}
			return htmlspecialchars($this->stateCache[$this->internal['currentRow']['state']]['state']);
			break;
			case 'kind_of_spot':
				if (!count($this->kind_of_spotCache)) {
				$query = 'SELECT * FROM user_mtbspotguide_kind_of_spot WHERE pid='.intval($GLOBALS["TSFE"]->id).
						$this->cObj->enableFields('user_mtbspotguide_kind_of_spot');
					$res = mysql(TYPO3_db,$query);
					while($row=mysql_fetch_assoc($res)) {
					$this->kind_of_spotCache[$row['uid']]=$row;
					}
				}
			return htmlspecialchars($this->kind_of_spotCache[$this->internal['currentRow']['kind_of_spot']]['kind_of_spot']);
			break;
			default:
				return $this->internal['currentRow'][$fN];
			break;
		}
	}
	/**
	 * [Put your description here]
	 */
	function getFieldHeader($fN)	{
		switch($fN) {
			
			default:
				return $this->pi_getLL('listFieldHeader_'.$fN,'['.$fN.']');
			break;
		}
	}
	
	/**
	 * [Put your description here]
	 */
	function getFieldHeader_sortLink($fN)	{
		return $this->pi_linkTP_keepPIvars($this->getFieldHeader($fN),array('sort'=>$fN.':'.($this->internal['descFlag']?0:1)));
	}
}



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

?>
woida ·

Ich weiß zwar nicht, für was dieser riesen Code-Post gut sein soll, aber es ist ganz einfach:

$typolink_conf=array(
  "parameter" => $link,
  "extTarget" => '_blank',
  "target" => '_self'
);
$meinlink=$this->cObj->typolink('Ich bin in toller Linktext',$typolink_conf);

Damit verlinkst du den Text 'Ich bin in toller Linktext' mit dem Wert von $link. Das kann entweder ein interner Link (=uid einer Seite), ein externer Link (= URL), eine Datei aus deinem fileadmin/ oder eine Mailadresse sein.
Interne Links werden auf der selben Seite ("target" => '_self'), externe Links in einer neuen Seite ("extTarget" => '_blank') geöffnet.
Der Link steht dann in der Variablen $meinlink zu deiner weiteren Verwendung.

Für weitere Funktionen (z.b. popup) empfehle ich dir die Doku von typolink:
https://docs.typo3.org/m/typo3/reference-typoscript/main/en-us/Functions/Typolink.html