Seite 1 von 1

Nach Update nach 8.1.1: Templatefehler

Verfasst: Mi 12. Feb 2020, 13:16
von diballa
Hallo liebe WE-Gemeinde,

nach eigentlich erfolgrichem Update von 6.4.1 über 7.0.4 nach 8.1.1 produzieren einige Templates Errors im Protokoll.
Dies bezieht sich auf Listviewdarstellungen, bei denen weTags mit PHP angereichert sind.
Hier mal ein Fehler aus dem LOG:

Error type: Error

Error message:

Cannot access protected property we_listview_document::$anz_all
Array
(
[type] => 1
[message] => Cannot access protected property we_listview_document::$anz_all
[file] => SECURITY_REPL_DOC_ROOT//webEdition/we/templates/15_layouts/17_produkte_tt_absperrarmaturen-eck.php
[line] => 273
)

Da ich das seinerzeit nicht selbst gescriptet habe, bin ich n büschen ratlos ..
Kann mir jemand mit PHP-Erfahrung helfen?

Danke und LG
diballa

Re: Nach Update nach 8.1.1: Templatefehler

Verfasst: Mi 12. Feb 2020, 13:32
von mokraemer
darauf kannst du nicht mehr zugreifen.
Entweder kannst du getMaxPages() für die Gesamtzahl Seiten, getPageNo() für die akt. Seite oder getRows() für das was hier mal (falsch) abgefragt wurde nutzen

Re: Nach Update nach 8.1.1: Templatefehler

Verfasst: Mi 12. Feb 2020, 18:06
von diballa
Hi mokraemer,

habe jetzt in der Paginierung die Anzahl der Gesamteinträge durch

Code: Alles auswählen

<?php echo " $translationOf " . $GLOBALS['lv']->getRows();?>
wieder drin:-)

Ich habe jetzt an einer anderen Stelle nochmal dieses "anz_all":

Man kann sich nach Auswahl verschiedener Kategorien die zutreffenden Produkte in einer listview anzeigen lassen. Wenn eine Kombination keine Treffer hat, wurde bisher ein Text ausgegeben mit:

Code: Alles auswählen

<?php
if(!$lv->anz_all){
	echo "<div><br><br><b>Leider ergab Ihre Auswahl keine Treffer. Bitte versuchen Sie eine andere Kombination.</b></div>";
}
?>
Wie muss ich das hier unter Einsatz von z.B. getRows() genau schreiben? Wie muss die Alternative aussehen?

Kannst du mir n Tipp geben?
Danke und LG diballa

Re: Nach Update nach 8.1.1: Templatefehler

Verfasst: Mi 12. Feb 2020, 19:06
von mokraemer
$lv und $GLOBALS['lv'] ist beides deprecated.

Aber du bekommst das eigentlich ganz normal per we-tag:

Code: Alles auswählen

<we:listviewRows/>
Also in deinem Fall

Code: Alles auswählen

 <?=$translationOf;?> <we:listviewRows/>
und das andere ist eigentlich ein

Code: Alles auswählen

<we:ifNotFound>Leider...</we:ifNotFound>
Und so kommst du da eigentlich ganz ohne php aus.

Re: Nach Update nach 8.1.1: Templatefehler

Verfasst: Do 13. Feb 2020, 12:12
von diballa
Hallo mokraemer,

das Leben kann manchmal so schön sein:-)
Danke.
Habe noch ein anderes Problem in dem Template, muss ich aber noch fürs Forum aufbereiten;-)

Erstmal Danke und LG, diballa

Re: Nach Update nach 8.1.1: Templatefehler Listview

Verfasst: Do 13. Feb 2020, 14:07
von diballa
Hallo,

es geht um ein Template, welches im Frontend eine Listview über Dokumente einer bestimmten Oberkategorie auswirft.
Auf der Seite hat der User dann Filtermöglichkeiten nach Unterkategorien obiger Kategorie und kann sich so Listviews mit weniger Treffern anzeigen lassen.

Zuerst werden Selectboxen mit den Filtermöglichkeiten erzeugt:

Code: Alles auswählen

