Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 06. Dezember 2011 16:20

dalton
kennt CMS/ms
Ort: Schweiz
Registriert: 10. Januar 2011
Beiträge: 162
Webseite

(CGCalendar) Array, wenn gleich, nur einmal ausgeben?

Hallo,

ich habe mit dem CGCalendar Modul eine Kurs Seite aufgebaut.

Die sieht so aus: Kurs Seite

Jetzt geht es um den oberen Teil der Seite, also um die "Dropdowns", dort werde ich noch eine Funktion einbauen mit Javascript. Die Funktion besteht darin, dass man oben mittels "Dropdown" z.B. die Kursart "HipHop Dance" auswählt und es dann mittels Javascript nur die Kurse, die die Kursart "Hiphop Dance" hat, angezeigt werden.

So jetzt zum Problem, das ich habe!

Beim Dropdown muss ich natürlich jetzt z.B. die Kursart auslesen "HipHop Dance", damit man diese auswählen kann. Das ist mittels Smarty und der Foreach schleife kein Problem:

    
{foreach from=$events key=key item=event}
    <option value="wählen">{$event.event_title}</option>
    {/foreach}

Aber da es mehrere Kurse mit der Kursart "HipHop Dance" geben wird, werden diese dann auch so ausgelesen, was aber für das Dropdown keinen Sinn macht, da dort pro Kursart immer nur einmal angezeigt werden sollte.

Bei diesem Beispiel Bild hab ich 2 mal "Hiphop Dance" und 1 mal "Kurs 4" drin, das heisst, jetzt wird im Dropdown:

-> Hiphop Dance
-> Hiphop Dance
-> Kurs 4

angezeigt.

Was gibt es da für eine Möglichkeit, damit man sagen kann "Hiphop Dance" gibt es schon und muss nicht noch ein 2tes mal im Dropdown erscheinen?

Danke im vorraus für eure Hilfe

Offline

#2 06. Dezember 2011 16:32

nockenfell
Moderator
Ort: Gontenschwil, Schweiz
Registriert: 09. November 2010
Beiträge: 2.934
Webseite

Re: (CGCalendar) Array, wenn gleich, nur einmal ausgeben?

Müsste das nicht viel mehr:

{foreach from=$events key=key item=event}
    <option value="{$event.id}">{$event.event_title}</option>
    {/foreach}

--> Value angepasst (die Variable muss du erst Verifizieren, da ich gerade kein CGCalendar zur Hand habe)

Über die eindeutige ID des Events kannst du danach auch andere Elemente steuern. So wie du es hier präsentiert hast, liefert dir die Dropdownbox immer "wählen" zurück, egal was der Nutzer gewählt hat. Der Value zählt.


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline

#3 06. Dezember 2011 16:37

dalton
kennt CMS/ms
Ort: Schweiz
Registriert: 10. Januar 2011
Beiträge: 162
Webseite

Re: (CGCalendar) Array, wenn gleich, nur einmal ausgeben?

Jap, hab das noch vergessen einzutragen danke:D..

Aber doppelt kommt es dann trotzdem vor.

Offline

#4 06. Dezember 2011 16:40

nicmare
Server-Pate
Registriert: 15. Dezember 2010
Beiträge: 1.314
Webseite

Re: (CGCalendar) Array, wenn gleich, nur einmal ausgeben?

hast du mal mit dem paramter unique_only="1" experimentiert? probiere mal mit und ohne und gucke ob sich was verändert.
ich weiß nicht ob es das noch in der neuesten version gibt aber damit konntet man eigentlich doppelte einträge (also events mti gleichem namen) filtern.

Offline

#5 06. Dezember 2011 16:42

nockenfell
Moderator
Ort: Gontenschwil, Schweiz
Registriert: 09. November 2010
Beiträge: 2.934
Webseite

Re: (CGCalendar) Array, wenn gleich, nur einmal ausgeben?

dalton schrieb:

Jap hab das noch vergessen einzutragen danke:D..

