Restaurant mit TagesMenu

Please post the URLs to pages, where you've made a CMSimple template available for download

Moderator: mikey

Tata
Posts: 3586
Joined: Tue May 20, 2008 5:34 am
Location: Slovakia
Contact:

Restaurant mit TagesMenu

Post by Tata » Mon Jan 16, 2017 7:47 am

Ich meine, dass ich diese Webseite ganz ineteressant umgebaut/modernisiert habe.
Die Hauptsache war TagesMenu zeitgesteuert zu veröffentlichen und auf den kleinen Bildschirme ganz am Anfang zu stellen.
Die Zeitsteuerun ist durch ein Script besorgt (einige Variable habe ich in config und <language> erweitert)
Jetzt lohnt sicih das Effekt täglich (Mon-Fr) von 9:30 - 13:30 gut sehen.
Last edited by Tata on Fri Feb 10, 2017 4:35 pm, edited 1 time in total.
CMSimple.sk
It's no shame to ask for an answer if all efforts failed.
But it's awful to ask without any effort to find the answer yourself.

Tata
Posts: 3586
Joined: Tue May 20, 2008 5:34 am
Location: Slovakia
Contact:

Re: Restaurant mit TagesMenu

Post by Tata » Fri Feb 10, 2017 4:35 pm

Gerade bin ich dazu gekommen, dass in dem bestimmten Fall würde ich noch brauchen, dass das Tagesmenu während Wochenende ausgeblendet sein sollte. Sonst am Samstag und Sontag scheint da das Freitagsmenu. Seit Morgen versuche ich es irgendwie hinkriegen, aber immer mache ich in Syntax etwas falsch.

Code: Select all

               </div>     
                    <?php
                         $day_name=array('Nedeľa','Pondelok','Utorok','Streda','Štvrtok','Piatok','Sobota');                            
                         $time = time();
                         $showTime =  strtotime($tx['template']['menu_od']);
                         $hideTime = strtotime($tx['template']['menu_do'], $showTime);
                         $day= strftime("%d");
                         $month = strftime("%m");
                    ?>
                    
               <div class="day-time">
                    <?php echo $day_name[date('w')].", ".date($tx['today']['dateformat'])." hod.";?>
               </div>

               <div class="in">
                    <?php 
                         if ($time < $showTime) {
                         echo '
                              <div align="center">'.$tx['template']['priprava_ponuky_pred'].'</div>';
                              } elseif ($time > $showTime && $time < $hideTime) {
                              echo '
                              <div class="actual" id="actual">'.newsbox('!!!_denne_menu').tag('br').'</div>';
                              } else {
                              echo '
                              <div align="center">'
                                   .$tx['template']['priprava_ponuky_po']
                                   .' o '
                                   .date('H:i',strtotime("+0 minutes",$showTime)).'
                              </div>';
                         }
                    ?>
               </div>
Noch wollte ich eine "Ersatzseite hingeben, so dass die Zwei Seten am Freitag um "$hideTime" ändern Status "Publisched/Nonpublished". Das scheint nicht zu funktionieren. Die "Menuseite" bleibt sichtbar, egal ob "Publisched" oder "Nonpublished".
Es geht um folgendes:
1. Enweder nur den Skript korrekt zu schreiben, um das id="actual" DIV für Wochenende auszublenden, oder
2. Für den id="actual" DIV die zweite Seite (z.B. '000_denne_menu') zu definieren nur für Sam/Son.
Bitte, kann mir jemand damit helfen?
CMSimple.sk
It's no shame to ask for an answer if all efforts failed.
But it's awful to ask without any effort to find the answer yourself.

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

Re: Restaurant mit TagesMenu

Post by cmb » Fri Feb 10, 2017 5:49 pm

Soweit ich es überblicke, sind die relevanten Zeilen:

