Vanilla 1.1.2 Forum von Lussumo. Weitere Informationen: Dokumentation, Community.

    • CommentAuthorjonas77
    • CommentTime04.07.2012
     permalink
    Hallo,

    ich komme bei einem Problem mit den MIGX einfach nicht weiter.
    Ich benutze eine MIGX-Variable, um eine ein mehrspaltiges Layout zu füllen.

    In etwa so:

    Formular Tabs:
    {"caption":"Box 1", "fields": [
    {"field":"titel1","caption":"Titel", "inputTV":"titel"},
    {"field":"inhalt1","caption":"Inhalt","inputTV":"inhalt"},
    {"field":"verlinktmit1","caption":"Verlinken mit","inputTV":"link"},
    ]},
    {"caption":"Box 2", "fields": [
    {"field":"titel2","caption":"Titel", "inputTV":"titel"},
    {"field":"inhalt2","caption":"Inhalt","inputTV":"inhalt"},
    {"field":"verlinktmit2","caption":"Verlinken mit","inputTV":"link"},
    ]}....

    Grid-Spalten:
    {"header": "Titel1", "width": "150", "sortable": "false", "dataIndex": "titel1"},
    {"header": "Titel2", "width": "150", "sortable": "false", "dataIndex": "titel2"}


    So kann ich eine beliebige Anzahl von Zeilen aufbauen, und diese auch im Backend sortieren.
    Das klappt auch wunderbar.


    Bisher kopiere ich den Content von einer Box in die andere, wenn ich die z.B. von links nach rechts verschieben möchte. Das ist aber sehr umständlich.

    Im Backend habe ich die Möglichkeit, die Grid-Spalten in der Tabelle zu sortieren.
    Wie aber könne ich die Sortierung, bzw den Index der Spalten im Frontend übernehmen?
    Es würde auch schon weiterhelfen, wenn ich wüsste, wo Modx die Sortierung der Spalten im Backend speichert...

    Vielleicht hat da jemand von euch ja eine Idee?

    Viele Grüße,
    Jonas
    • CommentAuthorBruno
    • CommentTime04.07.2012 bearbeitet
     permalink
    Die Ausgabe im frontend per getImageList-snippet entspricht doch genau der Sortierreihenfolge, wie Du sie im backend vornimmst.

    Oder verstehe ich Dein Problem nicht?

    [Edit]

    Habs nochmal durchgelesen, ich weiß was Du willst.
    Kannst Du nochmal genauer erklären, wann, zu welchem Zweck usw. Du die Spalten, also die Boxen fürs Frontend umsortierten möchtest?
    Vielleicht ein Anwendungsbeispiel.
    • CommentAuthorjonas77
    • CommentTime04.07.2012
     permalink
    Hallo Bruno,

    ist wirklich schwer verständlich ;-)

    Aber vielleicht hast du mich schon auf den richtigen Weg geführt...
    getImageList nutze ich hier noch gar nicht...habe mich wohl von dem Namen irreführen lassen.
    Bisher: $zeilen = json_decode($modx->resource->getTVValue('mg_zeile'));

    Werde es mal testen und mich wieder melden, falls ich das so doch nicht wie gewünscht funktioniert.

    Vielen Dank und Grüße,
    Jonas
    • CommentAuthorjonas77
    • CommentTime04.07.2012
     permalink
    Nach einem weiteren Blick in die Docu peinlich berührt:

    getImageList
    For outputting your records from MIGX-TV you will need the included snippet getImageList.
    Its not only meant for rendering image-lists.

    Nochmals Danke.
    • CommentAuthorjonas77
    • CommentTime04.07.2012
     permalink
    Hallo nochmals,

    leider komme ich auch mit dem getImageList nicht auf das gewünschte Ergebnis - vielleicht ist das so auch gar nicht möglich?


    Ich habe die MIGX-Variable: 'mg_zeile':
    [
    {"caption":"Spalte 1", "fields": [
    {"field":"titel1","caption":"Titel", "inputTV":"titel"},
    {"field":"inhalt1","caption":"Inhalt","inputTV":"inhalt"}
    ]},
    {"caption":"Spalte 2", "fields": [
    {"field":"titel2","caption":"Titel", "inputTV":"titel"},
    {"field":"inhalt2","caption":"Inhalt","inputTV":"inhalt"}
    ]},
    {"caption":"Spalte 3", "fields": [
    {"field":"titel3","caption":"Titel", "inputTV":"titel"},
    {"field":"inhalt3","caption":"Inhalt","inputTV":"inhalt"}
    ]}].

    Die Ausgabe von ImageList ergibt folgendes:

    Array
    (
    [MIGX_id] => 1
    [titel1] => 1
    [inhalt1] =>

    1

    [titel2] => 2
    [inhalt2] =>

    2

    [titel3] => 3
    [inhalt3] =>

    3

    [_alt] => 0
    [_first] => 1
    [_last] => 1
    [idx] => 1
    [property.tvname] => mg_zeile
    )

    Ich habe die Sortierung der Spaltenvom MIGX-Grid im Backend geändert, so dass Spalte3 nun vor Spalte2 steht:


    Gibt es eine Möglichkeit, diese Sortierung bei der Ausgabe zu übernehmen, dass die Ausgabe dann so aussieht?
    Array
    (
    [MIGX_id] => 1
    [titel1] => 1
    [inhalt1] =>

    1
    [titel3] => 3
    [inhalt3] =>

    3

    [titel2] => 2
    [inhalt2] =>

    2



    [_alt] => 0
    [_first] => 1
    [_last] => 1
    [idx] => 1
    [property.tvname] => mg_zeile
    )
    •  
      CommentAuthortitanium
    • CommentTime05.07.2012
     permalink
    Hallo Jonas,

    willst du unbedingt direkt mit dem Array arbeiten? Dann bräuchtest du getImageList eigentlich nicht und könntest mit dem JSON-Array arbeiten, dass MIGX liefert. Falls du aber gerenderten Output willst, kannst du getImageList mit dem Parameter "&tpl" aufrufen. Das Template ist ein Chunk, bei dem du die TVs in den unterschiedlichsten Reihenfolgen ausgeben kannst, ganz wie du willst, also wie in deinem Beispiel:

    [[+titel3]], [[+inhalt3]]
    [[+titel1]], [[+inhalt1]]
    [[+titel2]], [[+inhalt2]]

    Der Chunk wird für jeden MIGX-Datensatz neu abgearbeitet.
    • CommentAuthorBruno
    • CommentTime05.07.2012
     permalink
    @Jonas

    sag doch nochmal, was Du eigentlich erreichen möchtest.

    was soll in die Boxen rein?
    wenn Du die Boxen sortierbar machen möchtest und ne beliebige Anzahl an Boxen, dann mache doch für jede Box einen neuen Datensatz.

    Falls du die Boxen selbst mit MIGX-Daten füllen möchtest, kannst Du auch MIGX in MIGX verwenden.

    Aber ich würde sagen, erkläre uns erst mal noch genauer, was es am Ende werden soll.
    • CommentAuthorjonas77
    • CommentTime12.07.2012
     permalink
    Hallo,

    MIGX in MIGX - das geht?
    Würde meine Vorangehensweise dann noch einmal überdenken...

    Vielleicht versuche ich aber trotzdem einmal, das Problem klarer zu schildern.
    Die Seite besteht aus einem Grid-Layout, mit einer beliebigen Anzahl Zeilen und immer drei Spalten.
    Ich habe dazu eine MIGX erstellt mit dem Namen "zeile".
    Dieses beinhaltet drei Richttext-TVs: Spalte1, Spalte2, Spalte3

    Ich gebe die Zeilen über ein Snippet aus:
    $zeilen = json_decode($resource->getTVValue('mg_zeile'));
    foreach ($zeilen as $zeile)
    {
    echo '<div>$zeile->Spalte1</div>'
    echo '<div>$zeile->Spalte2</div>'
    echo '<div>$zeile->Spalte3</div>'
    }

    Das klappt auch wunderbar.

    Im Manager von ModX gibt es die Möglichkeit, die Reihenfolge der Zeilen per Drag&Drop in der MIGX-Tabelle zu ändern.



    Ich kann die letzte Zeile z.B. nach ganz oben verschieben.



    Die Reihenfolge der Zeilen wird dann auch in der Ausgabe über das Snippet beibehalten.


    Die Tabelle bietet aber nicht nur die Möglichkeit, die Zeilen per Drag&Drop zu verschieben,
    sondern auch die Spalten.




    Aber wie komme ich (wenn das überhaupt möglich ist) mit meinen Script nun an die Sortierung der Spalten im Backend?

    Stelle mir das in etwa so vor:

    $zeilen = json_decode($resource->getTVValue('mg_zeile'));
    $spalten = array();

    foreach ($zeilen as $zeile)
    {
    $spalten=Array();
    $indexSortierungSpalte1 = ??Wir komme ich an den Index der Spalten in der MIGX-Tabelle (siehe Bild oben) ??
    $indexSortierungSpalte2 = ?????
    $indexSortierungSpalte3 = ?????

    $spalten[$indexSortierungSpalte1] = $zeile->spalte1; // Content der TV in Array speichern
    $spalten[$indexSortierungSpalte2] = $zeile->spalte2;
    $spalten[$indexSortierungSpalte3] = $zeile->spalte3

    // Content sortiert ausgeben:
    for ($index=0;$index<=3;$index++)
    {
    echo $spalten[$index];
    }

    }

    Sieht jetzt schon ziemlich nach eine Krücke aus - aber vielleicht wird klarer, wo mein (sicher alleiniges ;-) ) Problem liegt.
    Ich denke auch nicht, das die Benutzung der MIGX so vorgesehen ist.
    Aber vielleicht kann ja trotzdem jemand eine kurzen Hinweis geben, wie ich die Sortierung der MIGX-Tabelle übernehmen kann.

    Viele Grüße und nochmals Danke,
    Jonas
    • CommentAuthorBruno
    • CommentTime12.07.2012 bearbeitet
     permalink
    Das geht so nicht, Die Felder werden immer in der gleichen Reihenfolge im json-string gespeichert.

    Du könntest jedoch ne zweite MIGX-TV nehmen für die Spalten und damit die Reihenfolge der Spalten festlegen.

    Die Reihenfolge der Spalten übergibst Du Deinem snippet:

    [[!DeinSnippet? &tvname=`zeilenTV` &spaltenTV=`spaltenTV`]]

    oder Du erstellst ne eigene dropdownTV, womit Du die Spaltensortierungen vorgibst:

    Eingabeoptionen: 1,2,3||2,3,1||3,1,2||3,2,1||2,1,3||1,3,2

    sicher könnte man auch ein egenes grid bauen, womit es machbar wäre per drag die spaltenreihenfolge festzulegen.
    • CommentAuthorjonas77
    • CommentTime13.07.2012
     permalink
    Hallo Bruno,

    habe ich mir schon fast gedacht, dass das nicht so einfach geht.
    Ich werde es über das DropDown-Feld lösen.

    Viele Dank für deine Hilfe und deine insgesamt einfach geniale Arbeit!!