NextGEN Gallery поиск по картинкам и меткам.

В течении 2 дней сломал себе весь могз разыскивая решение как это сделать и вот к чему пришел
<strong>Вывод меток:</strong>
пример кода лежит тут
http://wordpress.org/support/topic/plugin-nextgen-gallery-tagcloud-behaviour-in-sidebar-thumbs-in-main-content?replies=6
<strong>Вот этот код вставляем в сайт бар</strong>
<code>
<div>
<h2>Photo Tags</h2>
<?php $args = array(
‘smallest’  => 9,
‘largest’   => 9,
‘unit’      => ‘pt’,
‘number’    => 45,
‘format’    => ‘flat’,
‘separator’ => ‘<br />’,
‘orderby’   => ‘name’,
‘order’     => ‘ASC’,
‘exclude’   => »,
‘include’   => »,
‘link’      => ‘view’,
‘taxonomy’  => ‘ngg_tag’,
‘echo’      => true ); ?>
<?php echo ng_tag_cloud($args); ?>
</div>
</code>
<strong>А этот в functions.php</strong>
<code>
function ng_tag_cloud( $args = » ) {
$defaults = array(
‘smallest’ => 8, ‘largest’ => 22, ‘unit’ => ‘pt’, ‘number’ => 45,
‘format’ => ‘flat’, ‘separator’ => «\n», ‘orderby’ => ‘name’, ‘order’ => ‘ASC’,
‘exclude’ => », ‘include’ => », ‘link’ => ‘view’, ‘taxonomy’ => ‘post_tag’, ‘echo’ => true
);
$args = wp_parse_args( $args, $defaults );

$tags = get_terms( $args[‘taxonomy’], array_merge( $args, array( ‘orderby’ => ‘count’, ‘order’ => ‘DESC’ ) ) ); // Always query top tags

if ( empty( $tags ) )
return;

foreach ( $tags as $key => $tag ) {
if ( ‘edit’ == $args[‘link’] )
$link = get_edit_tag_link( $tag->term_id, $args[‘taxonomy’] );
else
$link = get_term_link( intval($tag->term_id), $args[‘taxonomy’] );
if ( is_wp_error( $link ) )
return false;

$tags[ $key ]->link = $link;
$tags[ $key ]->id = $tag->term_id;
}

$return = ng_generate_tag_cloud( $tags, $args ); // Here’s where those top tags get sorted according to $args

$return = apply_filters( ‘wp_tag_cloud’, $return, $args );

if ( ‘array’ == $args[‘format’] || empty($args[‘echo’]) )
return $return;

echo $return;
}

function ng_generate_tag_cloud( $tags, $args = » ) {
global $wp_rewrite;
$defaults = array(
‘smallest’ => 8, ‘largest’ => 22, ‘unit’ => ‘pt’, ‘number’ => 0,
‘format’ => ‘flat’, ‘separator’ => «\n», ‘orderby’ => ‘name’, ‘order’ => ‘ASC’,
‘topic_count_text_callback’ => ‘default_topic_count_text’,
‘topic_count_scale_callback’ => ‘default_topic_count_scale’, ‘filter’ => 1,
);

if ( !isset( $args[‘topic_count_text_callback’] ) && isset( $args[‘single_text’] ) && isset( $args[‘multiple_text’] ) ) {
$body = ‘return sprintf (
_n(‘ . var_export($args[‘single_text’], true) . ‘, ‘ . var_export($args[‘multiple_text’], true) . ‘, $count),
number_format_i18n( $count ));';
$args[‘topic_count_text_callback’] = create_function(‘$count’, $body);
}

$args = wp_parse_args( $args, $defaults );
extract( $args );

if ( empty( $tags ) )
return;

$tags_sorted = apply_filters( ‘tag_cloud_sort’, $tags, $args );
if ( $tags_sorted != $tags  ) { // the tags have been sorted by a plugin
$tags = $tags_sorted;
unset($tags_sorted);
} else {
if ( ‘RAND’ == $order ) {
shuffle($tags);
} else {
// SQL cannot save you; this is a second (potentially different) sort on a subset of data.
if ( ‘name’ == $orderby )
uasort( $tags, create_function(‘$a, $b’, ‘return strnatcasecmp($a->name, $b->name);’) );
else
uasort( $tags, create_function(‘$a, $b’, ‘return ($a->count > $b->count);’) );

if ( ‘DESC’ == $order )
$tags = array_reverse( $tags, true );
}
}

if ( $number > 0 )
$tags = array_slice($tags, 0, $number);

$counts = array();
$real_counts = array(); // For the alt tag
foreach ( (array) $tags as $key => $tag ) {
$real_counts[ $key ] = $tag->count;
$counts[ $key ] = $topic_count_scale_callback($tag->count);
}

$min_count = min( $counts );
$spread = max( $counts ) — $min_count;
if ( $spread <= 0 )
$spread = 1;
$font_spread = $largest — $smallest;
if ( $font_spread < 0 )
$font_spread = 1;
$font_step = $font_spread / $spread;

$a = array();

foreach ( $tags as $key => $tag ) {
$count = $counts[ $key ];
$real_count = $real_counts[ $key ];
$tag_link = ‘http://сюда пишем Ваш домен';
$tag_id = isset($tags[ $key ]->id) ? $tags[ $key ]->id : $key;
$tag_name = $tags[ $key ]->name;
$a[] = «<a href=’$tag_link$tag_name?gallerytag=$tag_name’ class=’tag-link-$tag_id’ title='» . esc_attr( $topic_count_text_callback( $real_count ) ) . «‘ style=’font-size: » .
( $smallest + ( ( $count — $min_count ) * $font_step ) )
. «$unit;’>$tag_name</a>»;
}

switch ( $format ) :
case ‘array’ :
$return =& $a;
break;
case ‘list’ :
$return = «<ul class=’wp-tag-cloud’>\n\t<li>»;
$return .= join( «</li>\n\t<li>», $a );
$return .= «</li>\n</ul>\n»;
break;
default :
$return = join( $separator, $a );
break;
endswitch;

if ( $filter )
return apply_filters( ‘wp_generate_tag_cloud’, $return, $tags, $args );
else
return $return;
}
</code>
И вуаля ))) нихрена не работает )))
Продолжаем наш не длительный и мучительный процесс до решения, наберитесь терпения сейчас все объясню почему.