<we:form action="$translationListAnker" style="padding:0; margin:0;">
				<fieldset>
					<we:listview type="category" name="katlist" parentid="$translationParentId">
						<?php
						$catcount = 0;
						?>
						<we:repeat>
							<?php
							$katpath = we_tag("field", array("type"=>"text","name"=>"WE_PATH"), "") . '/';
							$kattop = we_tag("field", array("type"=>"text","name"=>"WE_PATH"), "");
							$katname = "category[]";
							$catcount++;
							$katfirstentry = substr($kattop,strrpos($kattop,"/")+1).":";
							?>
							<we:categorySelect name="\$katname" type="request" showpath="true" rootdir="\$katpath" firstentry="\$katfirstentry" style="width:178px; margin-bottom:10px;"></we:categorySelect>
						</we:repeat>
					</we:listview>
					<input type="submit" value="<we:var type="global" name="translationSearchSubmit" />" class="send" />
				</fieldset>
			</we:form>
Dann werden Variablen gesetzt, abhängig davon, wieviele Selectboxen es gibt:

Code: Alles auswählen

	<we:setVar from="request" to="global" namefrom="category[0]" nameto="category[0]"/>
	<we:setVar from="request" to="global" namefrom="category[1]" nameto="category[1]"/>
	<we:setVar from="request" to="global" namefrom="category[2]" nameto="category[2]"/>
Und dann wird, abhängig davon, ob die Variable leer ist oder nicht, die Trefferliste angezeigt:
Wenn leer, soll die Listview über die Oberkategorie angezeigt werden, also, wenn man auf die Seite kommt ...

Code: Alles auswählen

<we:ifVarEmpty name="category" match="category" type="global">
				<we:listview name="$translationListName" type="document" categories="$translationListCategories" rows="20" order="Title">
					<we:repeat>
...
					</we:repeat>
				</we:listview>
		</we:ifVarEmpty>
Wenn nicht leer wird die Listview gemäß der ausgewählten Kategorien in den Selectboxen angezeigt:

Code: Alles auswählen

<we:ifVarNotEmpty name="category" match="category" type="global">
			<?php
			$selectedcats = "";
			$selectedcats_info = "";
			foreach($_REQUEST['category'] as $catval) {
				if($catval!=""){
					$selectedcats .= $selectedcats=="" ? $catval : ",".$catval;
					$catval_info =  preg_replace("/.*\//", "", $catval);
					$selectedcats_info .= $selectedcats_info =='' ? $catval_info : ",&nbsp;$catval_info";
				}
			}
			echo "<h3>$translationSearchfilter: $selectedcats_info</h3>\n";
			?>
			<we:listview categories="\$selectedcats" rows="20" order="Title" catOr="false">
				<we:ifNotFound><div><br><br><b>Leider ergab Ihre Auswahl keine Treffer. Bitte versuchen Sie eine andere Kombination.</b></div></we:ifNotFound>
				<we:repeat>
...
				</we:repeat>
			</we:listview>

		</we:ifVarNotEmpty>
Wenn man nun auf die Seite kommt, wird zwar eine Listview angezeigt, allerdings über sämtliche Kategorien (Paginierung zeigt: Seite: 1 von 77 | Einträge: 1 bis 20 von 1524 | weiter) und ohne Inhalt. Wählt man nun eine Filtermöglichkeit, erscheint die korrekte Listview.

Der Teil mit leerer Variable funzt in 8.1.1 leider nicht mehr. Wahrscheinlich hat das auch mit den globalen Variablen zu tun?
Kann mir jemand helfen? Danke und LG, diballa

Re: Nach Update nach 8.1.1: Templatefehler

Verfasst: Do 13. Feb 2020, 15:14
von mokraemer
kann es sein das hier etwas vermischt ist?

Code: Alles auswählen

<we:ifVarNotEmpty name="category" match="category" type="global">
[...]
foreach($_REQUEST['category'] as $catval) {
Entweder global oder request, ich vermute du meinst

Code: Alles auswählen

<we:ifVarNotEmpty name="category" match="category" type="request">
es ist eher ungewöhnlich das man Request-Variablen in Global schreibt und AFAIK seit PHP 5.4 deprecated.

Btw. das Tag we:listview kennt den Parameter categoryids, dann mußt du hier keine seltsamen escapes von den Namen mehr machen!

Re: Nach Update nach 8.1.1: Templatefehler

Verfasst: Do 13. Feb 2020, 16:30
von diballa
Hi mokraemer,
danke für das schnelle Feedback:-)

