• Aktuell
    • Tags
    • Beliebt
    • Benutzer
    • Gruppen
    • Suche
    • Registrieren
    • Anmelden

    Dienstpläne

    ChurchTools Schnittstellen
    3
    8
    2.4k
    Lade mehr Beiträge
    • Älteste zuerst
    • Neuste zuerst
    • Meiste Stimmen
    Antworten
    • In einem neuen Thema antworten
    Anmelden zum Antworten
    Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
    • ?
      Ein ehemaliger Benutzer
      zuletzt editiert von

      Ich versuche die ganze Zeit eine Möglichkeit zu basteln, für die, die kein Internet haben den Dienstplan für ein halbes Jahr zu drucken, jedoch finde ich absolut keine passende API-Funktion mit der ich eine Auflistung für einen bestimmten Zeitraum zu einem bestimmten Dienst erhalte, an wann wer für welchen Dienst eingeteilt ist.
      Hat schon jemand sowas ähnliches gebaut?
      Kann mir jemand sagen, welche Funktion ich dafür brauche (vorzugsweise mit einem kleinen Beispiel). Ich danke schon mal vielmals für die Hinweise!
      Grüße
      Marko

      R 1 Antwort Letzte Antwort Antworten Zitieren 0
      • R
        rschi @Ein ehemaliger Benutzer
        zuletzt editiert von rschi

        @mtlmarko89 Die Dienstpläne kannst du ja über den ical-Link runter laden.

        Allenfalls könnte man was machen, analog dem da:
        https://forum.churchtools.de/topic/2818/ct-exporter

        Hosting bei church.tools

        1 Antwort Letzte Antwort Antworten Zitieren 0
        • ?
          Ein ehemaliger Benutzer
          zuletzt editiert von

          die Dienstpläne per iCal-Link habe ich nicht gefunden, aber man kann mit manuellem Anstoß, indem man sich den Dienstplan im CT direkt als CSV exportiert, die CSV kann man sich ins PHP einlesen und schon zurecht filtern, wie man es braucht.
          Blöd ist hierbei nur, dass die Titelzeile über 2 Zeilen verteilt ist, weshalb das automatische zuordnen aktuelle nicht klappt, zumindest suche ich mir da noch einen Weg, vermutlich mit sowas wie "wenn NULL, dann lass den aktuellen Wert, ansonsten überschreibe" oder sowas in der 2. Zeile...
          Viel besser wäre es aber auch, wenn man sich die "CSV" auch direkt ohne Datei-Erstellung ins Script laden könnte, das wäre dann so viel einfacher ...

          R 1 Antwort Letzte Antwort Antworten Zitieren 0
          • R
            rschi @Ein ehemaliger Benutzer
            zuletzt editiert von

            @mtlmarko89 Wenn du auf dem Dienstplan nach ganz unten scrollst, findest du den Link "Dienstplan abonnieren per iCal".

            Hosting bei church.tools

            1 Antwort Letzte Antwort Antworten Zitieren 0
            • ?
              Ein ehemaliger Benutzer
              zuletzt editiert von

              Ah, jetzt habe ich es gefunden, danke schön, aber inzwischen bin ich mit der CSV-Lösung auch schon fast fertig, Ich muss nur noch die "?" entfernen und für eine bessere Übersichtlichkeit noch einen Zeitraumfilter...

              Auf jeden Fall, vielen Dank für deine Hilfe. Wie meine Lösung aussieht, werde ich später noch posten 🙂

              R 1 Antwort Letzte Antwort Antworten Zitieren -1
              • R
                rschi @Ein ehemaliger Benutzer
                zuletzt editiert von

                @mtlmarko89 Da bin ich mal gespannt!

                Hosting bei church.tools

                1 Antwort Letzte Antwort Antworten Zitieren 0
                • ?
                  Ein ehemaliger Benutzer
                  zuletzt editiert von Ein ehemaliger Benutzer

                  also auf meinem lokalen Web-Server habe ich einen Unterordner "functions". Darin befindet sich die Datei "csv.php".

                  <?php
                  function getstructure($datei, $anzzeilen = 1, $trennzeichen = ";")
                  {
                      $structure = array();
                      $row = 1;
                      if (($handle = fopen($datei, "r")) !== FALSE)
                      {
                          while ((($data = fgetcsv($handle, 1000, $trennzeichen)) !== FALSE) AND ($row 0)
                                  {
                                      $structure[$c] = utf8_encode($data[$c]);
                                  }
                              }
                              $row++;
                          }
                      }
                      return $structure;
                  }
                  function read_csv($datei, $structure, $zbeginn = 2, $trennzeichen = ";", $timefilter1 = "", $timefilter2 = "")
                  {
                      $csv = array();
                      $row = 1;
                      $Dt1 = new DateTime("31.12.1999 23:59:59");
                      $Dt2 = new DateTime("31.12.1999 23:59:59");
                      if (strlen($timefilter1) > 0)
                      {
                          $Dt1 = new DateTime($timefilter1);
                      }
                      if (strlen($timefilter2) > 0)
                      {
                          $Dt2 = new DateTime($timefilter2);
                      }
                      if (($handle = fopen($datei, "r")) !== FALSE)
                      {
                          while ((($data = fgetcsv($handle, 1000, $trennzeichen)) !== FALSE))
                          {
                              if ($row >= $zbeginn)
                              {
                                  $num = count($data);
                                  $dataset = array();
                                  $doadd = true;
                                  for ($c=0; $c= $tDt)
                                          {
                                              if ($Dt < $Dt1)
                                              {
                                                  $doadd = false;
                                              }
                                          }
                                          if ($Dt2 >= $tDt)
                                          {
                                              if ($Dt > $Dt2)
                                              {
                                                  $doadd = false;
                                              }
                                          }
                                      }
                                      if ($doadd)
                                      {
                                          $dataset[$structure[$c]] = utf8_encode($data[$c]);
                                      }
                                  }
                                  $csv[] = $dataset;
                              }
                              $row++;
                          }
                      }
                      return $csv;
                  }
                  function filterstructure($struc, $anz = 0, $word = "")
                  {
                      $structure = array();
                      $a = 0;
                      foreach ($struc as $str)
                      {
                          if (($a <= $anz) or (strlen($word) < 1) or (strtolower($word) == strtolower($str)))
                          {
                              $structure[] = $str;
                          }
                          $a++;
                      }
                      return $structure;
                  }
                  ?>
                  

                  Zur Erläuterung: Die erste Funktion "getstructure" liest die obersten x Zeilen ($anzzeilen) aus und bastelt daraus die Feldtitel zusammen und speichert diese in ein Array.
                  Die 3. der Funktionen ("filterstructure") arbeitet basierend auf der 1. Funktion, hier kann eingeschränkt werden, welche der Felder man nutzen will. Die 2. Funktion "read_csv" fängt dort an, wo die 1. Funktion aufhört. Hier wird der Inhalt der CSV-Datei eingelesen und ebenfalls in Array gespeichert. So viel zur der Hilfsdatei. Hier kommt nun der Inhalt meiner aktuellen index.php (werde diese später mit dem Design erweitern und zu dienstplan.php umbenennen oder sowas).

                  <?php
                  include_once('functions/csv.php');
                  $dienst = "Lobpreis";
                  $DatumVon = "01.08.2017 00:00:00";
                  $DatumBis = "31.12.2017 23:59:59";
                  $struc = getstructure("dienstplan.csv", 2);
                  $structure = filterstructure($struc, 3, $dienst);
                  $arr = read_csv("dienstplan.csv", $struc, 3, ";", $DatumVon, $DatumBis);
                  ?><!DOCTYPE html>
                  <html>
                    <head>
                      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
                    </head>
                    <body>
                      <?php
                  echo '        <table width=100%>'."\n";
                  echo '          <tbody>'."\n";
                  echo '            <tr>'."\n";
                  foreach ($structure as $th)
                  {
                      echo '              <th>'.$th.'</th>'."\n";
                  }
                  echo '            </tr>'."\n";
                  foreach ($arr as $dataset)
                  {
                      echo '            <tr>'."\n";
                      foreach ($structure as $th)
                      {
                         if ($th == $dienst)
                         {
                             echo '              <td>'.str_replace(", ","<br />",$dataset[$th]).'</td>'."\n";
                         }
                         else
                         {
                             echo '              <td>'.$dataset[$th].'</td>'."\n";
                         }
                      }
                      echo '            </tr>'."\n";
                  }
                  echo '          </tbody>'."\n";
                  echo '        </table>'."\n";
                  ?>
                    </body>
                  </html>
                  

                  Dadurch, dass ich hier nun keine Daten direkt aus ChurchTools hole, ist hier das sonst übliche Login nicht nötig. Kurz zu dem, was ich hier mache. Zunächst definiere ich die Parameter für die Aufrufe, also welchen Dienst ich darstellen will und von welchem Zeitraum (andere Schreibweisen aktuell nicht getestet), dann wird die Struktur ermittelt und anschließend auf den interessanten Teil eingeschränkt und dann die Daten eingelesen. Diese Daten werden dann in diesem Fall tabellarisch dargestellt.

                  Ich hoffe, ich habe jetzt nicht zu viel beschrieben. Und ja, ich bin mir sicher, dass es bestimmt auch elegantere Varianten gibt und gewisse Stellen effizienter gestaltet werden könnten. Aber das ist, was wir brauchen und was ich in möglichst wenig Zeit zusammenbasteln konnte 😉

                  Ach ja, Voraussetzung ist zudem, dass der als CSV exportierte Dienstplan mit bei dem PHP-Skript liegt und der Wert des Parameters für den Dienst, muss genauso geschrieben werden, wie der gewünschte Dienst.

                  Irgendwie ist nicht alles vorhanden. Problem scheint das Größer-Als und das Kleiner-Als zu sein. Kann man das irgendwie umgehen?

                  artus70A 1 Antwort Letzte Antwort Antworten Zitieren 0
                  • artus70A
                    artus70 @Ein ehemaliger Benutzer
                    zuletzt editiert von

                    @mtlmarko89 sagte in Dienstpläne:

                    Irgendwie ist nicht alles vorhanden. Problem scheint das Größer-Als und das Kleiner-Als zu sein. Kann man das irgendwie umgehen?

                    Wenn Du Leerzeichen rund um Größer-als und Kleiner-als lässt, könnte es klappen. Habe ich m.W. auch mal so hinbekommen ...

                    CT hosted

                    1 Antwort Letzte Antwort Antworten Zitieren 0
                    • Erster Beitrag
                      Letzter Beitrag