danielebarchiesi@2
|
1 <?php
|
danielebarchiesi@2
|
2 /**
|
danielebarchiesi@2
|
3 * @file
|
danielebarchiesi@2
|
4 * Theming functions for the flexslider module.
|
danielebarchiesi@2
|
5 *
|
danielebarchiesi@2
|
6 * Preprocessor functions fill variables for templates and helper
|
danielebarchiesi@2
|
7 * functions to make theming easier.
|
danielebarchiesi@2
|
8 */
|
danielebarchiesi@2
|
9
|
danielebarchiesi@2
|
10 /**
|
danielebarchiesi@2
|
11 * Default theme implementation for flexslider_list
|
danielebarchiesi@2
|
12 */
|
danielebarchiesi@2
|
13 function theme_flexslider_list(&$vars) {
|
danielebarchiesi@2
|
14 // Reference configuration variables
|
danielebarchiesi@2
|
15 $optionset = &$vars['settings']['optionset'];
|
danielebarchiesi@2
|
16 $items = &$vars['items'];
|
danielebarchiesi@2
|
17 $attributes = &$vars['settings']['attributes'];
|
danielebarchiesi@2
|
18 $type = &$vars['settings']['type'];
|
danielebarchiesi@2
|
19 $output = '';
|
danielebarchiesi@2
|
20
|
danielebarchiesi@2
|
21 // Build the list
|
danielebarchiesi@2
|
22 if (!empty($items)) {
|
danielebarchiesi@2
|
23 $output .= "<$type" . drupal_attributes($attributes) . '>';
|
danielebarchiesi@2
|
24 foreach ($items as $i => $item) {
|
danielebarchiesi@2
|
25 // If the slide hasn't been set, build the slide using the image
|
danielebarchiesi@2
|
26 // attributes given (assumes we're using a multi-image field)
|
danielebarchiesi@2
|
27 // @todo need to allow for different types of field and collection fields
|
danielebarchiesi@2
|
28 if (!isset($item['slide'])) {
|
danielebarchiesi@2
|
29 $image_options = array(
|
danielebarchiesi@2
|
30 'style_name' => $optionset->imagestyle_normal,
|
danielebarchiesi@2
|
31 'path' => $item['uri'],
|
danielebarchiesi@2
|
32 'height' => isset($item['height']) ? $item['height'] : '',
|
danielebarchiesi@2
|
33 'width' => isset($item['width']) ? $item['width'] : '',
|
danielebarchiesi@2
|
34 'alt' => $item['alt'],
|
danielebarchiesi@2
|
35 'title' => $item['title'],
|
danielebarchiesi@2
|
36 'attributes' => array(),
|
danielebarchiesi@2
|
37 );
|
danielebarchiesi@2
|
38 }
|
danielebarchiesi@2
|
39
|
danielebarchiesi@2
|
40 $caption = '';
|
danielebarchiesi@2
|
41 if (!empty($item['title'])) {
|
danielebarchiesi@2
|
42 $caption = $item['title'];
|
danielebarchiesi@2
|
43 }
|
danielebarchiesi@2
|
44 $output .= theme('flexslider_list_item', array(
|
danielebarchiesi@2
|
45 'item' => isset($item['slide']) ? $item['slide'] : theme_image_style($image_options),
|
danielebarchiesi@2
|
46 'item' => isset($item['slide']) ? $item['slide'] : ($optionset->imagestyle_normal ? theme_image_style($image_options) : theme_image($image_options)),
|
danielebarchiesi@2
|
47
|
danielebarchiesi@2
|
48 'thumb' => isset($item['thumb']) ? $item['thumb'] : image_style_url($optionset->imagestyle_thumbnail, $item['uri']),
|
danielebarchiesi@2
|
49 'optionset' => $optionset,
|
danielebarchiesi@2
|
50 'caption' => $caption,
|
danielebarchiesi@2
|
51 ));
|
danielebarchiesi@2
|
52 }
|
danielebarchiesi@2
|
53 $output .= "</$type>";
|
danielebarchiesi@2
|
54 }
|
danielebarchiesi@2
|
55
|
danielebarchiesi@2
|
56 return $output;
|
danielebarchiesi@2
|
57 }
|
danielebarchiesi@2
|
58
|
danielebarchiesi@2
|
59 /**
|
danielebarchiesi@2
|
60 * Default theme implementation for flexslider_list_item
|
danielebarchiesi@2
|
61 */
|
danielebarchiesi@2
|
62 function theme_flexslider_list_item(&$vars) {
|
danielebarchiesi@2
|
63 // Reference configuration variables
|
danielebarchiesi@2
|
64 $item = &$vars['item'];
|
danielebarchiesi@2
|
65 $attributes = &$vars['settings']['attributes'];
|
danielebarchiesi@2
|
66
|
danielebarchiesi@2
|
67 if ($vars['optionset']->options['controlNav'] === "thumbnails" &&
|
danielebarchiesi@2
|
68 isset($vars['thumb'])
|
danielebarchiesi@2
|
69 ) {
|
danielebarchiesi@2
|
70 $attributes['data-thumb'] = $vars['thumb'];
|
danielebarchiesi@2
|
71 }
|
danielebarchiesi@2
|
72
|
danielebarchiesi@2
|
73 $caption = '';
|
danielebarchiesi@2
|
74 if (!empty($vars['caption'])) {
|
danielebarchiesi@2
|
75 $caption = '<p class="flex-caption">' . $vars['caption'] . '</p>';
|
danielebarchiesi@2
|
76 }
|
danielebarchiesi@2
|
77
|
danielebarchiesi@2
|
78 $output = '';
|
danielebarchiesi@2
|
79 $output .= '<li' . drupal_attributes($attributes) . '>' . $item . $caption . "</li>\n";
|
danielebarchiesi@2
|
80
|
danielebarchiesi@2
|
81 return $output;
|
danielebarchiesi@2
|
82 }
|
danielebarchiesi@2
|
83
|
danielebarchiesi@2
|
84 /**
|
danielebarchiesi@2
|
85 * Template preprocess handler for 'flexslider' theme.
|
danielebarchiesi@2
|
86 */
|
danielebarchiesi@2
|
87 function template_process_flexslider(&$vars) {
|
danielebarchiesi@2
|
88
|
danielebarchiesi@2
|
89 // Reference configuration variables
|
danielebarchiesi@2
|
90 $optionset = &$vars['settings']['optionset'];
|
danielebarchiesi@2
|
91 $settings = &$vars['settings'];
|
danielebarchiesi@2
|
92 $items = &$vars['items'];
|
danielebarchiesi@2
|
93
|
danielebarchiesi@2
|
94 // Set the default container type
|
danielebarchiesi@2
|
95 if (empty($settings['type'])) {
|
danielebarchiesi@2
|
96 $settings['type'] = 'ul';
|
danielebarchiesi@2
|
97 }
|
danielebarchiesi@2
|
98
|
danielebarchiesi@2
|
99 // Load the selected optionset
|
danielebarchiesi@2
|
100 if (!empty($optionset)) {
|
danielebarchiesi@2
|
101 $optionset = flexslider_optionset_load($optionset);
|
danielebarchiesi@2
|
102 }
|
danielebarchiesi@2
|
103
|
danielebarchiesi@2
|
104 // Check if an optionset was loaded
|
danielebarchiesi@2
|
105 if (empty($optionset)) {
|
danielebarchiesi@2
|
106 // Fall back to 'default' option set
|
danielebarchiesi@2
|
107 $optionset = flexslider_optionset_load('default');
|
danielebarchiesi@2
|
108 watchdog('flexslider', 'Fallback to default optionset.', array(), WATCHDOG_WARNING);
|
danielebarchiesi@2
|
109 }
|
danielebarchiesi@2
|
110
|
danielebarchiesi@2
|
111 // Configure attributes for containing elements
|
danielebarchiesi@2
|
112 $attributes = array();
|
danielebarchiesi@2
|
113 // Merge with defined attributes
|
danielebarchiesi@2
|
114 if (isset($settings['attributes']) and is_array($settings['attributes'])) {
|
danielebarchiesi@2
|
115 $attributes += $settings['attributes'];
|
danielebarchiesi@2
|
116 }
|
danielebarchiesi@2
|
117
|
danielebarchiesi@2
|
118 // Set the ID for each flexslider instance if none is provided
|
danielebarchiesi@2
|
119 if (empty($attributes['id'])) {
|
danielebarchiesi@2
|
120 $flexslider_id = &drupal_static('flexslider_id', 0);
|
danielebarchiesi@2
|
121 $attributes['id'] = 'flexslider-' . ++$flexslider_id;
|
danielebarchiesi@2
|
122 }
|
danielebarchiesi@2
|
123
|
danielebarchiesi@2
|
124 // Add the namespace to any classes
|
danielebarchiesi@2
|
125 // @todo figure out what this is supposed to do
|
danielebarchiesi@2
|
126 if (!empty($attributes['class']) && !empty($optionset->options['namespace'])) {
|
danielebarchiesi@2
|
127 foreach ($attributes['class'] as $key => $value) {
|
danielebarchiesi@2
|
128 $attributes['class'][$key] = $optionset->options['namespace'] . $value;
|
danielebarchiesi@2
|
129 }
|
danielebarchiesi@2
|
130 }
|
danielebarchiesi@2
|
131
|
danielebarchiesi@2
|
132 // Add the flexslider class to be namespaced
|
danielebarchiesi@2
|
133 $attributes['class'][] = 'flexslider';
|
danielebarchiesi@2
|
134
|
danielebarchiesi@2
|
135 // Add the attributes to the settings array.
|
danielebarchiesi@2
|
136 $settings['attributes'] = $attributes;
|
danielebarchiesi@2
|
137
|
danielebarchiesi@2
|
138 // Finally, add the configuration to the page
|
danielebarchiesi@2
|
139 flexslider_add($vars['settings']['attributes']['id'], $vars['settings']['optionset']);
|
danielebarchiesi@2
|
140 }
|
danielebarchiesi@2
|
141
|
danielebarchiesi@2
|
142 /**
|
danielebarchiesi@2
|
143 * Preprocess function for flexslider_list_item
|
danielebarchiesi@2
|
144 */
|
danielebarchiesi@2
|
145 function template_preprocess_flexslider_list(&$vars) {
|
danielebarchiesi@2
|
146 // Reset the list of attributes
|
danielebarchiesi@2
|
147 $vars['settings']['attributes'] = array(
|
danielebarchiesi@2
|
148 // @todo find a way to detect the outter container class if possible
|
danielebarchiesi@2
|
149 'class' => array('slides'),
|
danielebarchiesi@2
|
150 );
|
danielebarchiesi@2
|
151
|
danielebarchiesi@2
|
152 }
|
danielebarchiesi@2
|
153
|
danielebarchiesi@2
|
154 /**
|
danielebarchiesi@2
|
155 * Preprocess function for flexslider_list_item
|
danielebarchiesi@2
|
156 */
|
danielebarchiesi@2
|
157 function template_preprocess_flexslider_list_item(&$vars) {
|
danielebarchiesi@2
|
158 // Reset the list of attributes
|
danielebarchiesi@2
|
159 $vars['settings']['attributes'] = array();
|
danielebarchiesi@2
|
160 //dpm($vars);
|
danielebarchiesi@2
|
161
|
danielebarchiesi@2
|
162 //$vars['item'] = implode('', $vars['item']);
|
danielebarchiesi@2
|
163 // @todo add attributes for thumbnails
|
danielebarchiesi@2
|
164 }
|