HCE Project DC service web UI  0.2
Hierarchical Cluster Engine DC service web UI
 All Classes Namespaces Files Functions Variables Pages
TbCarousel.php
Go to the documentation of this file.
1 <?php
22 class TbCarousel extends CWidget {
23 
27  public $prevLabel = '<span class="glyphicon glyphicon-chevron-left"></span>';
28 
32  public $nextLabel = '<span class="glyphicon glyphicon-chevron-right"></span>';
33 
37  public $slide = true;
38 
42  public $displayPrevAndNext = true;
43 
47  public $items = array();
48 
52  public $options = array();
53 
57  public $events = array();
58 
62  public $htmlOptions = array();
63 
69  public function init() {
70 
71  if (!isset($this->htmlOptions['id'])) {
72  $this->htmlOptions['id'] = $this->getId();
73  }
74 
75  $classes = array('carousel');
76 
77  if ($this->slide === true) {
78  $classes[] = 'slide';
79  }
80 
81  if (!empty($classes)) {
82  $classes = implode(' ', $classes);
83  if (isset($this->htmlOptions['class'])) {
84  $this->htmlOptions['class'] .= ' ' . $classes;
85  } else {
86  $this->htmlOptions['class'] = $classes;
87  }
88  }
89  }
90 
96  public function run() {
97 
98  $id = $this->htmlOptions['id'];
99 
100  echo CHtml::openTag('div', $this->htmlOptions);
101  $this->renderIndicators();
102  echo '<div class="carousel-inner">';
103  $this->renderItems($this->items);
104  echo '</div>';
105 
106  if ($this->displayPrevAndNext) {
107  echo '<a class="carousel-control left" href="#' . $id . '" data-slide="prev">' . $this->prevLabel . '</a>';
108  echo '<a class="carousel-control right" href="#' . $id . '" data-slide="next">' . $this->nextLabel . '</a>';
109  }
110 
111  echo '</div>';
112 
114  $cs = Yii::app()->getClientScript();
115  $options = !empty($this->options) ? CJavaScript::encode($this->options) : '';
116  $cs->registerScript(__CLASS__ . '#' . $id, "jQuery('#{$id}').carousel({$options});");
117 
118  foreach ($this->events as $name => $handler) {
119  $handler = CJavaScript::encode($handler);
120  $cs->registerScript(__CLASS__ . '#' . $id . '_' . $name, "jQuery('#{$id}').on('{$name}', {$handler});");
121  }
122  }
123 
127  protected function renderIndicators() {
128 
129  echo '<ol class="carousel-indicators">';
130  $count = count($this->items);
131  for ($i = 0; $i < $count; $i++) {
132  echo '<li data-target="#'.$this->id.'" data-slide-to="'.$i.'" class="'.($i===0?'active':'').'"></li>';
133  }
134  echo '</ol>';
135  }
136 
144  protected function renderItems($items) {
145 
146  foreach ($items as $i => $item) {
147  if (!is_array($item)) {
148  continue;
149  }
150 
151  if (isset($item['visible']) && $item['visible'] === false) {
152  continue;
153  }
154 
155  if (!isset($item['itemOptions'])) {
156  $item['itemOptions'] = array();
157  }
158 
159  $classes = array('item');
160 
161  if ($i === 0) {
162  $classes[] = 'active';
163  }
164 
165  if (!empty($classes)) {
166  $classes = implode(' ', $classes);
167  if (isset($item['itemOptions']['class'])) {
168  $item['itemOptions']['class'] .= ' ' . $classes;
169  } else {
170  $item['itemOptions']['class'] = $classes;
171  }
172  }
173 
174  echo CHtml::openTag('div', $item['itemOptions']);
175 
176  if (isset($item['image'])) {
177  if (!isset($item['alt'])) {
178  $item['alt'] = '';
179  }
180 
181  if (!isset($item['imageOptions'])) {
182  $item['imageOptions'] = array();
183  }
184 
189  if (isset($item['link'])) {
190  // Any kind of link options
191  if (!isset($item['linkOptions']) || !is_array($item['linkOptions'])) {
192  $item['linkOptions'] = array();
193  }
194 
195  // URL
196  if(is_array($item['link'])) {
197  $route = isset($item['link'][0]) ? $item['link'][0] : '';
198  $item['linkOptions']['href'] = Yii::app()->createUrl($route, array_splice($item['link'], 1));
199  } else {
200  $item['linkOptions']['href'] = $item['link'];
201  }
202 
203  // Print out 'A' tag
204  echo CHtml::openTag('a', $item['linkOptions']);
205  }
206 
207  echo CHtml::image($item['image'], $item['alt'], $item['imageOptions']);
208 
209  if (isset($item['link'])) {
210  echo '</a>';
211  }
212  }
213 
214  if (!empty($item['caption']) && (isset($item['label']) || isset($item['caption']))) {
215  if (!isset($item['captionOptions'])) {
216  $item['captionOptions'] = array();
217  }
218 
219  if (isset($item['captionOptions']['class'])) {
220  $item['captionOptions']['class'] .= ' carousel-caption';
221  } else {
222  $item['captionOptions']['class'] = 'carousel-caption';
223  }
224 
225  echo CHtml::openTag('div', $item['captionOptions']);
226 
227  if (isset($item['label'])) {
228  echo '<h3>' . $item['label'] . '</h3>';
229  }
230 
231  if (isset($item['caption'])) {
232  echo '<p>' . $item['caption'] . '</p>';
233  }
234 
235  echo '</div>';
236  }
237  echo '</div>';
238  }
239  }
240 }