Deine Vermutung war goldrichtig.
Jetzt klappts.

Noch ne Bitte um eine Expertenmeinung:
Wenn du dir den Code so generell anschaust, ist das eher veraltet und deprecated oder ok?

Kleines Feedback würd' mich freuen;-)
LG, diballa

Re: Nach Update nach 8.1.1: Templatefehler

Verfasst: Do 20. Feb 2020, 11:33
von diballa
Moinsen,
ne Kleinigkeit klappt doch noch nicht:

Wenn die Seite das erste Mal geladen wird, tritt der Teil mit ifVarEmpty in Kraft. Super:-)
Wenn ich dann eine Auswahl über die erzeugten Selectboxen treffe, werden die Trefferlisten richtig gefiltert (ifVarNotEmpty-Fall). Super:-)

Wenn ich das Formular aber absende, ohne eine Auswahl in den Selectboxen zu treffen, tritt wieder der ifvarNotEmpty-Fall ein und ich bekomme eine Listview allerdings über sämtliche Kategorien (Paginierung zeigt: Seite: 1 von 77 | Einträge: 1 bis 20 von 1524 | weiter) aber ohne Inhalt.
Wie kann ich erreichen, dass bei Absenden des Formulars ohne Auswahl in den Selectboxen der ifVarEmpty-Fall eintritt und ich die Situation erreiche, als die Seite aufgerufen wurde?
Bin wirklich für jede Hilfe dankbar.

LG, diballa

Re: Nach Update nach 8.1.1: Templatefehler

Verfasst: Do 20. Feb 2020, 11:47
von mokraemer
Naja, was ist denn der "Default-Fall" in der Selectbox?
Mir fehlt grad ein Beispiel um mir das anschauen zu können.

Re: Nach Update nach 8.1.1: Templatefehler

Verfasst: Mi 26. Feb 2020, 10:55
von diballa
Hi mokraemer,

sorry für die späte Rückmeldung, lag n paar Tage flach ...

Hier mal ein Shortlink zu einer Beispielseite, die noch unter webEdition 6.4.1 läuft und wo das funktioniert:

https://bit.ly/32rkpnz

1. Wenn du auf die Seite kommst, wird eine default listview gezeigt.
2. Wenn du über die Pullies filterst, bekommst du die entsprechende Auswahl.
3. Wenn du auf Armaturen zeigen, ohne etwas in den Pullies auszuwählen, klickst, bekommst du wieder die Ausgangsliste (default listview)

Auf dem Testserver, auf dem die Seite unter webEdition 8.1.1 läuft, funktioniert Schritt 3 nicht (leere Listview aber über alle Kategorien lt. Paginierung)

LG, diballa

Re: Nach Update nach 8.1.1: Templatefehler

Verfasst: Mi 26. Feb 2020, 12:11
von mokraemer
hmm, kann ich hier so einfach nicht nachvollziehen.
Die Auswahl ist ja Leer, also wird auch ifVarEmpty zutreffen.

Re: Nach Update nach 8.1.1: Templatefehler

Verfasst: Do 27. Feb 2020, 14:05
von diballa
Hi mokraemer,

ja sollte man meinen und unter PHP 5.5.9 und webEdition 6.4.1 funktioniert das wie man sieht ja auch.
Ich hab mal n Screenshot drangehängt vom Ergebnis wenn man keine Auswahl in den Pullies macht und das Formular abschickt (PHP 7.3.14 und webEdition 8.1.1. Auffällig ist, dass hier der Bereich "Suchfilter:" angezeigt wird, eigentlich kommt der nur im ifVarNotEmpty-Fall ...
Bildschirmfoto 2020-02-27 um 12.54.27.png
Bildschirmfoto 2020-02-27 um 12.54.27.png (42.22 KiB) 3823 mal betrachtet

LG, diballa