Поиск по изображениям (или назовем его по тегам) :
Пример лежит тут : http://wordpress.org/support/topic/plugin-nextgen-gallery-adding-a-search-bar
<strong>Этот код ставим в search.php </strong>
<code>
<?php
// Start of NextGen Gallery search
if(is_search()) {
$search = $wp_query->get(‘s’);
$keywords = preg_replace(‘/\+/’,’ ‘,$search);
if (function_exists (‘ngg_get_search_pictures’)) {  // function from functions.php
$nggpictures = ngg_get_search_pictures($keywords, »); // put the number of pictures by row you want, if you don’t want «4»

echo «<h2>Pictures</h2>»;
if ($nggpictures) {
echo $nggpictures;
echo ‘<div>&nbsp;</div>';
}
else {
echo ‘<p>No pictures were found.</p>';
}
}
}
// End of NextGen Gallery search
?>
</code>

<strong>А этот снова в в functions.php</strong>

<code>
<?php
## Function to do search on gallery pics from NextGen Gallery plugin
##
## 2 vars :     (1) $keywords (usually coming from the standard search query from wordpress)
##        (2) $numberPicCol (number of pic by row, if null it takes 4 )
function ngg_get_search_pictures ($keywords, $numberPicRow = NULL) {
global $wpdb;
//    $count=1;
//    if (!$numberPicRow) { $numberPicRow = «4»; }

$nngquery = »
SELECT pid,description,alttext
FROM wp_ngg_pictures
WHERE MATCH (description, filename, alttext) AGAINST (‘$keywords’ IN BOOLEAN MODE)
AND exclude = ‘0’
## start of tags code
UNION
SELECT pid,wp_ngg_pictures.description,alttext
FROM wp_ngg_pictures, wp_terms, wp_term_taxonomy, wp_term_relationships
WHERE wp_terms.term_id = wp_term_taxonomy.term_id and
wp_term_taxonomy.taxonomy = ‘ngg_tag’ and
wp_term_taxonomy.term_taxonomy_id = wp_term_relationships.term_taxonomy_id and
wp_term_relationships.object_id = wp_ngg_pictures.pid and
MATCH (wp_terms.name) AGAINST (‘$keywords*’ IN BOOLEAN MODE)
AND exclude = ‘0’
## end of tags code
«;
$pictures = $wpdb->get_results($nngquery, ARRAY_A);

if ($pictures) foreach($pictures as $pic) {

$out .= ‘<div>';
$out .= ‘<a href=»‘.nggGallery::get_image_url($pic[pid]).'» title=»‘.stripslashes($pic[description]).'» rel=»singlepic’.$pic[pid].'»>';
$out .=  ‘<img src=»‘.nggGallery::get_thumbnail_url($pic[pid]).'» alt=»‘.stripslashes($pic[alttext]).'» title=»‘.stripslashes($pic[alttext]).'» />';
$out .=  «</a></div>\n»;
// pictures use float left, so don’t need the code that outputs a <br />
//                if ($count == 0) {
//                $out .= «<br />»;
//                }
//                ++$count;
//                $count%=$numberPicRow;
}
return $out;
};
?>
</code>

Вуаля…а этот код работает

Что делаем дальше:
берем кусочек из первой функции которую мы вставили
<code>
foreach ( $tags as $key => $tag ) {
$count = $counts[ $key ];
$real_count = $real_counts[ $key ];
$tag_link = ‘http://сюда пишем Ваш домен';
$tag_id = isset($tags[ $key ]->id) ? $tags[ $key ]->id : $key;
$tag_name = $tags[ $key ]->name;
$a[] = «<a href=’$tag_link$tag_name?gallerytag=$tag_name’ class=’tag-link-$tag_id’ title='» . esc_attr( $topic_count_text_callback( $real_count ) ) . «‘ style=’font-size: » .
( $smallest + ( ( $count — $min_count ) * $font_step ) )
. «$unit;’>$tag_name</a>»;
</code>
в нем прописываеи Ваш домен и меняем строку
<code>
$a[] = «<a href=’$tag_link$tag_name?gallerytag=$tag_name’ class=’tag-link-$tag_id’ title='» . esc_attr( $topic_count_text_callback( $real_count ) ) . «‘ style=’font-size: » .
( $smallest + ( ( $count — $min_count ) * $font_step ) )
. «$unit;’>$tag_name</a>»;
</code>
на вот такую

<code>
$a[] = «<a href=’$tag_link?s=$tag_name’ class=’tag-link-$tag_id’ title='» . esc_attr( $topic_count_text_callback( $real_count ) ) . «‘ style=’font-size: » .
( $smallest + ( ( $count — $min_count ) * $font_step ) )
. «$unit;’>$tag_name</a>»;
</code>

В принципе и все… поиск по картинкам работает, так же как и по тегам

но нужно будет доработать этот код

2 Комментариев для “NextGEN Gallery поиск по картинкам и меткам.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>