Выборка "других" ресурсов с вычетом текущих (Ajax)
Задача: требуется вывести что-то типо «Другое в блоге».
На странице используется pdoPage с Ajax навигацией. Каким образом можно получать список id ресурсов, которые выведены на текущей странице?
Каким образом можно просто решить задачу?
Мысль есть повесить обработку на
Но вопрос с первой загрузкой страницы остается актуальным(
Пробовал перед вызовом pdoPage использовать
На странице используется pdoPage с Ajax навигацией. Каким образом можно получать список id ресурсов, которые выведены на текущей странице?
Каким образом можно просто решить задачу?
Мысль есть повесить обработку на
$(document).on('pdopage_load', function(e, config, response) {
console.log(e, config, response);
});
После загрузки получать ID из атрибутов блоков, и делать ajax запрос на обновление данные в блоке «Другое»Но вопрос с первой загрузкой страницы остается актуальным(
Пробовал перед вызовом pdoPage использовать
{set $_articlesIds = []}
, а в чанках непосредственно вызывать {set $_articlesIds[] = $id}
, но {$_articlesIds|join:","}
все равно выдает пустоту({set $_articlesIds = []}
{set $articles = $_modx->runSnippet('!pdoPage', [
'parents' => $_modx->resource.id,
'showLog' => 0,
'element' => 'pdoResources',
'limit' => 4,
'where' => ['published' => 1],
'ajax' => 1,
'includeContent' => 1,
'includeTVs' => 'tags',
'ajaxMode' => 'default',
'sortby' => '{"createdon":"DESC"}',
'tpl' => 'blog_article.item',
])}
Комментарии: 4
Реализовать подгрузку ajax и обновление удалось. Остался вопрос как получить массив ID ресурсов которые отображаются на первой странице. Делать дополнительный запрос нет желания( Есть у кого какие мысли?
PS
Вот сниппет для подгрузки ресурсов.
PS
Вот сниппет для подгрузки ресурсов.
<?php
if (empty($_SERVER['HTTP_X_REQUESTED_WITH']) || $_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest') {return;}
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
$modx->resource->set('cacheable', 0);
$modx->resource->set('template', 0);
header('Content-Type: application/json');
$response = array('status' => false);
if (empty($_POST['action'])) {
$response['message'] = 'Action requeired';
} else {
switch ($_POST['action']) {
case 'getAriclesWithout':
$ids = $_POST['ids'];
$resources = array();
if(is_array($ids)){
foreach($ids as $value) {
$resources[] = '-'.(int)$value;
}
} else {
$response['message'] = 'IDs not given';
break;
}
$result = $modx->runSnippet('pdoResources', array(
'resources' => implode($resources,","),
'tpl' => 'sidebar_articles.item',
'limit' => 2,
'where' => array('published' => 1, 'isfolder' => 0),
'includeTVs' => 'image,image2',
'sortby' => 'RAND()'
));
if($result)
$response = array('status' => true, 'output' => $result, 'resourcesValue' => implode($resources,","));
else
$response = array('status' => true, 'output' => '');
break;
}
}
die(json_encode($response));
}
Вот клиентский код.$(document).on('pdopage_load', function(e, config, response) {
console.log(e, config, response);
var wrapper = $('<div/>');
var output = $(response.output);
wrapper.append(output);
var ids = [];
if(output.length > 0) {
wrapper.find('div.blog-feed__item').each(function() {
ids.push($(this).data('id'))
})
}
$.ajax({
url: window.location.pathname,
type: 'post',
data: {action: 'getAriclesWithout', ids: ids},
success: function(data) {
console.log(data);
if(data.status == true) {
var others = $('#others');
others.html('');
others.append(data.output);
}
}
});
});
Василий, прошу помощи. В документации по Fenom явно указано:
Если массив $arr еще не существует, он будет создан. Таким образом, это еще один способ определить массив. Однако такой способ применять не рекомендуется, так как если переменная $arr уже содержит некоторое значение (например, строку), то это значение останется на месте и [] может на самом деле означать доступ к символу в строке. Лучше инициализировать переменную путем явного присваивания значения.относительно данного кода:
{set $arr.key = value}
{set $arr[] = value} {* будет взят максимальный целочисленый ключ, увеличенный на 1 *}
Я пытаюсь использовать такой же метод с pdoPage, внутри чанков использую код для отладки:{set $_articlesIds[] = $id}
{$_articlesIds|length}
и вижу что мой массив каждый раз создается новый(
Что ты будешь делать, после того, как получишь список ID ресурсов?
я сделаю из них строку типо "-12,-10,-8" и подставлю в сниппет в параметр &resources, чтобы исключить их из выборки.
Их нужно исключить из выборки в блоке «Другое в блоге»… то есть имеем страницу блога, открывается первая страница с 5 записями, на этой же странице имеется блок «Другое в блоге», туда должны вывестись именно другие записи из блога.
Их нужно исключить из выборки в блоке «Другое в блоге»… то есть имеем страницу блога, открывается первая страница с 5 записями, на этой же странице имеется блок «Другое в блоге», туда должны вывестись именно другие записи из блога.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.