/admin/elemente/class_element_votings.php
An sich wurde der Aufbau von Elementen ja bereits durch zwei Tutorials behandelt:
Deshalb und trotzdem :) soll auch das Votings-Seitenelement kurz betrachtet werden.
class class_element_votings extends class_element_admin implements interface_admin_element {
public function __construct() {
$arrModule = array();
$arrModule["name"] = "element_votings";
$arrModule["author"] = "sidler @ mulchprod.de";
$arrModule["moduleId"] = _pages_elemente_modul_id_;
$arrModule["table"] = _dbprefix_."element_universal";
$arrModule["modul"] = "elemente";
$arrModule["tableColumns"] = "char1|char,char2|char,int1|number";
parent::__construct($arrModule);
}
Der Konstruktor definiert mal wieder ein paar Metadaten. Relevant sind hierfür die Einträge „table“ sowie „tableColumns“, da auf Basis dieser das Framework den SQL-Code zum Speichern des Elements erzeugt.
Siehe hierzu auch
- http://apidocs.kajona.de/v3.3.0/modul_pages/interface_admin_element.html
- http://apidocs.kajona.de/v3.3.0/modul_pages/class_element_admin.html
public function getEditForm($arrElementData) {
$strReturn = "";
$arrRawVotings = class_modul_votings_voting::getVotings(true);
$arrVotings = array();
foreach ($arrRawVotings as $objOneVoting)
$arrVotings[$objOneVoting->getSystemid()] = $objOneVoting->getStrTitle();
$strReturn .= $this->objToolkit->formInputDropdown("char1", $arrVotings, $this->getText("votings_voting"), (isset($arrElementData["char1"]) ? $arrElementData["char1"] : "" ));
Das erste Feld des Formulars bietet in einem Dropdown das anzuzeigende Voting zur Auswahl. Angeboten werden jedoch nur aktive Votings (deshalb der Parameter „true“ beim Laden der Votings).
$objFilesystem = new class_filesystem();
$arrTemplates = $objFilesystem->getFilelist("/templates/modul_votings", ".tpl");
$arrTemplatesDD = array();
if(count($arrTemplates) > 0) {
foreach($arrTemplates as $strTemplate) {
$arrTemplatesDD[$strTemplate] = $strTemplate;
}
}
if(count($arrTemplates) == 1)
$this->addOptionalFormElement($this->objToolkit->formInputDropdown("char2", $arrTemplatesDD, $this->getText("votings_template"), (isset($arrElementData["char2"]) ? $arrElementData["char2"] : "" )));
else
$strReturn .= $this->objToolkit->formInputDropdown("char2", $arrTemplatesDD, $this->getText("votings_template"), (isset($arrElementData["char2"]) ? $arrElementData["char2"] : "" ));
Aus dem Dateisystem werden die verfügbaren Templates geladen. Gibt es nur ein Template, dann wird dieses als optionales Element hinzugefügt, ist also per default ausgeblendet (http://apidocs.kajona.de/v3.3.0/modul_pages/class_element_admin.html#addOptionalFormElement). Anderenfalls wird das Dropdown dem Formular wie üblich angefügt.
$arrModeDD = array(
"0" => $this->getText("votings_mode_voting"),
"1" => $this->getText("votings_mode_result")
);
$strReturn .= $this->objToolkit->formInputDropdown("int1", $arrModeDD, $this->getText("votings_mode"), (isset($arrElementData["int1"]) ? $arrElementData["int1"] : "" ));
$strReturn .= $this->objToolkit->setBrowserFocus("char1");
return $strReturn;
}
}
Wie in den Anforderungen definiert bietet das letzte Dropdown die Möglichkeit, den Modus des Elements einzustellen: Abstimmung oder Ergebnis.
/portal/elemente/class_element_votings.php
class class_element_votings extends class_element_portal implements interface_portal_element {
public function __construct($objElementData) {
$arrModule = array();
$arrModule["name"] = "element_votings";
$arrModule["author"] = "sidler @ mulchprod.de";
$arrModule["moduleId"] = _pages_elemente_modul_id_;
$arrModule["table"] = _dbprefix_."element_universal";
parent::__construct($arrModule, $objElementData);
}
Kein weiterer Kommentar ;). Wie vermutlich zu erahnen, ist auch hier besonders der Eintrag „table“ relevant. Aus der angegebenen Tabelle lädt das Framework die entsprechenden Daten des Elements und stellt es diesem zur Verfügung.
public function loadData() {
$strReturn = "";
$objvotingsModule = class_modul_system_module::getModuleByName("votings");
if($objvotingsModule != null) {
$strClassName = uniStrReplace(".php", "", $objvotingsModule->getStrNamePortal());
$objVotings = new $strClassName($this->arrElementData);
$strReturn = $objVotings->action();
}
return $strReturn;
}
}
Die Funktionalität des Elements beschränkt sich darauf, die Metadaten des Votings-Moduls zu Laden und eine Instanz der Portal-Klasse zu erzeugen. An diese wird dann die Kontrolle übergeben. Das Seitenelement dient also lediglich als Fabrik für das Voting-Modul und als Vermittler zwischen Seite und Modul.



