select aus listview ohne Doppler

Fragen zum Erstellen von Templates für webEdition.
Benutzeravatar
christobal
Senior Member
Beiträge: 313
Registriert: Do 4. Nov 2010, 13:03
Wohnort: Reith bei Seefeld, Tirol - Österreich
Kontaktdaten:

select aus listview ohne Doppler

Beitragvon christobal » Do 18. Feb 2016, 16:57

Hallo aus einem sonnendurchfluteten Tirol!

Ich möchte eine select bauen und zwar mittels einer listview aus vorhandenen Objekten. Bei den Objekten verwende ich das Feld "Ort" und per listview condition schließe ich leere Orte aus. So weit so gut.

Nur wie löse ich folgendes Problem, dass er in der select keine doppelten Orte auflistet?
Hier wäre ich um einen guten Rat sehr dankbar!

Code: Alles auswählen

<select class="form-control">
<option>Auswahl</option>
<we:listview type="object" name="listview_ort" order="Ort" classid="13" condition="Ort!=''">
<we:repeat>
<option><we:field name="Ort" /></option>
</we:repeat>
</we:listview>
</select>
Christoph
BIG Detail, Kaspar & Sigl OG
Riedgasse 8b
A-6020 Innsbruck
Tel. +43 512 346070-40
Fax +43 512 346070-20
Mobil: +43 676 3438011

christoph.kaspar@bigdetail.com
http://www.bigdetail.com

Benutzeravatar
blickfang
webEdition Partner
webEdition Partner
Beiträge: 812
Registriert: Mo 15. Dez 2003, 16:00
Kontaktdaten:

Re: select aus listview ohne Doppler

Beitragvon blickfang » Do 18. Feb 2016, 21:56

Hi Christoph,

Du könntest die Orte zuvor in einem Array sammeln und dann das array unique und ne Schleife zum Ausgaben machen.

Code: Alles auswählen

<?php $orte = array(); ?>
<we:listview type="object" name="listview_ort" order="Ort" classid="13" condition="Ort!=''">
<we:repeat>
<?php $orte[] = $GLOBALS['lv']->f('Ort'); ?>
</we:repeat>
</we:listview>

<select class="form-control">
<option>Auswahl</option>
<?php
array_unique($orte);
foreach($orte as $ort){
	echo '<option>' . $ort. '</option>';
}
?>
</select>
Gruß
Timo
webEdition Partner - https://www.blickfang-media.com
Ehemals im Vorstand des webEdition e.V.

AndreasWitt

Re: select aus listview ohne Doppler

Beitragvon AndreasWitt » Do 18. Feb 2016, 22:02

... ich würd's so machen:

Code: Alles auswählen

<?php $GLOBALS['locations'] = array(); ?>
<select class="form-control">
	<option>Auswahl</option>
	<we:listview type="object" name="listview_ort" order="Ort" classid="13" condition="Ort!=''">
		<we:repeat>
			<we:field name="Ort" to="global" nameto="actLocation" />
			<?php if(!in_array($GLOBALS['actLocation'], $GLOBALS['locations'])){ ?>
				<we:field name="Ort" to="global" nameto="locations[]" />
				<option><we:field name="Ort" /></option>
			<?php } ?>
		</we:repeat>
	</we:listview>
</select>
Sollte ab webEdition 6.4.3 funktionieren.

Zusätzlich solltest du dem Tag <option value=""> das value-Attribute setzen, auch wenn es zunächst identisch mit dem Text ist.

Benutzeravatar
blickfang
webEdition Partner
webEdition Partner
Beiträge: 812
Registriert: Mo 15. Dez 2003, 16:00
Kontaktdaten:

Re: select aus listview ohne Doppler

Beitragvon blickfang » Do 18. Feb 2016, 22:11

auch ne Idee, dann aber mit der Einschränkung - je nachdem ob man das an der Stelle halt braucht - dass <we:next>, <we:back>, <we:position> keinen korrekten Wert zurückgeben, weil die Listview selbst nichts vom dem "if" weiß. Ebenso, wenn Du z.b. auf 5 Elemente ind er Ausgabe filtern möchtest klappt das nicht mehr.
webEdition Partner - https://www.blickfang-media.com
Ehemals im Vorstand des webEdition e.V.

Benutzeravatar
christobal
Senior Member
Beiträge: 313
Registriert: Do 4. Nov 2010, 13:03
Wohnort: Reith bei Seefeld, Tirol - Österreich
Kontaktdaten:

Re: select aus listview ohne Doppler

Beitragvon christobal » Fr 19. Feb 2016, 12:18

Vielen Dank Euch beiden Timo und Andreas!