Aber doppelt kommt es dan trotzdem vor.

Der Name kommt ja nicht darauf an. Ich nehme an, dass beide Kurse einen eigenen Eintrag haben. Somit haben diese auch zwei unterschiedliche IDs welche damit eindeutig sind. Die Anzeige des Namens ist in dem Fall ja Egal. Er könnte allenfalls um das Datum oder andere Informationen ergänzt werden, damit die Auswahl klarer wird.

{foreach from=$events key=key item=event}
    <option value="{$event.id}">{$event.event_title} - {$event.date}</option>
    {/foreach}

--> Variable {$event.id} und {$event.date} sind nicht verifiziert


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline

#6 06. Dezember 2011 16:58

dalton
kennt CMS/ms
Ort: Schweiz
Registriert: 10. Januar 2011
Beiträge: 162
Webseite

Re: (CGCalendar) Array, wenn gleich, nur einmal ausgeben?

nockenfell schrieb:
dalton schrieb:

Jap, hab das noch vergessen einzutragen danke:D..

Aber doppelt kommt es dann trotzdem vor.

Der Name kommt ja nicht darauf an. Ich nehme an, dass beide Kurse einen eigenen Eintrag haben. Somit haben diese auch zwei unterschiedliche IDs welche damit eindeutig sind. Die Anzeige des Namens ist in dem Fall ja Egal. Er könnte allenfalls um das Datum oder andere Informationen ergänzt werden, damit die Auswahl klarer wird.

{foreach from=$events key=key item=event}
    <option value="{$event.id}">{$event.event_title} - {$event.date}</option>
    {/foreach}

--> Variable {$event.id} und {$event.date} sind nicht verifiziert

Ja, das sind alles einzelne Kurseinträge, dies muss auch so sein.

In diesem Dropdown geht es nicht darum, einzelne Kurs rauszufiltern durch den Klick im Dropdown auf die Kursart mit Datum, sondern einfach alle Kurse mit der gleichen Kursart rauszufiltern. Deswegen brauch ich die Kursart im Dropdown nur 1mal, auch wenn diese mehrmals durch den Kurseintrag existiert.
Ich bräuchte wie eine Abfrage, dass, sobald die Kursart z.B. hier "HipHop Dance" schonmal vorgekommen ist, die restlichen mit dem gleichem Namen nicht mehr angezeigt werden, da diese Kursart nur 1mal benötigt wird.
Im Dropdown geht es nicht um jeden einzelnen Kurs, sondern einfach nur um die Gruppe des Kurses.

Offline

#7 06. Dezember 2011 17:07

dalton
kennt CMS/ms
Ort: Schweiz
Registriert: 10. Januar 2011
Beiträge: 162
Webseite

Re: (CGCalendar) Array, wenn gleich, nur einmal ausgeben?

nicmare schrieb:

hast du mal mit dem paramter unique_only="1" experimentiert? probiere mal mit und ohne und gucke ob sich was verändert.
ich weiß nicht ob es das noch in der neuesten version gibt aber damit konntet man eigentlich doppelte einträge (also events mti gleichem namen) filtern.

Diese Funktion existiert zwar, aber das funktioniert so leider nicht, da es nicht nur um den Titel geht, sondern auch noch nach eigenen Feldern sucht, wo auch mehrmals das gleiche stehen wird. z.B. bei der Altersgruppe.

Offline

#8 06. Dezember 2011 17:21

nicmare
Server-Pate
Registriert: 15. Dezember 2010
Beiträge: 1.314
Webseite

Re: (CGCalendar) Array, wenn gleich, nur einmal ausgeben?

dann mach halt

{foreach from=$events key=key item=event}
    {if $currentevent != $event.id}
    <option value="{$event.id}">{$event.event_title}</option>
    {assign var="currentevent" value=$event.id}
    {/if}
{/foreach}

also wenn es das element noch nicht gab, spucks aus.

Offline

