Automad
 All Classes Functions Variables Pages
carousel.php
1 <?php
2 /*
3  * CAROUSEL
4  * Extension for Automad
5  *
6  * Copyright (c) 2014 by Marc Anton Dahmen
7  * http://marcdahmen.de
8  *
9  * Licensed under the MIT license.
10  * http://automad.org/license
11  */
12 
13 
14 namespace Extensions;
15 
16 
26 class Carousel {
27 
28 
54  public function Carousel($options, $Automad) {
55 
56  $defaults = array(
57  'files' => '*.jpg',
58  'width' => 400,
59  'height' => 300,
60  'fullscreen' => false,
61  'order' => false,
62  'duration' => 3000,
63  'controls' => true
64  );
65 
66  // Merge defaults with options
67  $options = array_merge($defaults, $options);
68 
69  // Get file list.
70  $files = \Automad\Core\Parse::fileDeclaration($options['files'], $Automad->Context->get());
71 
72  // Sort images.
73  if ($options['order'] == 'asc') {
74  sort($files, SORT_NATURAL);
75  }
76 
77  if ($options['order'] == 'desc') {
78  rsort($files, SORT_NATURAL);
79  }
80 
81  // HTML
82  if ($files) {
83 
84  // Generate unique ID, in case more than one carousel get used on one page.
85  $id = 'carousel-' . crc32(uniqid('', true));
86 
87  // Add "fullscreen" class, if $options['fullscreen'] is true.
88  if ($options['fullscreen']) {
89  $classAttribute = ' class="carousel fullscreen slide"';
90  } else {
91  $classAttribute = ' class="carousel slide"';
92  }
93 
94  // The duration option gets passed as a data attribute.
95  $html = '<div id="' . $id . '"' . $classAttribute . ' data-ride="carousel" data-interval="' . $options['duration'] . '">';
96 
97  // Indicators
98  if (count($files) > 1 && $options['controls']) {
99 
100  $html .= '<ol class="carousel-indicators">';
101 
102  foreach ($files as $i => $file) {
103 
104  $html .= '<li data-target="#' . $id . '" data-slide-to="' . $i . '"';
105 
106  if ($i == 0) {
107  $html .= ' class="active"';
108  }
109 
110  $html .= '></li>';
111 
112  }
113 
114  $html .= '</ol>';
115 
116  }
117 
118  // Slides
119  $html .= '<div class="carousel-inner">';
120 
121  foreach ($files as $i => $file) {
122 
123  $html .= '<div class="item';
124 
125  if ($i == 0) {
126  $html .= ' active';
127  }
128 
129  $html .= '">';
130 
131  if ($options['fullscreen']) {
132  $image = new \Automad\Core\Image($file, $options['width'], $options['height'], false);
133  $html .= '<div class="image" style="background-image: url(\'' . $image->file . '\');"></div>';
134  } else {
135  $html .= \Automad\Core\Html::addImage($file, $options['width'], $options['height'], true);
136  }
137 
138  $html .= '<div class="carousel-caption">' . \Automad\Core\Html::addVariable('carousel_caption_' . \Automad\Core\Parse::sanitize(basename($file))) . '</div>' .
139  '</div>';
140 
141  }
142 
143  $html .= '</div>';
144 
145  // Controls
146  if (count($files) > 1 && $options['controls']) {
147  $html .= '<a class="left carousel-control" href="#' . $id . '" data-slide="prev"><span class="glyphicon glyphicon-chevron-left"></span></a>' .
148  '<a class="right carousel-control" href="#' . $id . '" data-slide="next"><span class="glyphicon glyphicon-chevron-right"></span></a>';
149  }
150 
151  $html .= '</div>';
152 
153  return $html;
154 
155  }
156 
157  }
158 
159 
160 }
161 
162 
163 ?>
static fileDeclaration($str, $Page, $stripBaseDir=false)
Definition: parse.php:116