Das hat mir super weitergeholfen! Bei Timos Lösung hab ich noch den Doppleeffekt. Bei Andreas Code klappts gut.
Auch die Pagination und Reduktion auf rows="1" hats gut überstanden.

Christoph

Hier nochmals der komplette Code

Code: Alles auswählen

<we:comment>:::::::::::::::: FORM :::::::::::::::::::</we:comment>
<we:form name="suchformular" type="object" id="self" method="post" class="form-horizontal">

<we:comment>:::::::::::::::: ORT :::::::::::::::::::</we:comment>
<?php $GLOBALS['locations'] = array(); ?>
<select class="form-control" name="sucheort">
<option value="">Auswahl Ort</option>
<we:listview type="object" name="listview_ort" order="Ort" classid="13" condition="Ort!=''">
<we:repeat>
<we:field name="Ort" to="global" nameto="actLocation" />
<?php if(!in_array($GLOBALS['actLocation'], $GLOBALS['locations'])){ ?>
<we:field name="Ort" to="global" nameto="locations[]" />
<option value="<we:field name="Ort" />"><we:field name="Ort" /></option>
<?php } ?>
</we:repeat>
</we:listview>
</select>

<we:comment>:::::::::::::::: BUTTONS :::::::::::::::::::</we:comment>
<div style="margin-top: 15px; margin-bottom: 15px; ">
<button type="reset" class="btn btn-default">Zurücksetzen</button>
<button type="submit" class="btn btn-bd">Betrieb(e) suchen</button>
</div>

</we:form>

<we:comment>:::::::::::::::: VARIABLE UND CONDITIONS :::::::::::::::::::</we:comment>
<we:setVar from="request" to="global" namefrom="sucheort" nameto="sucheort" />
<we:condition name="condition">
<we:ifVarNotEmpty match="sucheort" type="global">
<we:conditionAdd field="Ort" var="sucheort%" compare="like"/>
</we:ifVarNotEmpty>
</we:condition> 

<we:comment>:::::::::::::::: AUFLISTUNG :::::::::::::::::::</we:comment>
<we:listview type="object" classid="13" condition="\$condition" rows="1">
<we:repeat>
<we:field name="Ort" />
</we:repeat>
</we:listview>
BIG Detail, Kaspar & Sigl OG
Riedgasse 8b
A-6020 Innsbruck
Tel. +43 512 346070-40
Fax +43 512 346070-20
Mobil: +43 676 3438011

christoph.kaspar@bigdetail.com
http://www.bigdetail.com

mokraemer
Senior Member
Beiträge: 3619
Registriert: So 8. Aug 2010, 01:23
Wohnort: Mainz

Re: select aus listview ohne Doppler

Beitragvon mokraemer » Fr 19. Feb 2016, 13:09

ich hab da gestern auch schon mal drüber nachgedacht - die Lösung funktioniert zwar ist aber gerade bei vielen Objekten massiv ineffizient. Und man benötigt auch sinnloser weise php.
Evtl. sollten wir hier mal eine Erweiterung anstreben.
webEdition-Kern-Entwickler

Benutzeravatar
blickfang
webEdition Partner
webEdition Partner
Beiträge: 812
Registriert: Mo 15. Dez 2003, 16:00
Kontaktdaten:

Re: select aus listview ohne Doppler

Beitragvon blickfang » Di 23. Feb 2016, 00:36

@Marc: ein attribute filterSelf="true" oder sowas wäre da sicher eine Überlegung wert?
webEdition Partner - https://www.blickfang-media.com
Ehemals im Vorstand des webEdition e.V.

e_herrmann
Senior Member
Beiträge: 1319
Registriert: Do 22. Mai 2003, 23:25

Re: select aus listview ohne Doppler

Beitragvon e_herrmann » Di 23. Feb 2016, 09:12

Marc hat hier schon den Featurewunsch eingetragen, ich denke mal, das soll das sein:
http://qa.webedition.org/tracker/view.php?id=10353
Bei der Umsetzung, bitte die anderen LV-Typen nicht vergessen, insbesondere die Dokumente.
Ich habe diese Funktion aber auch schon mal bei LV-Category gebraucht. Wenn es eine Möglichkeit gäbe, das für alle LV-Typen umzusetzen, wäre optimal.
Elko Herrmann
komplexx | internet.fotografie
web: http://www.komplexx.de

statist
Senior Member
Beiträge: 125
Registriert: Mo 12. Dez 2011, 14:46

Re: select aus listview ohne Doppler

Beitragvon statist » Di 29. Nov 2016, 15:53

Hallo, ich möchte (ähnlich wie beschrieben) eine verschachteltete Ausgabe von Terminen (Objekte) machen: Über einen Select kann aus allen kommenden Monaten ausgewählt werden, nach Klick auf "anzeigen" sollen genau alle Termine dieses Monats angezeigt werden. Es funktioniert alles, bis auf die zweite Condition. Liegt hier der Fehler beim Formatableich des Datums? Hat jemand eine Idee?

Code: Alles auswählen

<we:form name="monatsauswahl" type="object" id="self" method="post">

<?php $condition = "Veranstaltungsdatum >= ".time(); ?>
<?php $GLOBALS['allemonate'] = array(); ?>
<select name="monatsselect">
<option>nach Monaten:</option>
<we:listview type="object" name="monate" condition="$condition" order="Veranstaltungsdatum" classid="1">
<we:repeat>
<we:field type="date" name="Veranstaltungsdatum" format="F Y" to="global" nameto="monatselected" />
<?php if(!in_array($GLOBALS['monatselected'], $GLOBALS['allemonate'])){ ?>
<we:field type="date" name="Veranstaltungsdatum" format="F Y" to="global" nameto="allemonate[]" />
<option><we:field type="date" name="Veranstaltungsdatum" format="F Y" /></option>
<?php } ?>
</we:repeat>
</we:listview>
</select>

<button type="submit">anzeigen</button>

</we:form>

<we:setVar from="request" to="global" namefrom="monatsselect" nameto="monatsselect" />
<?php echo "$monatsselect"; ?><br><br>

<we:condition name="condition2">
<we:conditionAdd field="Veranstaltungsdatum" format="d.m" var="monatsselect" compare="="/>
</we:condition>

<we:listview type="object" name="monatselektiert" condition="\$condition2" classid="1">
<we:repeat>
<we:field type="date" name="Veranstaltungsdatum" format="d.m" /><br>
<we:field type="text" name="Veranstaltungsname" /><br><br>
</we:repeat>
</we:listview>

AndreasWitt

Re: select aus listview ohne Doppler

Beitragvon AndreasWitt » Di 29. Nov 2016, 16:04

... bei der zweiten Condition fehlt noch das Attribut "type"

statist
Senior Member
Beiträge: 125
Registriert: Mo 12. Dez 2011, 14:46

Re: select aus listview ohne Doppler

Beitragvon statist » Di 29. Nov 2016, 16:22

Danke Andreas, geht leider auch damit nicht (auch nicht mit "global"):

Code: Alles auswählen

<we:conditionAdd field="Veranstaltungsdatum" type="request" format="d.m" var="monatsselect" compare="="/>
Hat jemand eine andere Idee?

Luigii
Senior Member
Beiträge: 454
Registriert: Mi 20. Jul 2005, 17:18

Re: select aus listview ohne Doppler

Beitragvon Luigii » Mi 30. Nov 2016, 11:46

mokraemer hat geschrieben:ich hab da gestern auch schon mal drüber nachgedacht - die Lösung funktioniert zwar ist aber gerade bei vielen Objekten massiv ineffizient. Und man benötigt auch sinnloser weise php.
Evtl. sollten wir hier mal eine Erweiterung anstreben.
Ich hätte hier auch noch einen Vorschlag für die ursprüngliche Anfrage. Ich schreibe das Feld aus dem Listview immer auch in eine globale Variable und dann vergeleiche ich den neuen Wert auf dem Feld mit dem alten Wert aus der globalen Variable. Wenn beide gleich sind erfolgt keine Ausgabe. Ich brauche kein PHP.

Code: Alles auswählen

<we:listview type="object" classid="3" order="Ort">
	<we:repeat>
		<we:ifNotField name="Ort" type="text" match="$lastOrt">
			<option value="<we:field type="text" name="Ort" />"><we:field type="text" name="Ort" /></option>
		</we:ifNotField>
		<we:setVar to="global" from="listview" namefrom="Ort" nameto="lastOrt" />
	</we:repeat>
</we:listview>
Dinge von großer Bedeutung gehe man mit Leichtigkeit an, Dinge von geringer Bedeutung mit großem Ernst.

statist
Senior Member
Beiträge: 125
Registriert: Mo 12. Dez 2011, 14:46

Re: select aus listview ohne Doppler

Beitragvon statist » Mi 30. Nov 2016, 17:11

Ich hab nochmal rumprobiert: Mit einem anderen Feld des Objekts klappt die Doppel-Condition einwandfrei. Beim Datum (auch komplett ohne irgendeine Formatvorgabe) klappt der gleiche Aufbau aber nicht. Weiß jemand, welches Datumsformat die Condition verwendet bzw ob ich das beeinflussen kann? Danke für Eure Meinungen!


Zurück zu „webEdition Templates erstellen (we:Tags)“

Wer ist online?

Mitglieder in diesem Forum: Ahrefs [Bot] und 10 Gäste