#9 06. Dezember 2011 17:32

dalton
kennt CMS/ms
Ort: Schweiz
Registriert: 10. Januar 2011
Beiträge: 162
Webseite

Re: (CGCalendar) Array, wenn gleich, nur einmal ausgeben?

nicmare schrieb:

dann mach halt

{foreach from=$events key=key item=event}
    {if $currentevent != $event.id}
    <option value="{$event.id}">{$event.event_title}</option>
    {assign var="currentevent" value=$event.id}
    {/if}
{/foreach}

also wenn es das element noch nicht gab, spucks aus.

**EDIT***

Zu Anfang hat es funktioniert, nur sobald man etwa 3 mal HipHop Dancer und noch 2 Mal Test als Kursart hat, geht dies nicht mehr. Sobald es eine andere Reihenfolge hat, vergleicht es den Titel mit dem falschen Titel - dann geht das nicht mehr und es wird wieder etwas doppelt dargestellt.

Beitrag geändert von dalton (06. Dezember 2011 17:40)

Offline

#10 06. Dezember 2011 18:19

nicmare
Server-Pate
Registriert: 15. Dezember 2010
Beiträge: 1.314
Webseite

Re: (CGCalendar) Array, wenn gleich, nur einmal ausgeben?

deine rechtschreibung und grammatik macht es mir schwer, dein problem nachzuvollziehen big_smile

Offline

#11 07. Dezember 2011 10:10

dalton
kennt CMS/ms
Ort: Schweiz
Registriert: 10. Januar 2011
Beiträge: 162
Webseite

Re: (CGCalendar) Array, wenn gleich, nur einmal ausgeben?

Also^^:

Sobald ich bei deiner Lösung 2 neue Kurse einfüge Kursart: "HipHop Dance" und nach diesen 2 einträgen die Kursart: "Anderer Tanz" und dann wieder ein Kurs mit der Kursart: "HipHop Dance" einfüge, sieht das so aus:

-> HipHop Dance
-> HipHop Dance
-> Anderer Tanz
-> HipHop Dance

So das 2te "HipHop Dance" wird dann nicht angezeigt, was auch richtig ist durch die Abfrage:

  {if $currentevent != $event.id}
    <option value="{$event.id}">{$event.event_title}</option>
    {assign var="currentevent" value=$event.id}
{/if}

Aber das 3te "HipHop Dance" wird dann wieder angezeigt, weil dann die IF Abfrage mit "Anderer Tanz" verglichen wird!

Offline

#12 07. Dezember 2011 11:44

nicmare
Server-Pate
Registriert: 15. Dezember 2010
Beiträge: 1.314
Webseite

Re: (CGCalendar) Array, wenn gleich, nur einmal ausgeben?

dann müsstest du theoretisch das array vorher nach namen sortieren. aber das übersteigt auch ein wenig meine kompetenzen. und möglicherweise verkompliziert das auch dein vorhaben. vielleicht hat noch jemand ne andere idee

Offline

#13 08. Dezember 2011 09:39

dalton
kennt CMS/ms
Ort: Schweiz
Registriert: 10. Januar 2011
Beiträge: 162
Webseite

Re: (CGCalendar) Array, wenn gleich, nur einmal ausgeben?

Ja wäre schön wen jemand noch eine idee hätte

Offline

#14 08. Dezember 2011 12:06

nockenfell
Moderator
Ort: Gontenschwil, Schweiz
Registriert: 09. November 2010
Beiträge: 2.934
Webseite

Re: (CGCalendar) Array, wenn gleich, nur einmal ausgeben?

Unter PHP kann man ein Array mit array_multisort sortieren.
http://php.net/manual/de/function.array-multisort.php

Dies könnte auch auf Smarty anwendbar sein. Im Moment habe ich jedoch keine Zeit den Ansatz weiter zu verfolgen. Ev kann ein anderer den genauen Code dazu liefern. Ansonsten werde ich mich später mal daran versuchen.


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline