• Hello, I’ve been playing around with the native gallery, and I can’t seem to find solutions to these two problems.

    1) Is it possible to search for images in the main search? I gather it may be a difficult thing to do, and have tried plugins which supposedly search for attachments, but I didn’t have much luck.

    2) How could I split a gallery into more than one page, with out manually setting up different galleries?
    I stumbled upon this trac on https://core.trac.www.ads-software.com/ticket/6455 but it was closed due to lack of community interest..

    Any help please? Anyone? ..hello? ??

Viewing 16 replies (of 16 total)
  • Very quick way to paginate the gallery shortcode. Try at your own risk. (works fine for me wordpress 3.1. back up your files before editing.)

    Open your themes header.php and add this before the last </head>:

    <script type=”text/javascript”>;(function($){
    /*******************************************************************************************/
    // jquery.pajinate.js – version 0.2
    // A jQuery plugin for paginating through any number of DOM elements
    //
    // Copyright (c) 2010, Wes Nolte (https://wesnolte.com)
    // Liscensed under the MIT License (MIT-LICENSE.txt)
    // https://www.opensource.org/licenses/mit-license.php
    // Created: 2010-04-16 | Updated: 2010-04-26
    /*******************************************************************************************/

    $.fn.pajinate = function(options){
    // Set some state information
    var current_page = ‘current_page’;
    var items_per_page = ‘items_per_page’;

    var meta;

    // Setup default option values
    var defaults = {
    item_container_id : ‘.content’,
    items_per_page : 10,
    nav_panel_id : ‘.page_navigation’,
    num_page_links_to_display : 20,
    start_page : 0,
    nav_label_first : ‘First’,
    nav_label_prev : ‘Prev’,
    nav_label_next : ‘Next’,
    nav_label_last : ‘Last’
    };
    var options = $.extend(defaults,options);
    var $item_container;
    var $page_container;
    var $items;
    var $nav_panels;

    return this.each(function(){
    $page_container = $(this);
    $item_container = $(this).find(options.item_container_id);
    $items = $page_container.find(options.item_container_id).children();
    meta = $page_container;

    // Initialise meta data
    meta.data(current_page,0);
    meta.data(items_per_page, options.items_per_page);

    // Get the total number of items
    var total_items = $item_container.children().size();

    // Calculate the number of pages needed
    var number_of_pages = Math.ceil(total_items/options.items_per_page);

    // Construct the nav bar
    var more = ‘<span class=”ellipse more”>…</span>’;
    var less = ‘<span class=”ellipse less”>…</span>’;

    var navigation_html = ‘‘+ options.nav_label_first +’‘;
    navigation_html += ‘‘+ options.nav_label_prev +’‘+ less;
    var current_link = 0;
    while(number_of_pages > current_link){
    navigation_html += ‘‘+ (current_link + 1) +’‘;
    current_link++;
    }
    navigation_html += more + ‘‘+ options.nav_label_next +’‘;
    navigation_html += ‘‘+ options.nav_label_last +’‘;

    // And add it to the appropriate area of the DOM
    $nav_panels = $page_container.find(options.nav_panel_id);
    $nav_panels.html(navigation_html).each(function(){

    $(this).find(‘.page_link:first’).addClass(‘first’);
    $(this).find(‘.page_link:last’).addClass(‘last’);

    });

    // Hide the more/less indicators
    $nav_panels.children(‘.ellipse’).hide();

    // Set the active page link styling
    $nav_panels.find(‘.previous_link’).next().next().addClass(‘active_page’);

    /* Setup Page Display */
    // And hide all pages
    $items.hide();
    // Show the first page
    $items.slice(0, meta.data(items_per_page)).show();

    /* Setup Nav Menu Display */
    // Page number slices

    var total_page_no_links = $page_container.children(options.nav_panel_id+’:first’).children(‘.page_link’).size();
    options.num_page_links_to_display = Math.min(options.num_page_links_to_display,total_page_no_links);

    $nav_panels.children(‘.page_link’).hide(); // Hide all the page links

    // And only show the number we should be seeing
    $nav_panels.each(function(){
    $(this).children(‘.page_link’).slice(0, options.num_page_links_to_display).show();
    });

    /* Bind the actions to their respective links */

    // Event handler for ‘First’ link
    $page_container.find(‘.first_link’).click(function(e){
    e.preventDefault();

    movePageNumbersRight($(this),0);
    goto(0);
    });

    // Event handler for ‘Last’ link
    $page_container.find(‘.last_link’).click(function(e){
    e.preventDefault();
    var lastPage = total_page_no_links – 1;
    movePageNumbersLeft($(this),lastPage);
    goto(lastPage);
    });

    // Event handler for ‘Prev’ link
    $page_container.find(‘.previous_link’).click(function(e){
    e.preventDefault();
    showPrevPage($(this));
    });

    // Event handler for ‘Next’ link
    $page_container.find(‘.next_link’).click(function(e){
    e.preventDefault();
    showNextPage($(this));
    });

    // Event handler for each ‘Page’ link
    $page_container.find(‘.page_link’).click(function(e){
    e.preventDefault();
    goto($(this).attr(‘longdesc’));
    });

    // Goto the required page
    goto(parseInt(options.start_page));
    toggleMoreLess();
    });

    function showPrevPage(e){
    new_page = parseInt(meta.data(current_page)) – 1;

    // Check that we aren’t on a boundary link
    if($(e).siblings(‘.active_page’).prev(‘.page_link’).length==true){
    movePageNumbersRight(e,new_page);
    goto(new_page);
    }

    };

    function showNextPage(e){
    new_page = parseInt(meta.data(current_page)) + 1;

    // Check that we aren’t on a boundary link
    if($(e).siblings(‘.active_page’).next(‘.page_link’).length==true){
    movePageNumbersLeft(e,new_page);
    goto(new_page);
    }

    };

    function goto(page_num){

    var ipp = meta.data(items_per_page);

    var isLastPage = false;

    // Find the start of the next slice
    start_from = page_num * ipp;

    // Find the end of the next slice
    end_on = start_from + ipp;
    // Hide the current page
    $items.hide()
    .slice(start_from, end_on)
    .show();

    // Reassign the active class
    $page_container.find(options.nav_panel_id).children(‘.page_link[longdesc=’ + page_num +’]’).addClass(‘active_page’)
    .siblings(‘.active_page’)
    .removeClass(‘active_page’);

    // Set the current page meta data
    meta.data(current_page,page_num);

    // Hide the more and/or less indicators
    toggleMoreLess();
    };

    // Methods to shift the diplayed index of page numbers to the left or right
    function movePageNumbersLeft(e, new_p){
    var new_page = new_p;

    var $current_active_link = $(e).siblings(‘.active_page’);

    if($current_active_link.siblings(‘.page_link[longdesc=’ + new_page +’]’).css(‘display’) == ‘none’){

    $nav_panels.each(function(){
    $(this).children(‘.page_link’)
    .hide() // Hide all the page links
    .slice(parseInt(new_page – options.num_page_links_to_display + 1) , new_page + 1)
    .show();
    });
    }

    }

    function movePageNumbersRight(e, new_p){
    var new_page = new_p;

    var $current_active_link = $(e).siblings(‘.active_page’);

    if($current_active_link.siblings(‘.page_link[longdesc=’ + new_page +’]’).css(‘display’) == ‘none’){

    $nav_panels.each(function(){
    $(this).children(‘.page_link’)
    .hide() // Hide all the page links
    .slice( new_page , new_page + parseInt(options.num_page_links_to_display))
    .show();
    });
    }
    }

    // Show or remove the ellipses that indicate that more page numbers exist in the page index than are currently shown
    function toggleMoreLess(){

    if(!$nav_panels.children(‘.page_link:visible’).hasClass(‘last’)){
    $nav_panels.children(‘.more’).show();
    }else {
    $nav_panels.children(‘.more’).hide();
    }

    if(!$nav_panels.children(‘.page_link:visible’).hasClass(‘first’)){
    $nav_panels.children(‘.less’).show();
    }else {
    $nav_panels.children(‘.less’).hide();
    }
    }

    };

    })(jQuery);</script>
    <script type=”text/javascript”>
    $(document).ready(function(){
    $(‘#paging_container1’).pajinate();
    });

    $(document).ready(function(){
    $(‘#paging_container6’).pajinate({
    start_page : 0,
    items_per_page : 6
    });
    });

    </script>

    add this to your stylesheet:

    /* Gallery pagination */
    #gallery div{overflow: auto;}
    #gallery ul{list-style: none; padding:0; margin:0;}
    #gallery li{display:block;float:left;}
    #gallery li img{padding:0; margin:0; border:none; display:block;}
    #gallery li a{padding:10px; margin:0 10px 10px; display:block; border:none; background-color:#eff3f5;}
    #gallery li a:hover{ background-color:#d8dfe2;}
    #gallery .container{width: 530px; /* change to width of your pages content aread */margin:0;}
    #gallery .page_navigation , #gallery .alt_page_navigation{padding-bottom: 10px;}
    #gallery .page_navigation a, #gallery .alt_page_navigation a{padding:3px 5px;margin:2px;color:white;text-decoration:none;float: left;font-size: 12px;background-color:#1a87c1;}
    #gallery .active_page{background-color:white !important;color:black !important;}
    #gallery .content, #gallery .alt_content{color: black;}

    Open media.php and find:

    <!– see gallery_shortcode() in wp-includes/media.php –>”;
    $size_class = sanitize_html_class( $size );
    $gallery_div = “<div id=’$selector’ class=’gallery galleryid-{$id} gallery-columns-{$columns} gallery-size-{$size_class}’>”;
    $output = apply_filters( ‘gallery_style’, $gallery_style . “\n\t\t” . $gallery_div );

    $i = 0;
    foreach ( $attachments as $id => $attachment ) {
    $link = isset($attr[‘link’]) && ‘file’ == $attr[‘link’] ? wp_get_attachment_link($id, $size, false, false) : wp_get_attachment_link($id, $size, true, false);

    $output .= “<{$itemtag} class=’gallery-item’>”;
    $output .= “
    <{$icontag} class=’gallery-icon’>
    $link
    </{$icontag}>”;
    if ( $captiontag && trim($attachment->post_excerpt) ) {
    $output .= “
    <{$captiontag} class=’wp-caption-text gallery-caption’>
    ” . wptexturize($attachment->post_excerpt) . “
    </{$captiontag}>”;
    }
    $output .= “</{$itemtag}>”;
    if ( $columns > 0 && ++$i % $columns == 0 )
    $output .= ‘<br style=”clear: both” />’;
    }

    $output .= “
    <br style=’clear: both;’ />
    </div>\n”;

    return $output;
    }

    Replace the above code with:

    <!– see gallery_shortcode() in wp-includes/media.php –>”;
    $size_class = sanitize_html_class( $size );
    $gallery_div = “<div id=’gallery’><div id=’paging_container6′ class=’container’>
    <div class=’page_navigation’></div>
    <ul class=’content’>”;
    $output = apply_filters( ‘gallery_style’, $gallery_style . “\n\t\t” . $gallery_div );

    $i = 0;
    foreach ( $attachments as $id => $attachment ) {
    $link = isset($attr[‘link’]) && ‘file’ == $attr[‘link’] ? wp_get_attachment_link($id, $size, false, false) : wp_get_attachment_link($id, $size, true, false);

    $output .= “

    • “;
      $output .= “$link”;
      if ( $captiontag && trim($attachment->post_excerpt) ) {
      $output .= “
      <div class=’caption’>
      ” . wptexturize($attachment->post_excerpt) . “
      </div>”;
      }
      $output .= “
    • “;
      if ( $columns > 0 && ++$i % $columns == 0 )
      $output .= ‘
      ‘;
      }

      $output .= “

      </div></div>\n”;

      return $output;
      }

    Thats it. Works fine for me. Using wordpress 3.1.

    Don’t forget if you decided to try this, back up your files before editing.

Viewing 16 replies (of 16 total)
  • The topic ‘Gallery pagination and search’ is closed to new replies.