Module schreiben

Fragen Rund um den Quelltext.
Lehrling
Beiträge: 0
Registriert: Do 27. Apr 2017, 05:31

Re: Module schreiben

Beitragvon Lehrling » Fr 5. Mai 2017, 06:11

Moin Moin,

das hab ich mit als erstes geprüft und schon abgeändert in

Code: Alles auswählen

$where = " YEAR(b.datum) < '$jahr'";
Aber trotzdem geht es bei mir nicht.
Werder über meinen hinzugefügten Menüpunkt (blank page), noch wenn ich die URL selbst eingebe. Oder muss das etwas so aussehen wie im anhang?
Denn ich dachte zumindest das eine Tabelle zu sehen wäre.

Grüße
Dateianhänge
Auswahl_001.png
Auswahl_001.png (30.16 KiB) 255 mal betrachtet

Lehrling
Beiträge: 0
Registriert: Do 27. Apr 2017, 05:31

Re: Module schreiben

Beitragvon Lehrling » Fr 5. Mai 2017, 06:47

Nachtrag:

wenn ich aber das modul so aufrufe wie ich die datei auch benannt habe, nämlich beispiel.php (also klein geschrieben) dann bekomme ich immer eine leere Seite (blank page)

Lehrling
Beiträge: 0
Registriert: Do 27. Apr 2017, 05:31

Re: Module schreiben

Beitragvon Lehrling » Fr 5. Mai 2017, 09:12

Moin Moin ,
also nachdem ich mir das ganze System nochmal installiert habe auf einer VM mit der Version 17.1 und jetzt funktioniert das Beispielmodul auch. Auch mit meinem Erstellten Menü.

Grüße

sauterbe
Administrator
Beiträge: 6
Registriert: Mi 31. Dez 2014, 13:34

Re: Module schreiben

Beitragvon sauterbe » So 7. Mai 2017, 10:25

ok - eventuell ist bei der 16.3 noch was ich schreib mal rein ab 17.1 dann ist es klarer

danke für das Feedback

Lehrling
Beiträge: 0
Registriert: Do 27. Apr 2017, 05:31

Re: Module schreiben

Beitragvon Lehrling » Do 11. Mai 2017, 07:06

Moin Moin,

Leider habe ich Keine vernünftige Erklärung gefunden mit der
Arbeit mit dem date- und timepicker. Vor allem wegen dem Format denn sql
speichert ja genau andersrum als der "normale" Mensch angibt nur wenn ich
versuche das Format über DATE_FORMAT anzupassen bekomme ich eine "blank
page". Außerdem zieht er beim Editieren nicht mehr die id von den Einträgen
aus der Datenbank obwohl ich die angaben mit 3 anderen Skripten verglichen
habe und keinen Fehler entdeckt habe. (Vor allem wo ich das funktionierende
Beispielmodul genommen habe und etwas abgeändert habe nach meinen
Vorstellung), da fällt mich ein da funktioniert das mit dem Datum ja auch
nicht so wie es soll wegen der fehlenden Datums Format Angabe.

Grüße

sauterbe
Administrator
Beiträge: 6
Registriert: Mi 31. Dez 2014, 13:34

Re: Module schreiben

Beitragvon sauterbe » Fr 12. Mai 2017, 11:54

man muss in php das format anpassen z.B. mit strtotime o.ä.

Lehrling
Beiträge: 0
Registriert: Do 27. Apr 2017, 05:31

Re: Module schreiben

Beitragvon Lehrling » Fr 12. Mai 2017, 12:15

Moin,
das hab ich ja versucht aber egal was ich versucht habe ich habe dann immer eine weiße seite dann bekommen.
Grüße

sauterbe
Administrator
Beiträge: 6
Registriert: Mi 31. Dez 2014, 13:34

Re: Module schreiben

Beitragvon sauterbe » Sa 13. Mai 2017, 05:58

kannst du dein aktuelles beispiel hier heraufladen / dann kann ich es kurz mal anschauen

Lehrling
Beiträge: 0
Registriert: Do 27. Apr 2017, 05:31

Re: Module schreiben

Beitragvon Lehrling » Di 16. Mai 2017, 06:02

Moin Moin,

könnte ich schon, aber da ich alle versuche das Format zu setzen rückgängig gemacht habe weiß ich nicht ob es es was bringt den Code hoch zu laden.
Grüße

Lehrling
Beiträge: 0
Registriert: Do 27. Apr 2017, 05:31

Re: Module schreiben

Beitragvon Lehrling » Di 16. Mai 2017, 13:49

Moin Moin,

