echo slidedeck_get_dynamic_option($slidedeck, 'title_length_with_image'); ?> " name="dynamic_options[title_length_with_image]" id="slidedeck_title_length_with_image" /></label><br /> <label class="disabled" for="slidedeck_title_length_without_image">Title length in words (without image) <input disabled="disabled" type="text" size="4" value="<?php echo slidedeck_get_dynamic_option($slidedeck, 'title_length_without_image'); ?> " name="dynamic_options[title_length_without_image]" id="slidedeck_title_length_without_image" /></label> </fieldset> <fieldset> <legend class="screen-reader-text">Excerpt Length</legend> <label class="disabled" for="slidedeck_excerpt_length_with_image">Excerpt length in words (with image) <input disabled="disabled" type="text" size="4" value="<?php echo slidedeck_get_dynamic_option($slidedeck, 'excerpt_length_with_image'); ?> " name="dynamic_options[excerpt_length_with_image]" id="slidedeck_excerpt_length_with_image" /></label><br /> <label class="disabled" for="slidedeck_excerpt_length_without_image">Excerpt length in words (without image) <input disabled="disabled" type="text" size="4" value="<?php echo slidedeck_get_dynamic_option($slidedeck, 'excerpt_length_without_image'); ?> " name="dynamic_options[excerpt_length_without_image]" id="slidedeck_excerpt_length_without_image" /></label> </fieldset> </td> </tr> <tr valign="top"> <th scope="row">Navigation Type</th> <td> <fieldset> <legend class="screen-reader-text">Navigation Type</legend> <input type="hidden" name="dynamic_options[navigation_type]" value="<?php echo $slidedeck['dynamic_options']['navigation_type']; ?> " id="slidedeck_navigation_type" />
/** * Create the markup for a standard SlideDeck * * @param array $slidedeck The SlideDeck * @param object $slidedeck_uid A Unique identifier for the outputted SlideDeck * @param array $slides The array of slides to be rendered * * @uses do_shortcode() * * @return SlideDeck HTML markup */ function slidedeck_output($slidedeck, $slidedeck_uid, $slides, $styles_str, $vertical_smart_skin = false) { $inc = 1; $template_str = '<div class="slidedeck_frame skin-' . (isset($slidedeck['skin']) && !empty($slidedeck['skin']) ? $slidedeck['skin'] : 'default') . '"><dl id="' . $slidedeck_uid . '" class="slidedeck slidedeck_' . $slidedeck['id'] . '" style="' . $styles_str . '">'; if (!$vertical_smart_skin) { foreach ((array) $slides as $slide) { $template_str .= '<dt>'; $slide_content_decoded = html_entity_decode(stripslashes($slide['title']), ENT_QUOTES, 'UTF-8'); if (function_exists('esc_html')) { $template_str .= esc_html($slide_content_decoded); } else { $template_str .= wp_specialchars($slide_content_decoded); } $template_str .= '</dt>'; // Slide Title Bar // Vertical Slides or Horizontal Slides // If the current slide being iterated over is a vertical one ( using array comparison if ids ) $is_vertical = false; if (isset($slidedeck['slidedeck_options']['vertical_slides']) && !empty($slidedeck['slidedeck_options']['vertical_slides'])) { if (!empty($slide['id']) && in_array($slide['id'], explode(',', $slidedeck['slidedeck_options']['vertical_slides']))) { $is_vertical = true; } } if (isset($slide['background']) && !empty($slide['background'])) { $template_str .= '<dd style="background:url(' . $slide['background'] . ') center center !important;">'; } else { $template_str .= '<dd>'; } if ($is_vertical) { $vertical_data = unserialize($slide['content']); if (array_key_exists('contents', $vertical_data)) { // Support for new storage structure with titles for vertical slides $vertical_content = $vertical_data['contents']; $vertical_titles = $vertical_data['titles']; } else { // Else, legacy support $vertical_content = $vertical_data; } $use_new_dl_structure = (bool) (slidedeck_get_option($slidedeck, 'useNewVertical') == 'true'); $vertical_html_tags = array('container' => 'ul', 'item' => 'li'); if ($use_new_dl_structure) { $vertical_html_tags['container'] = 'dl'; $vertical_html_tags['item'] = 'dd'; $vertical_html_tags['title'] = 'dt'; } $template_str .= "<{$vertical_html_tags['container']} class='slidesVertical'>"; for ($vc = 0; $vc < count($vertical_content); $vc++) { $vertical_slide = $vertical_content[$vc]; // Only add titles if this is the new DL HTML structure if (array_key_exists('title', $vertical_html_tags)) { // Only add titles if a title exists for this SlideDeck if (isset($vertical_titles) && !empty($vertical_titles[$vc])) { $template_str .= "<{$vertical_html_tags['title']}>" . $vertical_titles[$vc] . "</{$vertical_html_tags['title']}>"; } } $template_str .= "<{$vertical_html_tags['item']}>" . slidedeck_process_slide_content($vertical_slide) . "</{$vertical_html_tags['item']}>"; } $template_str .= "</{$vertical_html_tags['container']}>"; } else { $template_str .= slidedeck_process_slide_content($slide['content']); // Slide Content } $template_str .= '</dd>'; $inc++; } } else { $template_str .= '<dt>Vertical Smart Slide 1</dt>'; $template_str .= '<dd><dl class="slidesVertical">'; // Use title_length_with_image to truncate vertical slide titles because of the limited space in this type of navigation $vertical_title_length = intval(slidedeck_get_dynamic_option($slidedeck, 'title_length_vertical')) > -1 ? intval(slidedeck_get_dynamic_option($slidedeck, 'title_length_vertical')) : SLIDEDECK_VERTICAL_TITLE_LENGTH; foreach ((array) $slides as $slide) { $template_str .= '<dt>'; $slide_content_decoded = html_entity_decode(stripslashes(slidedeck_prepare_title($slide['title'], $vertical_title_length)), ENT_QUOTES, 'UTF-8'); if (function_exists('esc_html')) { $template_str .= esc_html($slide_content_decoded); } else { $template_str .= wp_specialchars($slide_content_decoded); } $template_str .= '</dt>'; // Slide Title Bar if (isset($slide['background']) && !empty($slide['background'])) { $template_str .= '<dd style="background:url(' . $slide['background'] . ') center center !important;">'; } else { $template_str .= '<dd>'; } $template_str .= slidedeck_process_slide_content($slide['content']); // Slide Content $template_str .= '</dd>'; $inc++; } $template_str .= '</dl></dd>'; } $template_str .= '</dl>'; return $template_str; }
</fieldset> <fieldset> <legend class="screen-reader-text">Excerpt Length</legend> <label for="slidedeck_excerpt_length_with_image">Excerpt length in words (with image) <input type="text" size="4" value="<?php echo slidedeck_get_dynamic_option($slidedeck, 'excerpt_length_with_image'); ?> " name="dynamic_options[excerpt_length_with_image]" id="slidedeck_excerpt_length_with_image" /></label><br /> <label for="slidedeck_excerpt_length_without_image">Excerpt length in words (without image) <input type="text" size="4" value="<?php echo slidedeck_get_dynamic_option($slidedeck, 'excerpt_length_without_image'); ?> " name="dynamic_options[excerpt_length_without_image]" id="slidedeck_excerpt_length_without_image" /></label> </fieldset> <fieldset> <legend class="screen-reader-text">Vertical Title Length</legend> <label for="slidedeck_title_length_vertical">Vertical Title Length <input type="text" size="4" value="<?php echo slidedeck_get_dynamic_option($slidedeck, 'title_length_vertical'); ?> " name="dynamic_options[title_length_vertical]" id="slidedeck_title_length_vertical" /></label> </fieldset> </td> </tr> <tr valign="top"> <th scope="row">Navigation Type</th> <td> <fieldset> <legend class="screen-reader-text">Navigation Type</legend> <input type="hidden" name="dynamic_options[navigation_type]" value="<?php echo $slidedeck['dynamic_options']['navigation_type']; ?> " id="slidedeck_navigation_type" />
/** * SlideDeck markup creator * * @param object $slidedeck_id The ID of the SlideDeck to render * @param array $styles [optional] The styles to apply to the main SlideDeck tag ( usually just width and height ) * @param boolean $include_skin_files Include the files for this SlideDeck's skin? * * @uses slidedeck_load() * @uses slidedeck_load_slides() * @uses slidedeck_dir() * @uses slidedeck_dynamic_template_content() * @uses slidedeck_get_skin() * @uses WP_Query * @uses get_the_title() * @uses get_the_time() * @uses human_time_diff() * @uses wp_trim_excerpt() * @uses get_permalink() * @uses get_post_custom_values() * @uses get_post_meta() * @uses slidedeck_get_dynamic_option() * @uses slidedeck_parse_html_for_images() * @uses slidedeck_get_option() * @uses slidedeck_prepare_excerpt() * @uses slidedeck_output() * * @return Rendered SlideDeck markup and JavaScript tag to initialize SlideDeck render */ function slidedeck_process_template($slidedeck_id, $styles = array('width' => '100%', 'height' => '300px'), $include_skin_files = true) { global $slidedeck_skin_included, $slidedeck_footer_scripts; // Lookup the SlideDeck requested $slidedeck = slidedeck_load($slidedeck_id); if (isset($slidedeck) && !empty($slidedeck)) { $is_dynamic = (bool) $slidedeck['dynamic']; $image_skin = false; $skin = slidedeck_get_skin(isset($slidedeck['skin']) && !empty($slidedeck['skin']) ? $slidedeck['skin'] : 'default'); if ($skin['meta']['Skin Type'] == "fixed") { $styles['height'] = $skin['meta']['Skin Height'] . "px"; } if ($skin['meta']['Skin Slide Type'] == "image") { $image_skin = true; } $skin_image_width = isset($skin['meta']['Skin Image Width']) ? $skin['meta']['Skin Image Width'] : '270px'; $skin_image_height = isset($skin['meta']['Skin Image Height']) ? $skin['meta']['Skin Image Height'] : '250px'; // Setup styles array as inline style string $styles_str = ""; $sep = ""; foreach ((array) $styles as $style => $def) { $styles_str .= $sep . $style . ":" . $def; $sep = ";"; } srand(); // Seed the random number generator // Create unique SlideDeck ID for this SlideDeck $slidedeck_uid = "SlideDeck_" . rand(100, 999) . "_" . $slidedeck['id']; if ($is_dynamic === true) { $args = array('post_type' => 'post', 'post_status' => 'publish', 'posts_per_page' => $slidedeck['dynamic_options']['total']); if ($slidedeck['dynamic_options']['filter_by_category'] == '1') { $args['cat'] = implode(',', $slidedeck['dynamic_options']['filter_categories']); } switch ($slidedeck['dynamic_options']['type']) { case "recent": $args['orderby'] = 'date'; $args['order'] = 'DESC'; break; case "featured": $args['meta_key'] = '_slidedeck_post_featured'; $args['meta_value'] = '1'; $args['orderby'] = 'date'; $args['order'] = 'DESC'; break; case "popular": $args['orderby'] = '_slidedeck_popularity'; $args['order'] = 'DESC'; break; } $excerpt_length_with_image = SLIDEDECK_EXCERPT_LENGTH_WITH_IMAGE; $excerpt_length_without_image = SLIDEDECK_EXCERPT_LENGTH_WITHOUT_IMAGE; $title_length_with_image = SLIDEDECK_TITLE_LENGTH_WITH_IMAGE; $title_length_without_image = SLIDEDECK_TITLE_LENGTH_WITHOUT_IMAGE; // Post Based Dynamic SlideDeck. $dynamic_posts = new WP_Query($args); $slides = array(); foreach ($dynamic_posts->posts as $post) { $post_id = $post->ID; $slide = array(); $slide_nodes = array('type' => $slidedeck['dynamic_options']['type'], 'title' => html_entity_decode(get_the_title($post_id), ENT_QUOTES, 'UTF-8'), 'timestamp' => get_the_time('U', $post_id), 'timesince' => "Posted " . human_time_diff(get_the_time('U', $post_id), current_time('timestamp')) . " ago", 'permalink' => get_permalink($post_id)); $post_content = $post->post_content; $post_excerpt = false; if (!empty($post->post_excerpt)) { $post_excerpt = $post->post_excerpt; } switch (slidedeck_get_dynamic_option($slidedeck, 'image_source')) { case 'none': $slide_nodes['image'] = null; break; default: case 'content': $slide_nodes['image'] = slidedeck_parse_html_for_images($post_content, slidedeck_get_dynamic_option($slidedeck, 'validate_images')); break; } // Unfortunately we cannot use WP's built in excerpt shortener since // we cannot easily access the existing set excerpt length and shouldn't // modify the user's perferences here $title_chracter_limit = !empty($slide_nodes['image']) ? $title_length_with_image : $title_length_without_image; $the_excerpt_limit = isset($slide_nodes['image']) ? $excerpt_length_with_image : $excerpt_length_without_image; if ($post_excerpt === false) { $the_excerpt = strip_shortcodes($post_content); } else { $the_excerpt = $post_excerpt; } $slide_nodes['excerpt'] = slidedeck_prepare_excerpt($the_excerpt, $the_excerpt_limit); $slide_nodes['title'] = slidedeck_prepare_title($slide_nodes['title'], $title_chracter_limit); // Process content nodes through template to create slide content ob_start(); foreach ($slide_nodes as $node => $val) { ${$node} = $val; } if (empty($slide_nodes['image']) && $image_skin) { // Keep looking if we don't find a post with an image continue; } else { // Until a full template selection system is built, just get the first one in the folder $template = reset($skin['templates']); include $template['file']; $slide['content'] = ob_get_contents(); } foreach ($slide_nodes as $node => $val) { ${$node} = null; } ob_end_clean(); // Process slide title with post title or specified slide title $spine_title = get_post_meta($post_id, '_slidedeck_slide_title', true); $slide['title'] = !empty($spine_title) ? $spine_title : get_the_title($post_id); $slide['timestamp'] = $slide_nodes['timestamp']; $slides[] = $slide; } } else { // Get the Slides for the SlideDeck requested $slides = slidedeck_load_slides($slidedeck_id); } // Generate markup for the template string. $template_str = slidedeck_output($slidedeck, $slidedeck_uid, $slides, $styles_str); // Build the JavaScript statement. $slidedeck_options_json = "{ "; $sep = ""; foreach ((array) $slidedeck['slidedeck_options'] as $key => $val) { $slidedeck_options_json .= $sep . $key . ": "; if ($val == 'true' || $val == 'false') { $slidedeck_options_json .= $val; } elseif (is_numeric($val)) { $slidedeck_options_json .= $val; } else { $slidedeck_options_json .= (string) "'{$val}'"; } $sep = ", "; } $slidedeck_options_json .= " }"; if ($is_dynamic === true) { $template_str .= slidedeck_dynamic_template_content($slidedeck, $slides); } $template_str .= '</div>'; $slidedeck_footer_scripts .= '<script type="text/javascript">jQuery( \'#' . $slidedeck_uid . '\' ).slidedeck( ' . $slidedeck_options_json . ' );</script>'; if (!isset($slidedeck_skin_included[$skin['slug']]) && $include_skin_files === true) { $slidedeck_skin_included[$skin['slug']] = true; $skin_css_tags = slidedeck_get_skin_css($skin); $template_str = $skin_css_tags . $template_str; if (isset($skin['script_url']) && !empty($skin['script_url'])) { $slidedeck_footer_scripts .= '<script type="text/javascript" src="' . $skin['script_url'] . '"></script>'; } } } else { $template_str = ""; } return $template_str; }