Esempio n. 1
0
/**
 * 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;
}
Esempio n. 2
0
/**
 * 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;
}