ich hab jetzt den Code etwas angepasst das es zumindest ein bisschen funktioniert.
Ich hab den DatePicker drin und es auch schon geschafft das es beim edit zumindest das Datum nach dem Format %d.%m.%Y anzeigt, nur beim Speichern funktioniert das ganze noch nicht. Wenn ich versuche bei der Funktion GetInput das Date_Format anzuwenden dann bekomme ich immer die Fehlermeldung das ich dann doch ein Datum angeben soll.

Hier der php code vom modul.
Das wehre, groupby und das count ist deswegen auskommentiert weil ich alle in meiner Datenbank befindlichen Einträge aufgelistet bekommen möchte.

Code: Alles auswählen

<?php
//WAWIFILEONLYON VERSION=ALL
 
class Beispielmodul {
  var $app;
 
  static function TableSearch(&$app, $name, $erlaubtevars)
  {
    // in dieses switch alle lokalen Tabellen (diese Live Tabellen mit Suche etc.) für dieses Modul
    switch($name)
    {
      case "beispielmodul_list":
        $allowed['beispielmodul'] = array('list');
 
        $heading = array('Adresse', 'Datum', 'Beschreibung', 'Menü');
        $width = array('40%', '30%', '20%', '10%');
 
        $findcols = array('b.id', 'b.adresse', 'b.datum', 'b.beschreibung');
        $searchsql = array('b.id', 'b.adresse', 'b.datum', 'b.beschreibung');
 
        $defaultorder = 1;
        $defaultorderdesc = 0;
 
        $jahr = date("Y");
 
        $menu = "<a href=\"index.php?module=beispielmodul&action=edit&id=%value%\"><img src=\"./themes/{$app->Conf->WFconf['defaulttheme']}/images/edit.png\" border=\"0\"></a>";
 
        $sql = "SELECT SQL_CALC_FOUND_ROWS b.id, b.adresse, DATE_FORMAT(b.datum, '%d.%m.%Y'), b.beschreibung, b.id FROM beispielmodul b"; 
 
//        $where = " YEAR(b.datum) < '$jahr'";
 
//        $groupby = "GROUP BY b.datum";
 
 
//        $count = "SELECT count(DISTINCT b.id) FROM beispielmodul b WHERE $where";
        break;      
    }
 
    $erg = false;
 
    foreach($erlaubtevars as $k => $v)
    {
      if(isset($$v))$erg[$v] = $$v;
    }
    return $erg;
  }

  function __construct($app, $intern = false)
  {
    $this->app=&$app;
    if($intern)return;
    $this->app->ActionHandlerInit($this);
    //Ab hier alle ActionHandler definieren die das Modul hat
    $this->app->ActionHandler("list", "BeispielmodulList");
    $this->app->ActionHandler("create", "BeispielmodulCreate");
    $this->app->ActionHandler("edit", "BeispielmodulEdit");
    $this->app->ActionHandler("delete", "BeispielmodulDelete");   
    $this->app->ActionHandlerListen($app);
    $this->Install();
  }

  function Install()
  {
    $this->app->erp->CheckTable("beispielmodul");
    $this->app->erp->CheckColumn("id", "int(11)", "beispielmodul", "NOT NULL AUTO_INCREMENT");
    $this->app->erp->CheckColumn("adresse", "int(11)", "beispielmodul", "NOT NULL");
    $this->app->erp->CheckColumn("datum", "DATE", "beispielmodul", "NOT NULL");
    $this->app->erp->CheckColumn("beschreibung", "VARCHAR(255)", "beispielmodul", "NOT NULL");
  }

  function BeispielmodulList()
  {
    $this->app->erp->MenuEintrag("index.php?module=beispielmodul&action=create","Neuer Eintrag");
    $this->app->erp->MenuEintrag("index.php?module=beispielmodul&action=list","&Uuml;bersicht");
 
    $this->app->YUI->TableSearch('TAB1','beispielmodul_list', "show","","",basename(__FILE__), __CLASS__);
    $this->app->Tpl->Parse("PAGE","beispielmodul_list.tpl");
 
  }