Code: Select all

                              } elseif ($time > $showTime && $time < $hideTime) {
                              echo '
                              <div class="actual" id="actual">'.newsbox('!!!_denne_menu').tag('br').'</div>';
                              } else {
Da müsste dann wohl nur eine Abfrage auf den Wochentag eingebaut werden:

Code: Select all

                              } elseif ($time > $showTime && $time < $hideTime) {
                              if (in_array(date('w'), array(0, 6))) {
                              echo '
                              <div class="actual" id="actual">'.newsbox('WOCHENENDSEITE').tag('br').'</div>';
                              } else {
                              echo '
                              <div class="actual" id="actual">'.newsbox('!!!_denne_menu').tag('br').'</div>';
                              }
                              } else {
Insgesamt wäre es aber besser den Code umzuschreiben; so wie er jetzt ist, ist er kaum lesbar und nur schwer wartbar. Eine Möglichkeit wäre alles in eine function tagesmenue() auszulagern, und diese dann wie andere Plugin-Aufrufe auch im Template aufzurufen.
Last edited by cmb on Fri Feb 10, 2017 6:58 pm, edited 1 time in total.
Reason: Fix code
Christoph M. Becker – Plugins for CMSimple_XH

Tata
Posts: 3586
Joined: Tue May 20, 2008 5:34 am
Location: Slovakia
Contact:

Re: Restaurant mit TagesMenu

Post by Tata » Fri Feb 10, 2017 6:38 pm

Etwa so habe ich es auch gehabt, aber auch jetzt bakomme ich
Parse error: syntax error, unexpected 'else' (T_ELSE)
cmb wrote:Insgesamt wäre es aber besser den Code umzuschreiben; so wie er jetzt ist, ist er kaum lesbar und nur schwer wartbar. Eine Möglichkeit wäre alles in eine function tagesmenue() auszulagern, und diese dann wie andere Plugin-Aufrufe auch im Template aufzurufen.
Ich fürchte es zu schaffen. Habe schon mal versucht es zum Plugin überschreiben, aber... nach vielen Stunden ... :oops:
CMSimple.sk
It's no shame to ask for an answer if all efforts failed.
But it's awful to ask without any effort to find the answer yourself.

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

Re: Restaurant mit TagesMenu

Post by cmb » Fri Feb 10, 2017 6:59 pm

Tata wrote:Etwa so habe ich es auch gehabt, aber auch jetzt bakomme ich
Parse error: syntax error, unexpected 'else' (T_ELSE)
Ich glaube, da hat einfach ein } gefehlt. Ich habe es nun oben korrigiert.
Christoph M. Becker – Plugins for CMSimple_XH

Tata
Posts: 3586
Joined: Tue May 20, 2008 5:34 am
Location: Slovakia
Contact:

Re: Restaurant mit TagesMenu

Post by Tata » Fri Feb 10, 2017 7:29 pm

Ich habe den Code "tabbiert", um die "}" richtig zu paren und habe auch die fehlende gefunden.
Jetzt gefählt dem Parser etwas neues
Parse error: syntax error, unexpected 'w' (T_STRING), expecting ',' or ';'...
.
Soweit habe ich es durch Seite-Reiter mit Veröfftlichung-Zeitspanne besorgt. Und es ist wohl auch mehr praktisch, weill das Tagesmenu kann auch aus anderen verschiedenen Gründen ausfallen.
Die erste Lösung hatte einen Vorteil, dass man auf der WOCHENENDE Seite etwas geschrieben sein könnte.
CMSimple.sk
It's no shame to ask for an answer if all efforts failed.
But it's awful to ask without any effort to find the answer yourself.

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

Re: Restaurant mit TagesMenu

Post by cmb » Sat Feb 11, 2017 12:46 pm

Tata wrote:Soweit habe ich es durch Seite-Reiter mit Veröfftlichung-Zeitspanne besorgt. Und es ist wohl auch mehr praktisch, weill das Tagesmenu kann auch aus anderen verschiedenen Gründen ausfallen.
Die erste Lösung hatte einen Vorteil, dass man auf der WOCHENENDE Seite etwas geschrieben sein könnte.
Im Prinzip könntest Du auch für die WOCHENENDE Seite einen entsprechenden Veröffentlichungszeitraum eintragen, und dann einfach beide Newsboxen anzeigen lassen (die jeweils unveröffentlichte erzeugt ja keine Ausgabe).

Allerdings muss bei dieser Variante der Veröffentlichungszeitraum täglich (oder zumindest wöchentlich) korrigiert werden, soweit ich es überblicke. Nicht gerade benutzerfreundlich.

Ich habe noch mal Dein Schnipsel von weiter oben überarbeitet, und die gewünschte Weiche für Wochentage/Feiertage eingebaut:

Code: Select all

               </div>     
                    <?php
                         $day_name=array('Nedeľa','Pondelok','Utorok','Streda','Štvrtok','Piatok','Sobota');                            
                         $time = time();
                         $showTime =  strtotime($tx['template']['menu_od']);
                         $hideTime = strtotime($tx['template']['menu_do'], $showTime);
                         $day= strftime("%d");
                         $month = strftime("%m");
                    ?>
                    
               <div class="day-time">
                    <?php echo $day_name[date('w')].", ".date($tx['today']['dateformat'])." hod.";?>
               </div>

               <div class="in">
<?php if ($time < $showTime):?>
                    <div align="center"><?=$tx['template']['priprava_ponuky_pred']?></div>
<?php elseif ($time > $showTime && $time < $hideTime):?>
<?php   if (in_array(date('w'), array(0, 6))):?>
                    <div class="actual" id="actual"><?=newsbox('WOCHENENDSEITE')?><br></div>
<?php   else:?>
                    <div class="actual" id="actual"><?=newsbox('!!!_denne_menu')?><br></div>
<?php   endif?>
<?php else:?>
                    <div align="center">
                        <?=$tx['template']['priprava_ponuky_po'], ' o ', date('H:i', $showTime)?>
                    </div>
<?php endif?>
               </div>
Christoph M. Becker – Plugins for CMSimple_XH

Tata
Posts: 3586
Joined: Tue May 20, 2008 5:34 am
Location: Slovakia
Contact:

