2016-04-01 6 views
0

Ich versuche, ein Karussell zu erstellen, und ich möchte konfigurierbar aus dem Experience Editor. Durch konfigurierbar bedeutete ich, dass es möglich ist, das Bild zu bearbeiten, Text und Hinzufügen/Entfernen von Folien.Rendern Sie Elemente in getrennten Platzhalter

Das erste Mal, wenn ich das Karussell erstelle, kann ich Folien hinzufügen/entfernen, aber nach dem Speichern und Öffnen, nach dem Rendern des Karussells kann ich nicht nur eine Folie entfernen, da sie alle Teil des gleichen Platzhalters sind (I kann neue Folien hinzufügen und die neuen entfernen, aber nicht die alten).

Ich habe Carousel.cshtml und CarouselSlide.cshtml und den Code wie folgt aussehen:

Carousel.cshtml

<div class="carousel"> 
    @foreach (Item slide in Model.Item.Children) 
    { 
     @Html.Action("CarouselSlide", "MediaFeature", new { model = slide }); 
    } 

    @Html.Sitecore().DynamicPlaceholder("slides") 

</div> 

CarouselSlide.cshtml

<div class="carousel-slide"> 
    <div class="carousel-slide-content"> 
     @Html.Sitecore().BeginField(....) 
      <div class="background-image"> 
        ..... 
      </div> 

      <div class="text-container"> 
        .... 
      </div> 
     @Html.Sitecore().EndField() 
    </div> 
</div> 

Bisher ist das Problem aussieht ist mit den Platzhaltern verwandt. Irgendwelche Ideen zum Rendern von DynamicPlaceholders?

EDIT

"Dias" Platzhalter konfiguriert ist nur CarouselSlide Komponenten

+0

Fügen Sie dem Platzhalter für Folien nacheinander eine Folienkomponente hinzu?Oder haben Sie eine Folienvorlage, in der der Benutzer Folien auswählt, die zu einem Foliencontainer hinzugefügt werden sollen, und Sie das Foliencontainerelement als Datenquelle aus Ihrer Karussellkomponente auswählen? –

+0

@dnstommy Ich füge sie nacheinander aus dem Experience Editor – Melvinr

+0

ok. Haben Sie hier nach dem doco auf dynamischen Platzhaltern gesucht? Ihre Platzhalter sollten am Ende eine Anleitung haben. https://marketplace.sitecore.net/en/Modules/I/Integrated_Dynamic_Placeholders.aspx –

Antwort

0

Entfernen der foreach-Schleife zu ermöglichen. Es ist unnötig. Wenn Sitecore den Platzhalter rendert, rendert es die zuvor hinzugefügten Folien für Sie. Im Bearbeitungsmodus rendert es auch den Container, mit dem Sie zusätzliche Komponenten hinzufügen können.

Wenn Sie einen dynamischen Platzhalter verwenden, können Sie mehrere Karussellkomponenten auf einer Seite verwenden. Genauer gesagt, mehrere Komponenten, die einen Platzhalter mit dem Schlüssel "Slides" enthalten. Es ist höchstwahrscheinlich nicht die Probleme verursachen, die Sie mit Ihren Folien sehen.

Update - zusätzliche Informationen von OP angefordert

Es sieht aus wie das, was Sie getan haben, ist, zwei verschiedene Arten von Entwicklungs mischen. In einem Fall werden die untergeordneten Elemente des Karussellelements explizit als Folien gerendert. Im zweiten Fall verlassen Sie sich auf die Präsentations-Engine von Sitecore, um Komponenten dynamisch in einen Platzhalter zu rendern, der Datenquellen von einer anderen Stelle in der Struktur verwenden könnte. Sie müssen das eine oder andere auswählen, aber der zweite Ansatz ist in der Regel bevorzugt.

den zweiten Ansatz zu verwenden, würden Sie einfach die foreach-Schleife entfernen, so dass Ihre Karussell-Ansicht wie folgt aussieht:

<div class="carousel"> 
    @Html.Sitecore().DynamicPlaceholder("slides") 
</div> 

Wenn Sie sich entscheiden, mit dem ersten Ansatz zu gehen, würden Sie den Platzhalter entfernen und dann Fügen Sie benutzerdefinierte Experience-Schaltflächen hinzu, mit denen Sie untergeordnete Objekte in Ihr Karussellelement einfügen und sortieren können.

Mit beiden Ansatz können Sie feststellen, dass Seiteneditor nicht so gut mit Ihrem Karussell-Javascript. Die häufigste Problemumgehung für dieses Problem besteht darin, das Karussell als eine flache Liste im Seiteneditormodus darzustellen.

+0

Die foreach-Schleife wird verwendet, wenn ich vorhandene Folien rendern muss. ZB: Ich habe ein Karussell in der Homepage erstellt und möchte dieses Karussell (einschließlich der Folien natürlich) auf einer anderen Seite wiederverwenden, also brauche ich eine Schleife, um die vorhandenen Folien zu rendern – Melvinr

+0

Sie müssen das nicht tun . Der Platzhalter erledigt das für Sie. –

+0

Ich verstehe Ihren Standpunkt nicht, können Sie bitte Ihre Antwort mit dem Code aktualisieren. Ich denke, was Sie sagen, funktioniert nur, wenn ich nicht eine Liste von Objekt (Folien), sondern nur ein Element in einem bestimmten Platzhalter rendern – Melvinr