danielebarchiesi@2
|
1 <?php
|
danielebarchiesi@2
|
2
|
danielebarchiesi@2
|
3 /**
|
danielebarchiesi@2
|
4 * @file
|
danielebarchiesi@2
|
5 * Theme and preprocess functions for Flexslider Views
|
danielebarchiesi@2
|
6 *
|
danielebarchiesi@2
|
7 * @author Mathew Winstone (minorOffense) <mwinstone@coldfrontlabs.ca>
|
danielebarchiesi@2
|
8 */
|
danielebarchiesi@2
|
9
|
danielebarchiesi@2
|
10 /**
|
danielebarchiesi@2
|
11 * FlexSlider Views theme for the main wrapper element
|
danielebarchiesi@2
|
12 *
|
danielebarchiesi@2
|
13 * @ingroup themeable
|
danielebarchiesi@2
|
14 */
|
danielebarchiesi@2
|
15 function _flexslider_views_slideshow_preprocess_flexslider_views_slideshow_main_frame(&$vars) {
|
danielebarchiesi@2
|
16 // @todo see if we can get this to call theme('flexslider') instead.
|
danielebarchiesi@2
|
17 // return
|
danielebarchiesi@2
|
18 // Load the settings, row information, view data and views slideshow ID into
|
danielebarchiesi@2
|
19 // more conveniently named variables.
|
danielebarchiesi@2
|
20 $settings = $vars['settings'];
|
danielebarchiesi@2
|
21 $rows = $vars['rows'];
|
danielebarchiesi@2
|
22 $view = $vars['view'];
|
danielebarchiesi@2
|
23 $vss_id = $vars['vss_id'];
|
danielebarchiesi@2
|
24
|
danielebarchiesi@2
|
25 // Load the option set data
|
danielebarchiesi@2
|
26 $optionset = $settings['optionset'];
|
danielebarchiesi@2
|
27 $settings = flexslider_optionset_load($settings['optionset']);
|
danielebarchiesi@2
|
28 $settings = $settings->options;
|
danielebarchiesi@2
|
29
|
danielebarchiesi@2
|
30
|
danielebarchiesi@2
|
31 // Cast the strings into int or bool as necessary
|
danielebarchiesi@2
|
32 $new_settings = array();
|
danielebarchiesi@2
|
33 foreach ($settings as $key => $value) {
|
danielebarchiesi@2
|
34 if (is_string($value)) {
|
danielebarchiesi@2
|
35
|
danielebarchiesi@2
|
36 $value = str_ireplace("\n", ' ', $value);
|
danielebarchiesi@2
|
37 $value = trim($value);
|
danielebarchiesi@2
|
38
|
danielebarchiesi@2
|
39 // Check for numbers and/or boolean values
|
danielebarchiesi@2
|
40 if (is_numeric($value)) {
|
danielebarchiesi@2
|
41 $value = (int)$value;
|
danielebarchiesi@2
|
42 }
|
danielebarchiesi@2
|
43 elseif (drupal_strtolower($value) == 'true') {
|
danielebarchiesi@2
|
44 $value = TRUE;
|
danielebarchiesi@2
|
45 }
|
danielebarchiesi@2
|
46 elseif (drupal_strtolower($value) == 'false') {
|
danielebarchiesi@2
|
47 $value = FALSE;
|
danielebarchiesi@2
|
48 }
|
danielebarchiesi@2
|
49 }
|
danielebarchiesi@2
|
50
|
danielebarchiesi@2
|
51 $new_settings[$key] = $value;
|
danielebarchiesi@2
|
52 }
|
danielebarchiesi@2
|
53
|
danielebarchiesi@2
|
54 // Merge the existing settings with the generated ones
|
danielebarchiesi@2
|
55 $settings = array_merge(
|
danielebarchiesi@2
|
56 array(
|
danielebarchiesi@2
|
57 'num_divs' => sizeof($rows),
|
danielebarchiesi@2
|
58 'id_prefix' => '#flexslider_views_slideshow_main_',
|
danielebarchiesi@2
|
59 //'div_prefix' => '#'
|
danielebarchiesi@2
|
60 // @todo figure out what the div prefix is used for
|
danielebarchiesi@2
|
61 'vss_id' => $vss_id,
|
danielebarchiesi@2
|
62 ),
|
danielebarchiesi@2
|
63 $new_settings
|
danielebarchiesi@2
|
64 );
|
danielebarchiesi@2
|
65
|
danielebarchiesi@2
|
66 // We need to go through the current js setting values to make sure the one we
|
danielebarchiesi@2
|
67 // want to add is not already there. If it is already there then append -[num]
|
danielebarchiesi@2
|
68 // to the id to make it unique.
|
danielebarchiesi@2
|
69 $slideshow_count = 1;
|
danielebarchiesi@2
|
70 $current_settings = drupal_add_js();
|
danielebarchiesi@2
|
71 foreach ($current_settings['settings']['data'] AS $current_setting) {
|
danielebarchiesi@2
|
72 if (isset($current_setting['flexslider_views_slideshow'])) {
|
danielebarchiesi@2
|
73 $current_keys = array_keys($current_setting['flexslider_views_slideshow']);
|
danielebarchiesi@2
|
74 if (stristr($current_keys[0], '#flexslider_views_slideshow_main_' . $vss_id)) {
|
danielebarchiesi@2
|
75 $slideshow_count++;
|
danielebarchiesi@2
|
76 }
|
danielebarchiesi@2
|
77 }
|
danielebarchiesi@2
|
78 }
|
danielebarchiesi@2
|
79
|
danielebarchiesi@2
|
80 // Append the new unique IDs if required
|
danielebarchiesi@2
|
81 if ($slideshow_count > 1) {
|
danielebarchiesi@2
|
82 $vss_id .= '-' . $slideshow_count;
|
danielebarchiesi@2
|
83 $settings['vss_id'] = $vss_id;
|
danielebarchiesi@2
|
84 }
|
danielebarchiesi@2
|
85
|
danielebarchiesi@2
|
86 // Load the FlexSlider library for use.
|
danielebarchiesi@2
|
87 libraries_load('flexslider');
|
danielebarchiesi@2
|
88
|
danielebarchiesi@2
|
89 // Create the settings container
|
danielebarchiesi@2
|
90 // Due to a limitation inside of views_slideshow, the ID for the settings container
|
danielebarchiesi@2
|
91 // must end with _main
|
danielebarchiesi@2
|
92 //
|
danielebarchiesi@2
|
93 // see lines 162 through 169 in views_slideshow.theme.inc
|
danielebarchiesi@2
|
94 drupal_add_js(array('flexslider_views_slideshow' => array('#flexslider_views_slideshow_main_' . $vss_id => $settings)), 'setting');
|
danielebarchiesi@2
|
95
|
danielebarchiesi@2
|
96 // Load the initilization javascript
|
danielebarchiesi@2
|
97 drupal_add_js(drupal_get_path('module', 'flexslider_views_slideshow') . '/js/flexslider_views_slideshow.js');
|
danielebarchiesi@2
|
98
|
danielebarchiesi@2
|
99 // Required container class for FlexSlider
|
danielebarchiesi@2
|
100 $vars['classes_array'][] = 'slides';
|
danielebarchiesi@2
|
101
|
danielebarchiesi@2
|
102 // Render the rows
|
danielebarchiesi@2
|
103 $rendered_rows = '';
|
danielebarchiesi@2
|
104 $slideshow_count = 0;
|
danielebarchiesi@2
|
105 foreach ($rows as $count => $row) {
|
danielebarchiesi@2
|
106 $items[] = $row;
|
danielebarchiesi@2
|
107 // @todo see if we can group multiple items per slide
|
danielebarchiesi@2
|
108 $rendered_rows .= theme('flexslider_views_slideshow_main_frame_row', array('vss_id' => $vss_id, 'items' => $items, 'count' => $count, 'view' => $view));
|
danielebarchiesi@2
|
109
|
danielebarchiesi@2
|
110 // Clear the items array
|
danielebarchiesi@2
|
111 $items = array();
|
danielebarchiesi@2
|
112 // Count the number of slides created
|
danielebarchiesi@2
|
113 $slideshow_count++;
|
danielebarchiesi@2
|
114 }
|
danielebarchiesi@2
|
115
|
danielebarchiesi@2
|
116 // Save the rendered rows
|
danielebarchiesi@2
|
117 $vars['rendered_rows'] = $rendered_rows;
|
danielebarchiesi@2
|
118 }
|
danielebarchiesi@2
|
119
|
danielebarchiesi@2
|
120 /**
|
danielebarchiesi@2
|
121 * FlexSlider Views Slideshow theme for the row element
|
danielebarchiesi@2
|
122 *
|
danielebarchiesi@2
|
123 * @ingroup themeable
|
danielebarchiesi@2
|
124 */
|
danielebarchiesi@2
|
125 function _flexslider_views_slideshow_preprocess_flexslider_views_slideshow_main_frame_row(&$vars) {
|
danielebarchiesi@2
|
126 $current = $vars['count'] + 1;
|
danielebarchiesi@2
|
127 $vars['classes_array'][] = 'flexslider_views_slideshow_slide views-row-' . $current;
|
danielebarchiesi@2
|
128
|
danielebarchiesi@2
|
129 // @todo figure out why this if statement is here
|
danielebarchiesi@2
|
130 if ($vars['count']) {
|
danielebarchiesi@2
|
131 $vars['classes_array'][] = 'views_slideshow_cycle_hidden';
|
danielebarchiesi@2
|
132 }
|
danielebarchiesi@2
|
133 // @todo add option to toggle views rows counters on/off
|
danielebarchiesi@2
|
134 $vars['classes_array'][] = ($vars['count'] % 2) ? 'views-row-even' : 'views-row-odd';
|
danielebarchiesi@2
|
135
|
danielebarchiesi@2
|
136 $vars['rendered_items'] = '';
|
danielebarchiesi@2
|
137 foreach ($vars['items'] as $item_count => $item) {
|
danielebarchiesi@2
|
138 $vars['rendered_items'] .= theme('flexslider_views_slideshow_main_frame_row_item', array('item' => $item, 'item_count' => $item_count, 'view' => $vars['view']));
|
danielebarchiesi@2
|
139 }
|
danielebarchiesi@2
|
140 }
|
danielebarchiesi@2
|
141
|
danielebarchiesi@2
|
142 /**
|
danielebarchiesi@2
|
143 * FlexSlider Views Slideshow theme for an item within a row
|
danielebarchiesi@2
|
144 *
|
danielebarchiesi@2
|
145 * @ingroup themeable
|
danielebarchiesi@2
|
146 */
|
danielebarchiesi@2
|
147 function _flexslider_views_slideshow_preprocess_flexslider_views_slideshow_main_frame_row_item(&$vars) {
|
danielebarchiesi@2
|
148 $vars['classes_array'][] = 'views-row views-row-' . $vars['item_count'];
|
danielebarchiesi@2
|
149 if (!$vars['item_count']) {
|
danielebarchiesi@2
|
150 $vars['classes_array'][] = 'views-row-first';
|
danielebarchiesi@2
|
151 }
|
danielebarchiesi@2
|
152 if ($vars['item_count'] % 2) {
|
danielebarchiesi@2
|
153 $vars['classes_array'][] = 'views-row-even';
|
danielebarchiesi@2
|
154 }
|
danielebarchiesi@2
|
155 else {
|
danielebarchiesi@2
|
156 $vars['classes_array'][] = 'views-row-odd';
|
danielebarchiesi@2
|
157 }
|
danielebarchiesi@2
|
158
|
danielebarchiesi@2
|
159 /**
|
danielebarchiesi@2
|
160 * Support custom row classes.
|
danielebarchiesi@2
|
161 */
|
danielebarchiesi@2
|
162 if ($row_class = $vars['view']->style_plugin->get_row_class($vars['item_count'])) {
|
danielebarchiesi@2
|
163 $vars['classes_array'][] = $row_class;
|
danielebarchiesi@2
|
164 }
|
danielebarchiesi@2
|
165 }
|