/ Сайтостроение / Scripts & jquery / Вспомогательная информация

Вспомогательная информация

31.12.2016

448

При наведении на определенную информацию требуется уточняющая вспомогательная информация, какие-либо параметры, описание или какая-либо подсказка.. На сайте КИНОПОИСКА (в старой версии) есть такой функционал при наведении курсора на ссылку с названием фильма, внизу слева появляется блок с краткой информацией об этом фильме. Повторим данный функционал.

Я создал гибрид из двух решений: Появляющееся окно-подсказка и Запись во всплывающем окне.

Блок контейнер

Создаем на сайте (лучше в подвале) блок для последующей вгрузки в него информации.

<div id=»help-block»></div>

Либо создаем функцию его создания

add_action( 'get_footer', 'actionposthint', 5 );
function actionposthint() {
echo '<div id="help-block"></div>';
}

Задаём ему стили, изначально он невидимый

#help-block {
    position: fixed;
    width: 300px;
    height: 50px;
    background-color: #FFEB3B;
    left: 25px;
    bottom: 75px;
    z-index: 99;
    box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.3);
	display: none;
}

#help-block img {border-radius: 0; float:left; margin-right: 10px;}

#help-block p {padding: 5px; float: left; box-sizing: border-box; width: 240px;}

Скрипты

Создаем и подключаем необходимые скрипты:

function addsiteposthint() {
wp_enqueue_script( 'post-hint' );
}
add_action( 'get_footer', 'addsiteposthint' );

add_action( 'wp_enqueue_scripts', 'siteposthint_scripts', 1 );

function siteposthint_scripts() {

/* Register JavaScript Functions File */
wp_register_script( 'post-hint', plugins_url('/site-post-hint.js', __FILE__), array( 'jquery' ), '1.0', true );

/* Localize Scripts */
$php_array = array( 'admin_ajax' => admin_url( 'admin-ajax.php' ) );
wp_localize_script( 'post-hint', 'php_array', $php_array );

}

Создаем и настраиваем шаблон вывода информации

add_action( 'wp_ajax_theme_hint_post_example', 'theme_hint_post_example_init' );
add_action( 'wp_ajax_nopriv_theme_hint_post_example', 'theme_hint_post_example_init' );

function theme_hint_post_example_init() {

/* Made Query */
$args = array( 'p' => $_POST['id'],'post_type' => array( 'post', 'page', 'track', 'product' ) );
$theme_post_query = new WP_Query( $args );
while( $theme_post_query->have_posts() ) : $theme_post_query->the_post();
?>
<div id="hint-content">
<?php
if( has_post_thumbnail() )
{the_post_thumbnail('square-xs');}
else
{echo '<img src="'.get_template_directory_uri().'/images/img-default-square.jpg" />';}
?>
<p><strong><?php the_title(); ?></strong>
<?php echo get_post_meta($_POST['id'], 'post_views_count', true); ?>
</p>
</div>

</div>
<?php
endwhile;
exit;
}

}

echo get_post_meta($_POST[‘id’], ‘post_views_count’, true); — Таким образом выводятся мета поля.

Скрипт обмена

И создаем основной скрипт обмена — site-post-hint.js, который мы уже подключили. Данный скрипт по ID записи подгружает и выдает необходимую вспомогательную информацию. Принцип действия следующий: наводим курсор на блок .hentry он берет id блока (необходимо убедится что id прописывается чистый id=»<?php the_ID(); ?>», а не post-456) и выдает информацию по записи с данным id. Когда мы убираем курсор блок с информацией исчезает и отчищается.

(function($) {

/** jQuery Document Ready */
$(document).ready(function(){

$( '.hentry' ).on( 'mouseenter', function( e ) {

// Вызвать подсказку
$( '#help-block' ).show();


/** Prevent Default Behaviour */
e.preventDefault();

/** Get Post ID */
var post_id = $(this).attr( 'id' );

/** Ajax Call */
$.ajax({

cache: false,
timeout: 8000,
url: php_array.admin_ajax,
type: "POST",
data: ({ action:'theme_hint_post_example', id:post_id }),

success: function( data, textStatus, jqXHR ){

var $ajax_response = $( data );
$( '#help-block' ).html( $ajax_response );

},

error: function( jqXHR, textStatus, errorThrown ){
console.log( 'The following error occured: ' + textStatus, errorThrown );
},

complete: function( jqXHR, textStatus ){
}

});

});

$( '.hentry' ).on( 'mouseleave', function( e ) {
$( '#help-block' ).html( "" );	
$( '#help-block' ).hide();
});

});

})(jQuery);

Интересным моментом данного скрипта является метод .on( ‘mouseenter’) и .on( ‘mouseleave’). Это события наведения курсора на объект и отведения курсора с объекта.

Данный функционал можно настроить на любые данные. Для отлавливания информации необходим id необходимого материала.

Получаем ID по ссылке

Объектом воздействия данного функционала могут быть внутренние ссылки. Но в данном случае у ссылок будет отсутствовать атрибут id. Получим его с помощью функции url_to_postid.

Немного изменяем скрипт, а конкретнее объект воздействия:

$( '#post-content a:not([href^="https://"], [href^="http://"])' ).on( 'mouseenter', function( e ) {

#post-content a — воздействуем на ссылки внутри контейнера #post-content — это пространство статьи
:not([href^=»https://»], [href^=»http://»]) — отсекаем ссылки с упоминанием в адресе http или https, т.к. в идеале внутренние ссылки у нас вида href=»../url-ssyilki-stranits-chpu/».

И также немного корректируем функцию формирования вывода информации

$url = $_POST['id']; 
$post_ID = url_to_postid($url);

$args = array( 'p' => $post_ID,'post_type' => array( 'post', 'page', 'track', 'product' ) );

Мы добавили 2 строки

$url = $_POST[‘id’]; — получаем ссылку переданную скриптом
$post_ID = url_to_postid($url); — обрабатываем и получаем id записи

‘p’ => $post_ID — выводим запись по id

Изменить алгоритм вставки внутренних ссылок на относительные. По-умолчанию wp вставляет абсолютную ссылку.

Поделится информацией с друзьями

  • Комментарии
  • Вложения

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

Пока нет комментариев. Будь первым!

Вспомогательная информация
Анимация элементов сайта
Рекомендации для васАнимация элементов сайтаOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.