  function BeispielmodulEdit()
  {
    $this->app->erp->MenuEintrag("index.php?module=beispielmodul&action=edit&id=$id","Details");
    $this->app->erp->MenuEintrag("index.php?module=beispielmodul&action=list","Zur&uuml;ck zur &Uuml;bersicht");

    $this->app->YUI->DatePicker('datums');
 
    $id = (int)$this->app->Secure->GetGET('id');
    $speichern = $this->app->Secure->GetPOST('speichern');
 
    $input = array();
 
    $input = $this->GetInput();
 
    if(is_numeric($id) && $speichern!=''){
 
      $error = '';
      if($input['datum']=='') $error .= 'Geben Sie bitte ein Datum ein.<br>';
      if($input['beschreibung'] == '') $error .= 'Geben Sie bitte eine Beschreibung ein.<br>';
 
      if($error!=''){
        $this->app->Tpl->Set('MESSAGE', "<div class=\"error\">$error</div>");
      }else{
        if($error == ""){
          $this->app->DB->Update("UPDATE beispielmodul SET DATE_FORMAT(datum, '%Y-%m-%d') ='{$input['datum']}', beschreibung='{$input['beschreibung']}' WHERE id = '$id' LIMIT 1");
 
          $this->app->Tpl->Set('MESSAGE', "<div class=\"success\">Die Einstellungen wurden erfolgreich &uuml;bernommen.</div>");
        }
      }
    }
    $datum = $this->app->DB->Select("SELECT DATE_FORMAT(datum, '%d.%m.%Y') FROM beispielmodul WHERE id = '$id'");
    $beschreibung = $this->app->DB->Select("SELECT beschreibung FROM beispielmodul WHERE id = '$id'");
 
    $this->app->Tpl->Set('DATUM', $datum);
    $this->app->Tpl->Set('BESCHREIBUNG', $beschreibung);
 
    $this->app->Tpl->Parse('PAGE', "beispielmodul_edit.tpl");
 
 
  }

  function BeispielmodulDelete()
  {
    $ref = $_SERVER['HTTP_REFERER'];
    $id = $this->app->Secure->GetGET("id");
    $this->app->DB->DELETE("DELETE FROM beispielmodul WHERE id = '$id' LIMIT 1");
 
    header("Location: $ref");
    exit;
  }

 function BeispielmodulCreate()
  {
    $this->app->erp->MenuEintrag("index.php?module=beispielmodul&action=list","Zur&uuml;ck zur &Uuml;bersicht");
 
    $input = $this->GetInput();
    $speichern = $this->app->Secure->GetPOST("speichern");

    $this->app->YUI->DatePicker('datums');
 
    if($speichern != ""){
 
      $error = '';
 
      if($input['datum']=='') $error .= 'Geben Sie bitte ein Datum ein.<br>';
      if($input['beschreibung']=='') $error .= 'Geben Sie bitte eine Beschreibung ein.<br>';
 
      if($error!=''){
        $this->app->Tpl->Set('MESSAGE', "<div class=\"error\">$error</div>");
      }else{
        $this->app->DB->Insert("INSERT INTO beispielmodul (datum, beschreibung) VALUES ('{$input['datum']}', '{$input['beschreibung']}')");
        $newid = $this->app->DB->GetInsertID();
        $msg = $this->app->erp->base64_url_encode("<div class=\"success\">Der Eintrag wurde erfolgreich angelegt.</div>");
        header("Location: index.php?module=beispielmodul&action=edit&id=$newid&msg=$msg");
        exit;
      }
    }
 
    $this->SetInput($input); 
 
    $this->app->Tpl->Parse('PAGE', "beispielmodul_edit.tpl");
  }

  function GetInput(){
    $input = array();
    $input['datum'] = $this->app->Secure->GetPOST('datum');
    $input['beschreibung'] = $this->app->Secure->GetPOST('beschreibung');
 
    return $input;
  }

  function SetInput($input){
    $this->app->Tpl->Set('DATUM', $input['datum']);
    $this->app->Tpl->Set('BESCHREIBUNG', $input['beschreibung']);
  }
}
?>
Und die passende edit.tpl dazu

Code: Alles auswählen


<!-- WAWIFILEONLYON VERSION=ALL -->
<!-- gehoert zu tabview -->
<div id="tabs">
    <ul>
        <li><a href="#tabs-1"></a></li>
    </ul>
<!-- ende gehoert zu tabview -->
 
<!-- erstes tab -->
    <div id="tabs-1">
        [MESSAGE]
        <form action="" method="post">
            <fieldset>
                <legend>Land</legend>
                <table width="100%" border="0" class="mkTableFormular">
                    <tr><td>Datum:(yyyy-mm-dd) </td><td><input type="text" id="datums" name="datum" value="[DATUM]" size="40"></td></tr>
           	    <tr><td>Beschreibung: </td><td><input type="text" name="beschreibung" value="[BESCHREIBUNG]" size="40"></td></tr>
                </table>
            </fieldset>
            <input type="submit" name="speichern" value="Speichern" style="float:right"/>
        </form>
    </div>
<!-- tab view schließen -->
</div>

die list.tpl ist wie im Helpdest beschrieben!

P.S. Beim Beispielmodul im Helpdesk ist auch der php-Tag nicht geschlossen worden am ende der Datei!! ;)

Grüße