2012-10-30 14 views
10

Ich bin auf der Suche nach Einträgen von ExpressionEngine in einem Popup-modal mit einem Ajax-Aufruf mit jQuery, die Idee ist, wenn der Benutzer auf den Eintrag Titel öffnet, zeigen Sie ein Modal mit dem vollständigen Eintrag in es. Ich suche dann eine nächste & Schaltfläche auf dem Modal, die es mir ermöglicht, zu den nächsten und vorherigen Einträgen innerhalb des Popup-Modales zu wechseln. Ich weiß nicht, ob es am besten ist, die Vorlage oder einen Feed, d. H. JSON, zu laden, oder ob es eine andere Möglichkeit gibt, die ich gerne höre.Einträge in ExpressionEngine mit AJAX laden

Hat jemand versucht dies noch oder weiß von einem tut, dass vielleicht hilfreich. Ich bin auf diesen Artikel gestoßen, der etwas Licht darauf wirft, http://spibey.com/blog/2011/11/using-partial-views-in-the-expressionengine-control-panel-for-ajax-requests-or-similar/

+0

Welche modal-Plugin verwenden Sie? Mit den meisten können Sie eine Vorlage als Iframe im modalen Fenster laden. Sie können dann diese Vorlage genau so programmieren, wie Sie es normalerweise tun würden, und sie wird die vorherigen/nächsten Schaltflächen korrekt durchlaufen. –

Antwort

11

Das Tutorial, das Sie verknüpft haben, ist für das Bedienfeld. Da Sie über Inhalte am Frontend sprechen, können Sie alles in EE-Vorlagen mit regulären alten EE-Tags tun.

Ich empfehle eine Vorlagengruppe, um Ihre HTML-Fragmente zu halten. In diesem Fall kann es zweckmäßig sein, die Eintrittskörper zu setzen, und der Eintrag verbindet in einer einzigen Vorlage

ajax.group 
    - single_entry.html 

Dann am einfachsten, in dieser Vorlage Sie

<div id="entry-body"> 
    {exp:channel:entries channel="channel_name_here" entry_id="{segment_3}"} 
     <h2>{title}</h2> 
     {body} 
    {/exp:channel:entries} 
</div> 

<div id="entry-links"> 
    {exp:channel:next_entry}   
     <a href="{path='ajax/single_entry'}" class="next">Next</a> 
    {/exp:channel:next_entry} 
    {exp:channel:prev_entry} 
     <a href="{path='ajax/single_entry'}" class="prev">Previous</a> 
    {/exp:channel:prev_entry} 
</div> 

haben würde, wenn Sie anfordern diese Fragmente mit Ajax, sicher sein, die aktuelle entry_id oder url_title als URL-Segment, so dass die Fragmentvorlage lädt die richtigen Daten für Sie. Sie können einen Selektor an load() übergeben, um den gewünschten Teil von HTML zu holen und in den entsprechenden Container auf Ihrer Seite zu laden. In seiner einfachsten Form, so etwas wie

$('#entry-container').load('ajax/single_entry/2 #entry-body'); 
$('#entry-links').load('ajax/single_entry/2 #entry-links'); 

wo die 2 die entry_id des Eintrags ist das Sie laden. Siehe http://api.jquery.com/on/

Schließlich müssten Sie jQuery-Ereignis-Listener auf den nächsten und vorherigen Eintrag-Links haben, so dass sie jQuery load() auslösen, um den nächsten Eintrag zu laden. Hier ist ein Beispiel für die .next Verbindung.

$(document).on('click', '.next', function(event) { 
    var url = $(this).attr('href'); 
    $('#entry-container').load(url); // load the html into your chosen DOM element 
    event.preventDefault(); // prevent the browser from navigating to this page  
}); 

Siehe http://api.jquery.com/on/

+0

Danke, das ist eine gute Antwort und du brichst es gut ab. Würden Sie vorschlagen, bereits ein modales Popup zu verwenden, z. fancybox oder etwas ähnliches oder würdest du deine eigene Funktion erstellen, damit der AJAX besser funktioniert? Ein gutes Beispiel für das, was ich erreichen möchte, ist die Google Chrome Store-Funktion im Chrome-Browser. Wenn Sie auf eine App klicken, um mehr zu erfahren, wird ein Popup angezeigt. Ich würde definitiv versuchen, den Knopf auf der Außenseite des modalen zu setzen, aber ich denke, dass ich in der Lage sein würde, das mit einem kundenspezifischen Popup und einigen bereits verfügbaren Plugins zu handhaben – zizther

+0

Um ehrlich zu sein mit Fancybox (oder ähnlich) und iframe (wie @MediaGirl in ihrem Kommentar oben erwähnt) wird wahrscheinlich genau das tun, was Sie brauchen und etwas Aufwand sparen. Sie möchten dennoch eine ähnliche Seitenfragmentvorlage für Ihre Zwecke erstellen, die jedoch nur im iframe im modalen Fenster geladen wird. Aber völlig kundenspezifisch zu sein, oder diesen Ajax-Ansatz mit Modal-Plugin zu kombinieren, würde Ihnen wahrscheinlich ein wenig mehr Freiheit geben. Schwer zu sagen, was für Ihre Situation besser ist. –

+0

Ich nehme an das ändert sich die URL nicht, so dass Leute wieder darauf zugreifen können und das Popup geöffnet ist? – zizther