Seite 1 von 1

abgelaufene Datumsfelder nicht anzeigen

Verfasst: Mo 29. Aug 2016, 16:44
von r_kempf
Ich habe eine Listview mit Seminaren und möchte in einer Terminbox abgelaufene Termine nicht mehr anzeigen. Der php String if(date) gibt aber gar nichts mehr aus, also auch nicht die Termine, die in der Zukunft liegen. Kann mir eventuell jemand auf die Sprünge helfen?

LG Regina

Code: Alles auswählen

	<we:listview type="object" name="seminar-d" classid="2" workspaceID="19" objectseourls="true" order="Seminar-Nummer" desc="false">
		<we:repeat>
			<div class="panel-seminar">
				<div class="<we:ifFieldNotEmpty type="checkbox" match="Neu">panel-header-seminar-neu <we:else />panel-header-seminar</we:ifFieldNotEmpty>"><a href="<we:field name="we_path" />"><we:ifFieldNotEmpty type="checkbox" match="Neu"><span class="glyphicon glyphicon-certificate"></span> <i>NEU:</i> </we:ifFieldNotEmpty><we:field name="Seminartitel"/></a></div>
				<div class="panel-body-seminar">
					<div class="col-md-8 col-spacer-h">
						<p><we:field name="Kurzbeschreibung"/></p>
					</div>
					<div class="col-md-4 panel-box-seminar">
						<h2>Termine</h2>
						<p>Hamburg</p>
						<?php if(date(Ymd, substr($lv->f("HamburgTermin1a"), 6, 10)) >= date(Ymd, time())): ?> 
						<p><we:field type="date" name="HamburgTermin1a" format="d.m.Y" /> bis <we:field type="date" name="Hamburg-Termin1b" format="d.m.Y" /></p>
						<?php endif; ?>
						<?php if(date(Ymd, substr($lv->f("HamburgTermin2a"), 6, 10)) >= date(Ymd, time())): ?> 
						<p><we:field type="date" name="HamburgTermin2a" format="d.m.Y" /> bis <we:field type="date" name="Hamburg-Termin1b" format="d.m.Y" /></p>
						<?php endif; ?>
						<?php if(date(Ymd, substr($lv->f("HamburgTermin3a"), 6, 10)) >= date(Ymd, time())): ?> 
						<p><we:field type="date" name="HamburgTermin3a" format="d.m.Y" /> bis <we:field type="date" name="Hamburg-Termin1b" format="d.m.Y" /></p>
						<?php endif; ?>
						<p><a class="btn btn-success" href="<we:field name="we_path" />" role="button"><span class="glyphicon glyphicon-circle-arrow-right"></span> zum Seminar</a></p>
					</div>
				</div>
			</div>
		</we:repeat>
	</we:listview>

Re: abgelaufene Datumsfelder nicht anzeigen

Verfasst: Mo 29. Aug 2016, 22:56
von WBTMagnum
Hallo Regina,

Ohne den Aufbau der Lösung zu kennen ist es schwer hier konkrete Aussagen zu treffen. Trotzdem ein paar Fragen als Denkansatz:
  • Welche webEdition Version läuft denn dort?
  • Was steht den in den Feldern "HamburgTermin1a", "HamburgTermin2a" bzw. "HamburgTermin3a"?
  • Hast du dir schon mal den Tag <we:ifField type="date"> angesehen?
  • Je nachdem wie das System aufgebaut ist, kannst du ev. auch mit einer <we:condition> arbeiten und die früheren Termine schon vorab heraus filtern.
  • Hast du mal in den Errorlog geschaut? Ev. finden sich dort sachdienliche Hinweise.
HTH,
Sascha

Re: abgelaufene Datumsfelder nicht anzeigen

