Закрепить материал на определенной позиции во views — траблы со сложной сортировкой

Аватар пользователя shevgeny shevgeny 17 июня 2015 в 13:38

Как всегда траблы.

1. Нужно сделать views с ротируемым содержимым (то есть с произвольной / случайной сортировкий), но при этом некоторые материалы закрепить. Но закрепить не сверху, а на определенных позициаях. Например, на второй, десятой и тридцать седьмой. А все остальные позиции должны заполняться остальным, не закрепленным контентом.

2. В продолжении темы сортировки, возник вопрос о том, как сделать случайную сортировку во views по принципу рекламных сетей. То есть, чем выше какой-то показатель материала, тем чаще материал показывается на первом месте. Но не закреплять его там статично.

С сортировкой вообще какие-то непонятки всегда. Вот решил разобраться. Кто-нибудь подобное решал?

Комментарии

Аватар пользователя shevgeny shevgeny 17 июня 2015 в 14:42

ХулиGUN wrote:
Ну как-то так:
1. Добавляем в фильтрацию, что материалы не относятся к этим самым "некоторым"
2. Переопределяем шаблон вьюхи, где считаем элементы массива и перед "вторым", "десятым" и "тридцать седьмым" подгружаете свои ноды
3. Профит

Либо https://api.drupal.org/api/views/views.api.php/7[/quote]

не то. Потому как сегодня это могут быть "второй", "десятый" и "тридцать седьмой", а завтра или даже к вечеру — другие. Не то. К тому же, предполагаю, что будут проблемы с навигатором (так как разное кол-во материалов в первой и второй порции могут быть). В общем, что-то куда-то, но не туда.

Аватар пользователя shevgeny shevgeny 17 июня 2015 в 16:05

ХулиGUN wrote:
"shevgeny" wrote:
не то. Потому как сегодня это могут быть "второй", "десятый" и "тридцать седьмой", а завтра или даже к вечеру — другие

Ну а логике какой поддаются эти позиции?
Например дополнительное поле в ноде, которое определяет позицию... тогда выбираем все ноды, у которых это поле > 0 и тогда уже динамически определять позицию по значению этого поля...
З.Ы. Вы для себя сначала определитесь какой логике должен подчиняться Ваш функционал, а потом уже задавайте вопросы. Как правило после первого уже самому становится всё понятно)))

Я как раз-таки логику понимаю. Возможно, не достаточно ясно выразился. Но вы меня поняли. Именно так: в ноде есть поле, оно и определяет положение в списке. Только если значение в этом поле отсутствует, позиция блуждающаяя. То есть, есть, например, 10 материалов. У девяти из них в поле "позиция" ничего не указано, а у одного — "позиция", к примеру = 7. Тогда во views сортировка случайная, но как бы ни располагались материалы, на седьмом месте всегда будет тот материал, у которого эта позиция назначена.

Аватар пользователя shevgeny shevgeny 17 июня 2015 в 16:07

ХулиGUN wrote:
"shevgeny" wrote:
не то. Потому как сегодня это могут быть "второй", "десятый" и "тридцать седьмой", а завтра или даже к вечеру — другие

Ну а логике какой поддаются эти позиции?
Например дополнительное поле в ноде, которое определяет позицию... тогда выбираем все ноды, у которых это поле > 0 и тогда уже динамически определять позицию по значению этого поля...
З.Ы. Вы для себя сначала определитесь какой логике должен подчиняться Ваш функционал, а потом уже задавайте вопросы. Как правило после первого уже самому становится всё понятно)))

и вопрос, собственно, в том, как это реализовать. Логика описана, не могу сообразить алгоритм конкретных действий. Потому сюда и обращаюсь.

Аватар пользователя shevgeny shevgeny 17 июня 2015 в 19:27

ХулиGUN wrote:
"shevgeny" wrote:

Ну так я и написал как...
В фильтре вьюхи исключаешь те ноды, у которых это поле проставлено, затем переопределяешь шаблон.
Там отдельным запросом подгружаешь только те ноды, у которых это поле проставлено.
В шаблоне вьюхи уже добавляешь условие, что если порядковый номер строки = значению из поля одного из твоих подгруженных нод, то помимо строки вставляешь и эту ноду... и так со всеми

Нет, подождите. Какое отношение шаблон имеет к сортировке? Шаблоны views, ведь, отвечают за вывод: представления, материалов, полей. Не понимаю, о чем вы говорите…
views-view.tpl.php — стиль вывода представления,
views-view-fields.tpl.php — стиль вывода полей,
views-view-field.tpl.php — стиль вывода поля.

Аватар пользователя shevgeny shevgeny 17 июня 2015 в 19:29

ХулиGUN wrote:
"shevgeny" wrote:

Ну так я и написал как...
В фильтре вьюхи исключаешь те ноды, у которых это поле проставлено, затем переопределяешь шаблон.
Там отдельным запросом подгружаешь только те ноды, у которых это поле проставлено.
В шаблоне вьюхи уже добавляешь условие, что если порядковый номер строки = значению из поля одного из твоих подгруженных нод, то помимо строки вставляешь и эту ноду... и так со всеми

В шаблоне то я не могу расставить материалы в нужном мне порядке. Или я ошибаюсь? Если ошибаюсь, буду очень признателен за чуть большую конкретику.

Аватар пользователя shevgeny shevgeny 19 июня 2015 в 18:53

ХулиGUN wrote:
"shevgeny" wrote:
В шаблоне то я не могу расставить материалы в нужном мне порядке. Или я ошибаюсь? Если ошибаюсь, буду очень признателен за чуть большую конкретику.

К примеру дефолтный шаблон неформатированного списка https://api.drupal.org/api/views/theme!views-view-unformatted.tpl.php/7
Ты разве не можешь посчитать номер элемента в массиве?

хм… не совсем понятно, но, наверное, действительно в этом направлении нужно думать. Пошел думать.