Seite 1 von 1

neue klasse :: chooseTree

Verfasst: Fr 25. Nov 2005, 17:54
von kummer
chooseTree

es handelt sich bei chooseTree nicht um ein ganzes modul, sondern nur um eine klasse für den input-bereich. es dient zur auswahl eines verzeichnisbaumes im konfigurationsbereiches von modulen und soll lediglich die baumauswahl etwas vereinfachen.

die anwendung ist sehr einfach:

(1) ganze klasse in den input-bereich kopieren
(2) in der klassen-instantiierung (letzte zeile des codes) den variablenbezeichner sowie den index angeben.

und hier der code:

Code: Alles auswählen

?><?
/**
  * $Revision: 1.7 $
  * $Source: D:/cvs/cvsrepo/test/PPI_Nade/module/articleList/input.php,v $
  * $Date: 2005/11/25 17:41:12 $
  */

/**
  * chooseTree
  * @author Andreas Kummer
  * @copyright Copyright &copy; 2005 w3concepts AG
  */

if (!class_exists('chooseTree')) {

	class chooseTree {
		
		function chooseTree($selected, $index) {
			
			global $lang, $client;
			
			$this->selected = $selected;
			$this->index = $index;
			$this->lang = $lang;
			$this->client = $client;
			
			$this->db = new DB_Contenido();
			$this->queryStructure();
			
			$this->outputInterface();
		}
		
		function queryStructure() {
			
			global $cfg;
			
			$this->db->query("" .
					"SELECT " .
					"	a.idcat, " .
					"	a.level, " .
					"	c.name " .
					"FROM {$cfg['tab']['cat_tree']} AS a, " .
					"{$cfg['tab']['cat']} AS b, " .
					"{$cfg['tab']['cat_lang']} AS c " .
					"WHERE " .
					"	a.idcat = b.idcat " .
					"	AND b.idcat = c.idcat " .
					"	AND c.idlang = '{$this->lang}' " .
					"	AND b.idclient = '{$this->client}' " .
					"	AND c.visible=1 " .
					"ORDER BY " .
					"	a.idtree" .
					"");
					
			$this->structure = array();
			while ($this->db->next_record()) {
				$this->structure[$this->db->f('idcat')] = array('level'=>$this->db->f('level'), 'name'=>$this->db->f('name'));
			}
		}
		
		function outputInterface() {
			
			/*
			 * Tabellenanfang ausgeben
			 */
			echo "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\">";
			
			/*
			 * Zeilenanfang ausgeben
			 */
			echo "<tr><td>Baum wählen:</td><td>";
			
			/*
			 * Select-Feld ausgeben
			 */
			echo $this->getSelect($this->structure, $this->index);
			
			/*
			 * Zeilenende ausgeben
			 */
			echo "</td></tr>";
			
			/*
			 * Tabellenende ausgeben
			 */
			echo "</table>";
		}
		
		function getSelect($structure, $name) {
			
			$returnValue = '<select size="1" name="'.$name.'" class="text_medium">'."\n";
			
			foreach ($structure as $idcat => $item) {
				if ($idcat == $this->selected) {
					$selected = ' selected = "selected"';
				} else {
					$selected = '';
				}
				
				$spaces = "|";
				for ($i = 0; $i < $item['level']; $i ++) {
					$spaces = $spaces . "--";
				}
				$spaces .= ">";
				
				$returnValue .= '<option value="'.$idcat.'"'.$selected.'>'.$spaces.$item['name'].'</option>';
			}
			
			$returnValue .= '</select>'."\n";
			
			return $returnValue;
		}
	}
}

$chooseTree = new chooseTree("CMS_VALUE[1]", "CMS_VAR[1]");
mfg,
andreas

Verfasst: Mi 7. Dez 2005, 11:51
von emergence
errinnert mich irgendwie an die MIPS forms
nichts desto trotz ist ne möglichkeit es so zu machen...
wird sicher einigen etwas arbeit abnehmen... ;-)

Verfasst: Do 8. Dez 2005, 19:27
von HerrB
Das ist als Funktion BuildCategorySelect in Contenido bereits drin (erzeugt komplette Select-Box, bei Angabe des Levels auch zur reinen Baum-Auswahl) ... aber Deine Lösung ist bestimmt hübscher ... :wink:

Ich musste die vorhande Funktion auch gerade nochmal nachbauen, da man bei der vorhandenen z.B. kein (bei mir gerade benötigtes) onChange-Event mitgeben kann...

Gruß
HerrB

Verfasst: Do 8. Dez 2005, 21:31
von i-fekt
Kannst du für Unwissende erklären was genau das Modul bzw. die Klasse macht? Wenni ch ein Modul mit diesem Inhalt oben anlege und in einem Template das Modul auswähle kann ich einen Baum auswählen. Aber was bringt mir das?

Verfasst: Do 8. Dez 2005, 21:48
von mvf
i-fekt hat geschrieben:Kannst du für Unwissende erklären was genau das Modul bzw. die Klasse macht?
wieder nur soweit meine bescheidenen kenntnisse es erlauben, aber dies ist kein eigenständiges modul, sondern eben eine klasse cattree die man für module die im input eine dreartige klasse benötigen nutzen kann. also nur ein 'modulbaustein' für modulentwicklung

Verfasst: Do 8. Dez 2005, 21:55
von HerrB
Ja, es erspart einem, für die Auswahl eines Baumes (ich würde sogar sagen, einer Kategorie) jedes Mal den gleichen Code im Eingabe-Bereich eines Moduls programmieren zu müssen...

Aber wie gesagt, BuildCategorySelect steht - für diesen Zweck - auch zur Verfügung.

Gruß
HerrB

Verfasst: Fr 9. Dez 2005, 08:01
von kummer
ach so, ich habe die built-in-funktion bisher gar nicht gekannt... :oops:

Verfasst: Fr 9. Dez 2005, 12:34
von HerrB
Ich habe sie auch nur in einem Modul des Beispielmandanten V4.6.x entdeckt. Ist IMHO soweit auch die einzige in der Richtung - eine Artikelauswahl sucht man z.B. vergebens...

Gruß
HerrB