Verfasst: Mo 29. Aug 2016, 23:33
von mokraemer
was mir bei dem Kode direkt auffällt:
- es fehlen Anführungszeichen, nicht date(Ymd , sondern date("Ymd"
- du verwendest if(): endif; - das Konstrukt ist in der LV nicht zulässig, denn wir verwenden intern nur noch if(){...} und die Mischung beider Syntax-Varianten ist im gleichen Kontext nicht zulässig
- der Zugriff $lv sollte auch $GLOBALS['lv'] lauten

Re: abgelaufene Datumsfelder nicht anzeigen

Verfasst: Di 30. Aug 2016, 11:24
von r_kempf
Die PHP-Syntax habe ich jetzt geändert, bringt aber kein Ergebnis. Da ist wohl noch ein Syntax-Fehler drin.

Code: Alles auswählen

<?php if(date("Ymd", substr($GLOBALS->f("Hamburg-Termin1a"), 6, 10)) >= date(Ymd, time())): ?>
<p><we:field type="date" name="HamburgTermin1a" format="d.m.Y" /> bis <we:field type="date" name="Hamburg-Termin1b" format="d.m.Y" /></p>
<?php endif; ?>

Re: abgelaufene Datumsfelder nicht anzeigen

Verfasst: Di 30. Aug 2016, 11:59
von mokraemer
du must schon alles machen was ich schreibe...

Code: Alles auswählen

<?php if(date("Ymd", substr($GLOBALS->f("Hamburg-Termin1a"), 6, 10)) >= date("Ymd", time())){ ?>
<p><we:field type="date" name="HamburgTermin1a" format="d.m.Y" /> bis <we:field type="date" name="Hamburg-Termin1b" format="d.m.Y" /></p>
<?php } ?>

Re: abgelaufene Datumsfelder nicht anzeigen

Verfasst: Di 30. Aug 2016, 13:32
von r_kempf
sorry, ich steh auf dem schlauch als PHP-Dummy. Mein Code sieht jetzt so aus und bringt scheinbar WE aus dem Ruder. Das Template ist kaputt, d.h. die HTML-Seite zeigt auch keinen Eigenschaften-Reiter mehr an. Hooks sind auf ja eingestellt.

Code: Alles auswählen

<we:listview type="object" name="seminar-d" classid="2" workspaceID="19" objectseourls="true" order="Seminar-Nummer" desc="false">
<we:repeat>
<?php if(date("Ymd", substr($GLOBALS->f("Hamburg-Termin1a"), 6, 10)) >= date("Ymd", time())){ ?>
<p><we:field type="date" name="HamburgTermin1a" format="d.m.Y" /> bis <we:field type="date" name="HamburgTermin1b" format="d.m.Y" /></p>
<?php } ?>
</we:repeat>
</we:listview>


Re: abgelaufene Datumsfelder nicht anzeigen

Verfasst: Di 30. Aug 2016, 23:35
von mokraemer
sorry, ich hab vorhin nur den einen Fehler bei dir korrigiert, du solltest $GLOBALS['lv'] schreiben. Korrekt sollte das in der Vorlage so aussehen:

Code: Alles auswählen

<we:listview type="object" name="seminar-d" classid="2" workspaceID="19" objectseourls="true" order="Seminar-Nummer" desc="false">
<we:repeat>
<?php if(date("Ymd", substr($GLOBALS['lv']->f("Hamburg-Termin1a"), 6, 10)) >= date("Ymd", time())){ ?>
<p><we:field type="date" name="HamburgTermin1a" format="d.m.Y" /> bis <we:field type="date" name="HamburgTermin1b" format="d.m.Y" /></p>
<?php } ?>
</we:repeat>
</we:listview>
Dann ist auch der fatale php-Fehler weg.

Re: abgelaufene Datumsfelder nicht anzeigen

Verfasst: Do 1. Sep 2016, 11:50
von r_kempf
Danke Marc, dass Du Dir die Zeit nimmst. Wäre das eventuell ein Feauture im WE Tag we:field type=Date? Eventuell als Attribut (nicht anzeigen, wenn abgelaufen).

Leider funktioniert es immer noch nicht. Ich habe drei Termine anzuzeigen (HamburtTermin1a, HamburgTermin2a, HamburgTermin3a). Im Objekt ist der 1a Termin versuchsweise in der Vergangenheit, die anderen liegen in der Zukunft. Es werden aber gar keine angezeigt.
Ich habe den PHP-String jetzt separat für jedes Feld eingefügt und mein Code sieht jetzt so aus:

Code: Alles auswählen

	<we:listview type="object" name="seminar-d" classid="2" workspaceID="19" objectseourls="true" order="Seminar-Nummer" desc="false">
		<we:repeat>
			<div class="col-md-4 panel-box-seminar">
				<h2>Termine</h2>
				<?php if(date("Ymd", substr($GLOBALS['lv']->f("HamburgtTermin1a"), 6, 10)) >= date("Ymd", time())){ ?>
				<p><we:field type="date" name="HamburgTermin1a" format="d.m.Y" /> bis <we:field type="date" name="HamburgTermin1b" format="d.m.Y" /></p>
				<?php } ?>
				<?php if(date("Ymd", substr($GLOBALS['lv']->f("HamburgtTermin2a"), 6, 10)) >= date("Ymd", time())){ ?>
				<p><we:field type="date" name="HamburgTermin2a" format="d.m.Y" /> bis <we:field type="date" name="HamburgTermin2b" format="d.m.Y" /></p>
				<?php } ?>
				<?php if(date("Ymd", substr($GLOBALS['lv']->f("HamburgtTermin3a"), 6, 10)) >= date("Ymd", time())){ ?>
				<p><we:field type="date" name="HamburgTermin3a" format="d.m.Y" /> bis <we:field type="date" name="HamburgTermin3b" format="d.m.Y" /></p>
				<?php } ?>
				<p><a class="btn btn-success" href="<we:field name="we_path" />" role="button"><span class="glyphicon glyphicon-circle-arrow-right"></span> zum Seminar</a></p>
			</div>
		</we:repeat>
	</we:listview>

Re: abgelaufene Datumsfelder nicht anzeigen

Verfasst: Do 1. Sep 2016, 15:58
von WBTMagnum
Hallo Regina,

Poste doch mal die Ausgaben von:
  • $GLOBALS['lv']->f("HamburgtTermin2a")
  • substr($GLOBALS['lv']->f("HamburgtTermin2a"), 6, 10)
  • date("Ymd", substr($GLOBALS['lv']->f("HamburgtTermin2a"), 6, 10))
LG,
Sascha

Re: abgelaufene Datumsfelder nicht anzeigen

Verfasst: Fr 2. Sep 2016, 10:02
von r_kempf
Hallo Sascha,
habs mal so probiert, ergibt aber keine Ausgaben:

<?php
echo $GLOBALS['lv']->f("HamburgtTermin2a");
echo substr($GLOBALS['lv']->f("HamburgtTermin2a"), 6, 10);
echo date("Ymd", substr($GLOBALS['lv']->f("HamburgtTermin2a"), 6, 10));
?>

Re: abgelaufene Datumsfelder nicht anzeigen

Verfasst: Fr 2. Sep 2016, 11:22
von mokraemer
das würde dann auch erklären warum das nicht funktioniert. Mach das doch besser mit den we-Tags, dafür sind sie doch da.

Du gehst auch hier davon aus, daß das Datum ein Unix-Timestamp ist, das wird sich vermutlich mit WE 7.1 ändern - die ganzen Timestamps sollen echte Datumseinträge in der DB werden, wie es sauber ist. Mit den WE-Tags bist du da sicher, weil wir das zentral machen - wenn du das selbst machst, mußt du dich um die Stellen erneut kümmern.

was klappen müßte:

Code: Alles auswählen

<?php $GLOBALS['curDate'])=date("Ymd", time(); ?>
<we:lv ...>
[...]
<we:ifField type="date" name="HamburgTermin1a" format="Ymd" operator="greater|equal" match="\$curDate"/>
[...]
</we:ifField>
Manchmal muß man evtl. noch mal wieder in die Tagrefernez schauen und überdenken ob man alles in php machen sollte, es geht ja schon recht viel von Haus aus.

Re: abgelaufene Datumsfelder nicht anzeigen

Verfasst: Fr 2. Sep 2016, 15:51
von r_kempf
danke Marc für den neuen Lösungsvorschlag. Geht halt alles nicht ganz ohne PHP und das fehlt mir das Wissen, sorry.
Ich hab die Listview mal mit we:ifField umgebaut. Aber im PHP-String scheint ein Fehler zu sein. Die Seite wird gar nicht mehr angezeigt.

Re: abgelaufene Datumsfelder nicht anzeigen

Verfasst: Sa 3. Sep 2016, 17:12
von r_kempf
so jetzt funktionierts - hier mein Script für WE 7.02:

Code: Alles auswählen

<?php $GLOBALS['curDate']= date("Ymd", time()); ?>
<we:listview type="object" name="seminar-d" classid="2" workspaceID="19" objectseourls="true" order="Seminar-Nummer" desc="false">
<we:repeat>
<we:ifField type="date" name="HamburgTermin1a" format="Ymd" operator="greater|equal" match="$curDate">
<p><we:field type="date" name="HamburgTermin1a" format="d.m.Y"/></p>
</we:ifField>
<we:ifField type="date" name="HamburgTermin2a" format="Ymd" operator="greater|equal" match="$curDate">
<p><we:field type="date" name="HamburgTermin2a" format="d.m.Y" /></p>
</we:ifField>
<we:ifField type="date" name="HamburgTermin3a" format="Ymd" operator="greater|equal" match="$curDate">
<p><we:field type="date" name="HamburgTermin3a" format="d.m.Y" /></p>
</we:ifField>
</we:repeat>
</we:listview>
Danke an alle für die Tipps!!!
LG Regina