Support » Plugins » Auslastung Freibad bei Corona

  • Gelöst wiegard

    (@wiegard)


    Moin.

    Anfang Juni dürfen // können wir unser BürgerFreibad in Selm unter Auflagen öffen.

    Der Vorstand sucht eine einfache Möglichkeit, aktuell eine Art „Ampel“ auf der WebSite zu haben, um erkennbar zu machen, dass die Maximalanzahl an Besuchern nicht // mehr als zur Hälfte // fast schon ganz erreicht ist.

    Finde ich irgendwo hier ein passendes oder umnutzbares Plugin?

    Die Seite, für die ich Hilfe brauche: [Anmelden, um den Link zu sehen]

Ansicht von 10 Antworten - 1 bis 10 (von insgesamt 10)
  • Wo kommen denn die Belegungsdaten her? Sollen die digital abgerufen werden?

    Falls das manuell eingegeben werden soll, kannst du auch einfach einen Textabsatz mit rotem/gelbem/grünem Hintergrund versehen und „fast voll“, „über 50% voll“ und „wir freuen uns auf deinen Besuch“ reinschreiben.

    Die Daten kommen manuell von der Kasse – der Traum wäre, das man dort per Mail(?) eine Nachricht sendet und die Ampel sich entsprechend ändert.

    An manuelle Beiträge hatte ich auch schon gedacht…

    Per Mail wird das ja noch komplizierter.

    Man kann in einem Text-Widget auch PHP-Code ausführen lassen, habe ich irgendwo mal gesehen, google sollte da weiterhelfen. Oder man erstellt sich sein eigenes Widget.

    Ich würde ein einfaches PHP-Script erstellen, mit dem man per Formular den Text in eine Datei schreibt, dieses Script wird dann einfach direkt aufgerufen, z.B. https://www.example.com/update_status.php

    In dem Text-Widget würde ich dann die Datei auslesen und anzeigen lassen.

    • Diese Antwort wurde geändert vor 1 Monat, 4 Wochen von bscu.

    @bscu Auch wenn ich dir grundsätzlich gerne zustimme und die Lösung sicher in die richtige Richtung geht, nehme ich an, dass hier eine fertige Lösung (ein „passendes Plugin“) gewünscht ist – und da fällt mir spontan auch nichts zu ein.

    Damit sollte man doch einen Beitrag per E-Mail veröffentlichen können. Ich selbst hab das noch nie ausprobiert.

    Mit einem Widget-Plugin wie diesem, könnte man nur einen Beitrag aus der (für die E-Mail) gewählten Kategorie veröffentlichen.

    Ist das Freibad belegt, schickt man einen entsprechenden Beitrag, sind Plätze frei, einen weiteren Beitrag. Da immer nur der aktuelle angezeigt wird, sollte das kein Problem sein.

    Man hat ja im Moment viel Zeit und nichts besseres zu tun 🙂

    Hier das PHP-Script, mit dem man den Status eintragen kann. Muss im Root-Verzeichnis des Webspaces abgelegt werden, Dateiname ist egal, nur die Extension muss .php sein:

    <?php
       $stati = array("Die Maximalanzahl an Besuchern ist nicht erreicht",
                      "Die Maximalanzahl an Besuchern ist mehr als zur Hälfte erreicht",
                      "Die Maximalanzahl an Besuchern ist fast schon ganz erreicht",
                      "Das Freibad ist geschlossen");
    
       if (file_exists("status.txt"))
          $status = trim(file_get_contents("status.txt"));
       else
         $status = 0;
         
       if (isset($_POST['status']))
       {
          $status = $_POST['status'];
          
          file_put_contents("status.txt", $status);
       }
    ?>
    <!DOCTYPE html>
    <html lang="de">
      <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Maximalanzahl an Besuchern</title>
      </head>
      <body>
        <h3>Maximalanzahl an Besuchern eintragen</h3>
        <form action="" method="post">
    <?php
         for ($i = 0; $i < count($stati); $i++)
         {
            $checked = ($i == $status) ? "checked='checked'" : "";
            
            echo "<input type='radio' name='status' value='$i' $checked> " . $stati[$i] . "<br>\n";
         }
    ?>
         <input type="submit" name="submit" value="Speichern">
        </form>
      </body>
    </html>

    Und dann das Plugin, dazu einfach unter wp-content/plugins ein Verzeichnis anlegen, z.B. auslastung. Dann diesen Quellcode als PHP-Script in dieses Verzeichnis kopieren. Danach unter Plugins das Plugin „Auslastung des Freibades“ aktivieren. Nun kann man unter „Widgets“ dieses Plugin z.B. in die Seitenleiste einbauen

    <?php
    /*
    Plugin Name: Capaticy
    Description: Zeigt die Auslastung des Freibades an
    Author: bscu
    Version: 0.1
    */
    
    // Register Capacity_Widget widget
    function register_Capacity_widget() {
        register_widget( 'Capacity_Widget' );
    }
    add_action( 'widgets_init', 'register_Capacity_widget' );
    
    class Capacity_Widget extends WP_Widget {
    
     /**
    	 * Holds widget settings defaults, populated in constructor.
    	 *
    	 * @var array
    	 */
    	protected $defaults;
    
    /**
     * Register widget with WordPress.
     */
    	public function __construct() 
    	{
    	    parent::__construct('Capacity_widget',
    	                        'Auslastung des Freibades',
    	                        array(
    	                            'description' => 'Zeigt die Auslastung des Freibades an.'
    	                        )
    	                      );
       }
    
    /**
    	 * Front-end display of widget.
    	 *
    	 * @see WP_Widget::widget()
    	 *
    	 * @param array $args     Widget arguments.
    	 * @param array $instance Saved values from database.
    	 */
    	    public function widget($args, $instance) 
    	    {
                $stati = array("Die Maximalanzahl an Besuchern ist nicht erreicht",
                               "Die Maximalanzahl an Besuchern ist mehr als zur Hälfte erreicht",
                               "Die Maximalanzahl an Besuchern ist fast schon ganz erreicht",
                               "Das Freibad ist geschlossen");
                      
    	        extract($args);
    	        $title = apply_filters('widget_title', $instance['title']);
    	 
    	        echo $before_widget;
    	         
    	        if(!empty($title))
    	        {
    	            echo $before_title . $title . $after_title;
    	        }
    
               if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/status.txt"))
               {
                  $status = trim(file_get_contents("status.txt"));
                  
                  switch ($status)
                  {
                      case 0: {
                                $text  = $stati[0];
                                $color = '#000000';
                                $background_color = '#00ff00';
                              }
                              break;
                      case 1: {
                                $text  = $stati[1];
                                $color = '#000000';
                                $background_color = '#ffff00';
                              }
                              break;
                      case 2: {
                                $text  = $stati[2];
                                $color = '#ffffff';
                                $background_color = '#ff0000';
                              }
                              break;
                      case 3: {
                                $text  = $stati[3];
                                $color = '#ffffff';
                                $background_color = '#ff0000';
                              }
                              break;
                      default: {
                                $text  = "Die Maximalanzahl an Besuchern kann zur Zeit nicht angezeigt werden.";
                                $color = '#000000';
                                $background_color = '#ffffff';
                              }
                              break;
                  }
    
                  echo "<p style='margin:0; padding: 10px; font-size: 14px; background-color: $background_color; color:$color;'>$text</p>\n";              
              }
              else
                echo "<p style='margin:0; padding: 10px; font-size: 14px; background-color: $background_color; color:$color;'>Die Maximalanzahl an Besuchern kann zur Zeit nicht angezeigt werden.</p>\n";
                
    	      echo $after_widget;
    	    }
    
    	public function form($instance) 
    	    {
    	        $defaults = array(
    	            'title' => ''
    	        );
                
    	        $instance = wp_parse_args((array)$instance, $defaults);
    	 
    	        $title = $instance['title'];
    
    	        ?>
    	        <p>
    	            <label for="<?php echo $this->get_field_id('title'); ?>"><?php echo 'Titel:'; ?></label> 
    	            <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo esc_attr($title); ?>" />
    	        </p>
    	        
    	        <?php
    	    }
    
     /**
    	 * Sanitize widget form values as they are saved.
    	 *
    	 * @see WP_Widget::update()
    	 *
    	 * @param array $new_instance Values just sent to be saved.
    	 * @param array $old_instance Previously saved values from database.
    	 *
    	 * @return array Updated safe values to be saved.
    	 */
    function update( $new_instance, $old_instance ) {
    
    		$instance['title'] = strip_tags($new_instance['title']);
    		
    		return $new_instance;
    	}
    }

    Noch ein Hinweis, bevor man das Widget nutzt, sollte ein mal vorher der Status eingestellt werden.

    • Diese Antwort wurde geändert vor 1 Monat, 3 Wochen von bscu.

    Vielen Dank für eure Hilfe :-)!!! Hat alles super geklappt.

    Auch von uns oder mir ganz herzlichen Dank.

    Durch ein leicht nervöses HinundHer ist die zeitnähere und angemessene Rückmeldung hier untergegangen. Das vorangegangene Posting ht mich da „brutal“ geweckt.

    Mag auch daran liegen, das der anfragenden Vorstand diese, seine Anfrage stillschweigend beerdigt hat.

    Also: Danke!

    @bscu sehr geiler PHP Script. Wir haben ihn auch schon im Einsatz. Könntest du vielleicht noch was in das PHP Script einfügen?

    Ein hour date picker? Das da stehen würde. „Das Freibad öffnet heute um 16:00 Uhr?“

    Leider konnte ich dir keine Private Nachricht schreiben.

    @erfrischend
    Das macht doch keinen Sinn, die Öffnungszeiten in dieses Widget zu packen. Wir hoffen ja alle. dass die Einschränkungen irgendwann komplett aufgehoben werden, dann wirst du ja dieses Widget wieder entfernen. Und somit entfernst du auch den Hinweis auf die Öffnungszeiten.

Ansicht von 10 Antworten - 1 bis 10 (von insgesamt 10)