core icon indicating copy to clipboard operation
core copied to clipboard

Feature: Navigation oben bzw. oben/unten im Content-Slider-Element

Open Samson1964 opened this issue 9 years ago • 3 comments

Der Content-Slider (Contao 3.5.x) erlaubt die Navigation nur im Template ce_slider_stop, also unten. Bei längeren Inhalten muß man nach jedem Navigationsschritt zum Kopf des Inhaltes des aktuellen Slides scrollen, um zu sehen an welcher Stelle man gerade ist. Dort steht nämlich z.B. eine Überschrift, die einem sagt, was man sich gerade ansieht.

Beispiel: ce_slider

Unten ist die Navigation. Da die Überschrift über der darüberstehenden Tabelle nicht zu sehen ist, muß der Benutzer nach oben scrollen. Um anschließend evtl. wieder nach unten zu scrollen und zum nächsten Navigationspunkt zu springen.

Ich habe deshalb eine Kopie der Navigation in das Template ce_slider_start gepackt. Effekt: die Navigationspunkte sind jetzt nur noch oben zu sehen und unten bleibt der slider-menu-Container leer. Dafür fehlen oben die Werte aus $this->previous und $this->next. Sie werden dem Template nicht übergeben. Die muß ich deswegen direkt in das Template reinschreiben.

Mein Wunsch deshalb: In /system/modules/core/elements/ContentSliderStart.php die beiden Variablen zu übergeben - analog wie in /system/modules/core/elements/ContentSliderStop.php.

Damit eine doppelte Navigation möglich ist (oben/unten) muß wahrscheinlich das Template j_slider angepaßt werden. Eine funktionierende Navigation oben reicht mir aber. Zumal der Besucher jetzt nicht mehr hin- und herscrollen muß.

Samson1964 avatar Mar 28 '16 09:03 Samson1964

Bis dahin könntest du die Navigation mit JS nach oben bringen. Ich hatte das mal gemacht, als ich den Slider in eine Tabnavigation umgebaut hatte.

Hier mal ein Auszug (MooTools)

(function($) {
  window.addEvent('domready', function() {

    // Build a tab looking slider from normal slider
    if($$('.my_slider')[0]) {
      // Navigation to the top
      $$('.my_slider .slider-control').inject($$('.my_slider .ce_sliderStart')[0], 'top');
      // Hide the arrows
      // $$('.my_slider .slider-next, .my_slider .slider-prev').destroy();
    }

  });
})(document.id);

Aybee avatar Mar 28 '16 09:03 Aybee

Alles was fehlt ist eigentlich nur

$this->Template->previous = $GLOBALS['TL_LANG']['MSC']['previous'];
$this->Template->next = $GLOBALS['TL_LANG']['MSC']['next'];

in ContentSliderStart.php. Daher kannst du dein ce_slider_start Template auch einfach folgendermaßen umsetzen:


<div class="<?= $this->class ?> block"<?= $this->cssID ?><?php if ($this->style): ?> style="<?= $this->style ?>"<?php endif; ?>>

  <?php if ($this->headline): ?>
    <<?= $this->hl ?>><?= $this->headline ?></<?= $this->hl ?>>
  <?php endif; ?>

  <nav class="slider-control">
    <a href="#" class="slider-prev"><?= $GLOBALS['TL_LANG']['MSC']['previous'] ?></a>
    <span class="slider-menu"></span>
    <a href="#" class="slider-next"><?= $GLOBALS['TL_LANG']['MSC']['next'] ?></a>
  </nav>

  <div class="content-slider" data-config="<?= $this->config ?>">
    <div class="slider-wrapper">

fritzmg avatar Mar 28 '16 10:03 fritzmg

Damit eine doppelte Navigation möglich ist (oben/unten) muß wahrscheinlich das Template j_slider angepaßt werden.

Eine Template Anpassung alleine reicht hier leider nicht. Swipe unterstützt von Haus aus keine Navigation - diese Funktionalität hat Leo Feyer hinzugefügt: https://github.com/contao/core/blob/3.5.9/assets/swipe/2.0/js/swipe.js#L125 Diese Funktion unterstützt derzeit nur einen einzelnen container, worin sich .slider-prev, .slider-next und .slider-menu befinden.

fritzmg avatar Mar 28 '16 10:03 fritzmg