Seite 1 von 1

Klasse für input-Breich eigener Module

Verfasst: Di 21. Mär 2006, 14:52
von jouwe
Hallo allerseits,

ich denke nachdem ich immer fleißig das Forum für eigene Entwicklungen genutzt haben sollte ich auch mal etwas dazu beitragen. Mich hat bei den Entwicklungen eigener Module immer die Erstellung des input-Bereichs für das Modul backend genervt. Um das leidige Thema zu vereinfachen habe ich eine Klasse erstellt, mit der auf einfache Weise ein eigener input-Bereich nach belieben zusammen gestellt werden kann. Im output-Bereich kann man sich dann ganz einfach der CMS-Variablen bedienen und bei Bedarf ohne Stress weitere Felder im input-Bereich hinzufügen.

Anmerkung:
- Die Klasse lebt von verschiedenen Artikellisten Modulen aus dem Forum - ich habe mir hier Anregungen für die Erstellung der SelectBox geholt.

- Momentan ist nur eine SelectBox für Kategoriebäume, eine SelectBox für eigene Werte und ein Kommentarfeld drin

- den Funktionen für die SelectBoxen werden folgende Parameter übergeben: CMS_VALUE[x], CMS_VAR[x],"Beschreibung"

- hier wird es bestimmt noch viele Erweiterungen geben. Ich freue mich schon drauf.

- und last but not least: Ja der Code ist nicht unbedingt der beste. Aber ich habe nun mal wenig Zeit und für mich reicht es erst mal. Es steht aber jeden Leser frei Verbesserungen einzubringen.

Code: Alles auswählen

?><?
/**
  * $Revision: 1.0 $
  * $Date: 2006/03/25 
  */

/**
  * Class inputInterface
  */

if (!class_exists('inputInterface')) {

   class inputInterface {

	   function inputInterface (){
	   }
      
      function showTreeStructure ($selected, $index, $headerstring) {
         
		 global $lang, $client;

         $this->selected = $selected;
         $this->index = $index;
         $this->lang = $lang;
         $this->client = $client;
         $this->headerstring = $headerstring;
         $this->db = new DB_Contenido();
         $this->queryTreeStructure();
         
         echo "<tr><td>".$this->headerstring."</td><td>";
         echo $this->getTreeSelect($this->structure, $this->index);
         echo "</td></tr>"."\n";
      }
      
      function queryTreeStructure() {
         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 getTreeSelect($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>'."\n";
         }
         $returnValue .= '</select>'."\n"; 
         return $returnValue;
      }

   function showSelectBox($value, $var, $valarray ,$headerstring){
          echo '<tr valign=\"top\">'."\n";
          echo '<td width=\"150\">'.$headerstring.'</td>'."\n";
          echo '<td><select name="'.$var.'" size="1">'."\n";

          foreach ($valarray as $inhalt){
             echo '<option value="' . $inhalt . '" ';
             if ($inhalt == $value) {echo 'selected="selected"';}
             echo '>' . $inhalt . '</option>'."\n";
          }
          echo '</select></td></tr>'."\n"; 
	   }

	  function outputComment($comment){
         echo "<tr><td colspan='2'>".$comment."</td></tr>";
	  }

	  function outputStart() {
		echo "<table cellspacing='0' cellpadding='10' border='0'>"."\n";
	  }

	  function outputEnd() {
         echo "</table>"."\n";
	  }
   }
}


$box_1_inhalt = array (
 "created",
 "lastmodified",
 "published",
 "title"
 );

$box_2_inhalt = array (
 "asc",
 "desc"
 );

$inputInterface = new inputInterface();
$inputInterface->outputStart();
$inputInterface->showTreeStructure("CMS_VALUE[1]", "CMS_VAR[1]","Kategorie der Artikelliste <br>(darf nur die Artikel enthalten):");
$inputInterface->showSelectBox ("CMS_VALUE[2]", "CMS_VAR[2]",$box_1_inhalt,"Sortierung der Artikelliste:");
$inputInterface->showSelectBox ("CMS_VALUE[3]", "CMS_VAR[3]",$box_2_inhalt,"Sortierrichtung der Artikelliste:");
$inputInterface->showTreeStructure("CMS_VALUE[4]", "CMS_VAR[4]","Kategorie des Artikeltemplate <br>(darf nur das Template enthalten):");
$inputInterface->outputComment ("Für Änderungen der Einstellungen müssen immer die Templates beider Kategorien zugleich aktualisiert werden!");
$inputInterface->outputEnd();

Verfasst: Mi 22. Mär 2006, 07:08
von emergence
errinnert mich etwas an das was herrb gebaut hat
-> functions.input.helper.php
hier zu finden -> http://contenido.org/forum/viewtopic.php?t=10957

vielleicht findest du dort auch etwas brauchbares für deine klasse...

es gab auch mal etwas das nannte sich mips, das meiner meinung nach die meisten optionen für eine einfache konfiguration bot...
wenn ich jetzt nur wüsste wo das teil ist...

Verfasst: Mi 22. Mär 2006, 11:52
von jouwe
Hallo emergence,

... danke für Deine Reaktion. Ist schon sehr Wahrscheinlich das ich nicht der erste bin der auf die Idee kommt, aber bisher habe ich noch nie so etwas im Forum gesehen. Und wenn dann findet man es nur im Zusammenhang mit einen bestimmten Modul. Das war aber nicht mein Fokus - mir geht es hier ausschließlich um eine allgemeine Klasse mit der die Entwicklung der Backend Funktionalität eines Moduls vereinfacht wird. Ich bin mir sicher das dieses Thema Contenido gut stehen würde. Insbersondere als Anreiz zur Verwendung von Contenido für Einsteiger für die die Entwicklung von Modulen manchmal ein Buch mit sieben Siegeln zu sein scheint. Wäre das nicht ein sinnvolles Thema für eine der include- Klassen?

Gruß
Uwe

Verfasst: Mi 22. Mär 2006, 16:50
von Halchteranerin
emergence hat geschrieben:es gab auch mal etwas das nannte sich mips, das meiner meinung nach die meisten optionen für eine einfache konfiguration bot...
wenn ich jetzt nur wüsste wo das teil ist...
Ich habe hier bei mir mip-forms als zip-Datei, keine Ahnung, woher, und ich weiss auch nicht mehr, wozu es gut sein sollte. :oops: Ist es das, was du meinst, oder meinst du etwas anderes?

Verfasst: Mi 22. Mär 2006, 17:53
von HerrB
Ich bin mir sicher das dieses Thema Contenido gut stehen würde.
Yep, deswegen war die functions.input.helper.php ein Ansatz. Ich werde es nochmal unter Verwendung der cHTML-Klassen überarbeiten, aber sowas in die Richtung sollte es werden.

Gruß
HerrB