Re: Restaurant mit TagesMenu

Post by Tata » Sat Feb 11, 2017 10:20 pm

Ja, das funktioniert.
Ich habe es auch so versucht

Code: Select all

               <div class="in">
                    <?php 
                         if ($time < $showTime) {
                         echo '
                              <div align="center">'.$tx['template']['priprava_ponuky_pred'].'</div>';
                              } elseif (($time > $showTime && $time < $hideTime) && (!in_array(date('w'), array(0, 6)))){
                              echo '
                              <div class="actual" id="actual">'.newsbox('!!!_denne_menu').tag('br').'</div>';
                              } else {
                              echo '
                              <div align="center">
                                   <div class="actual" id="actual">'.newsbox('!!!_weekend_menu').tag('br').'</div>'
                                   .$tx['template']['priprava_ponuky_po']
                                   .' o '
                                   .date('H:i',strtotime("+0 minutes",$showTime)).'
                              </div>';
                         }
                    ?>
               </div>
und es funktioniert auch.
Aber auf der realen Webseite habe ich nur die "!!!_denne_menu'" Seite mit dem Zeitraum für (immer folgende Woche). So ist am Wochenende das Tagesmenu weg. Der Text darunter ist bisschen geändert, so dass es klappt jetzt ganz gut. Der Nachteil ist, dass während Festtage, die ausser Wochenende kommen, klappt das nicht. Faür bin ich entschieden noch eine Seite erstellen (z.B. !!!_denne_menu und !!_dene_menu). Es wird dann einfach, beide Seiten zu übernennen. Die !!-denne_menu wird dann für aktuelle Informationen benutzt und wird nach bedarf gezeigt.
Jedenfalls sind beide Varianten vorbereitet. Vielen Dank für die Hilfe. Wieder etwas zugelernt ;)
CMSimple.sk
It's no shame to ask for an answer if all efforts failed.
But it's awful to ask without any effort to find the answer yourself.

Tata
Posts: 3586
Joined: Tue May 20, 2008 5:34 am
Location: Slovakia
Contact:

Re: Restaurant mit TagesMenu

Post by Tata » Sun Feb 12, 2017 11:57 pm

Ich habe mir nun die Frechheit erlaubt aus dem Skript ein Plugin zu machen. Ich habe noch einige Ideen, wie es noch bisschen pullieren, aber dafür brauche ich noch etwa nehr Frechheit zu sammeln, um noch tiefer zu blagieren.
Hier das Ergebniss: http://sitr_plugin.cmsimple.sk

Bitte, kommentieren.

Oder ein Hinweiss geben, wie noch eine Abfrage reizubekommen, die es konfigurierbar mach, ob die Wochenende auswertet wird oder nicht.
CMSimple.sk
It's no shame to ask for an answer if all efforts failed.
But it's awful to ask without any effort to find the answer yourself.

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

Re: Restaurant mit TagesMenu

Post by cmb » Mon Feb 13, 2017 4:20 pm

Tata wrote:Hier das Ergebniss: http://sitr_plugin.cmsimple.sk
Hm, die Seite zeigt mehrere Deprecated-Warnings an, was nicht sein sollte, siehe https://cmsimpleforum.com/viewtopic.php?f=2&t=12456.
Tata wrote:Oder ein Hinweiss geben, wie noch eine Abfrage reizubekommen, die es konfigurierbar mach, ob die Wochenende auswertet wird oder nicht.
Dazu brauchst Du zunächst eine Konfigurationsvariable, also z.B.:

Code: Select all

$plugin_cf['sitr']['weekend']="1";
Dann kannst Du folgende Zeile:

Code: Select all

}elseif (($time > $startTime && $time < $stopTime) && (!in_array(date('w'), array(0, 6)))){
durch diese ersetzen:

Code: Select all

}elseif (($time > $startTime && $time < $stopTime) && (!$plugin_cf['sitr']['weekend'] || !in_array(date('w'), array(0, 6))))){
Zur Erklärung: es handelt sich hier um eine logische Implikation, die man theoretisch so schreiben könnte:

Code: Select all

Wochenende → kein Wochenendtag
(also falls Wochenenden berücksichtigt werden sollen, dann wird der folgende Code nur ausgeführt, wenn gerade kein Wochenendtag ist)

PHP hat aber keinen Operator für logische Implikation, so dass man die folgende Equivalenz ausnutzen sollte:

Code: Select all

Wochenende → kein Wochenendtag ⇔ !Wochenende || kein Wochenendtag
Das habe ich oben gemacht.

Dann könnte man noch folgendes De Morgansches Gesetz anwenden, was den Code vielleicht etwas besser lesbar macht:

Code: Select all

!A || !B ⇔ !(A && B)
Wirklich lesbar wird's aber erst, wenn man entsprechende Funktionen definiert, so dass man etwa schreiben könnte:

Code: Select all

} elseif (isMenuTime($time) && !isWeekend()) {
Christoph M. Becker – Plugins for CMSimple_XH

Post Reply