Как добавить цели отслеживания яндекса в Drupal 7
Для этого нам нужен всего лишь hook_form_alter() и наш ID формы: function my_module_form_alter (...
$items['news/next'] = array( 'page callback' => 'next_news', 'access arguments' => array('access content'), 'type' => MENU_CALLBACK, );
function next_news(){ $nid = (int)$_GET['id']; // Это nid, который мы будет передавать в функцию $nodes = news_load($nid); // Тут мы грузим ноды if(!empty($nodes)) { $node_o = node_load_multiple($nodes); /* Два списка, которые мы будем вставлять в разные места */ $news_list = node_view_multiple($node_o, 'titles'); $news = node_view_multiple($node_o, 'teaser'); /* Возвращаем всё в формате JSON */ return drupal_json_output(array('news_list' => render($news_list), 'news' => render($news), 'success' => true)); } else { /* Или возвращаем не всё в формате JSON */ return drupal_json_output(array('success' => false)); } }
function news_load($nid){ $query = db_select('node', 'n'); $query->fields('n', array('nid')) ->condition('n.type', 'news') ->condition('n.status', 1) ->condition('n.nid', $nid, '<') // И вот фильтр по nid. То что ниже нашего nid - отсекаем ->orderBy('n.created', 'DESC')->range(0, 5); // Ну мне нужно было по 5 штук вытягивать $result = $query->execute()->fetchCol(); return $result; }
(function ($) { $(document).ready(function(){ var busy = false; var url = $('#wideNewsBlock').data('url'); $(window).scroll(function() { if ($(window).scrollTop() <= $('#wideNewsBlock').offset().top) { // Это махинации с класами при прокрутке. $('a.news-menu-item').removeClass('active'); var active = $('.wideNews:first'); var active_a = $('a.news-menu-item[data-id='+active.data('id')+']') active_a.addClass('active'); } if($(window).scrollTop() + $(window).height() - $('#wideNewsBlock').offset().top + 40 > $('#wideNewsBlock').height() && !busy) { // как только до листали до нужной метки - грузим новое. Метку высчитать можно любую свою. busy = true; $('.loading-bar').html('Загрузка новости'); setTimeout(function() { getData(url); }, 700); } }); function getData(url) { var last_news_id = $('.wideNews').last().data('id'); $.ajax({ url: url, type: 'GET', contentType: 'application/x-www-form-urlencoded', dataType: 'JSON', data: 'id='+last_news_id, success: function(data) { if (data.success) { $('ul.newsBody a').removeClass('active'); $('ul.newsBody').append(data.news_list); // Добавляем список ссылок справа. $('#wideNewsBlock').append(data.news); // Это добаляем новые ноды $('.loading-bar').html('Следующая новость'); busy = false; } else { $('.loading-bar').html('Это все новости'); busy = true; } }, error: function() { $('.loading-bar').html('Невозможно загрузить новости'); busy = false; } }); } //Это просто функция скрола по клику ссылки справа. $('.newsBody').on('click', 'a.news-menu-item', function(e){ var self = $(this); var wideNews = $('.wideNews[data-id='+self.data('id')+']'); if (wideNews) { $('a.news-menu-item').removeClass('active'); self.addClass('active'); $.scrollTo(wideNews, 500); e.preventDefault(); } return false; }); }); })(jQuery);