Views: фильтрация и темизация в зависимости от двух Taxonomy Fields, работающих с одним словарем.

Главные вкладки

Аватар пользователя sergera-sakh sergera-sakh 23 марта 2012 в 8:51

Здравствуйте, опишу в кратце с чем работаем: есть сайт, который был сдан на 80% готовности, после чего разработчик отказался продолжать работу и сдал в текущем виде, почти все доработки могу сделать своими силами, за исключением ниже описанной проблемы. Имеем словарь "Каталог"(фирм), в нем разделы и подразделы, для соответствующего деления компаний по видам деятельности, одна компания может принадлежать к нескольким разделам. У материала "Фирма" есть поле с выбором "оплаченное размещение/бесплатное размещение", соответственно во Views с аргументом "Таксономия: ID Термина", при сортировке в том числе по этому полю, мы получаем, что платное размещение выводится первым. Плюс анонс платной компании темизируется. Всё отлично, все работает.
А теперь суть проблемы: руководство сказало, что необходимо выводить платные компании вперед и темизированными только в тех разделах, за которые они заплатили, то есть если компания числится в 3-х разделах, а оплатили они только 2, то в 3-м они не должны выделяться. Предполагаю, что необходимо использовать вычисляемое поле, то есть грубо говоря, необходимо использовать аргумент не только для фильтрации нод, но и для вычисления поля "оплаченное размещение/бесплатное размещение": если аргумент присутствует в поле "Относится к разделам" и "Оплаченные разделы" (Taxonomy Fields, работающие с одним словарем "Каталог"), то поле "оплаченное размещение/бесплатное размещение" принимает значение "оплаченное размещение", если аргумент присутствует в поле "Относится к разделам" но отсутствует в "Оплаченные разделы", то тизер выводится, но поле "оплаченное размещение/бесплатное размещение" принимает значение "бесплатное размещение".
Проблема в том, что я не очень представляю как к этому делу подступиться, создал еще одно поле, указал какие разделы оплачены (к примеру), но как высчитать значение поля "оплаченное размещение/бесплатное размещение", а еще и учитывая, что все это должно быть связано с аргументом - вообще не представляю.
Если кто-то знает, как это можно сделать менее заморочным образом, то с радостью выслушаю. Ну а если кто-то подскажет, каким образом решать проблему по описанной мной схеме, то был бы премного благодарен!

Комментарии

Аватар пользователя sergera-sakh sergera-sakh 26 марта 2012 в 8:54

Для решения проблемы установил Calculated field, где соответственно занес следующий код:

$ar = $arg[0]; // берем аргумент
$terms = $node->field_paid_razdel222[0]['value']; //загружаем список терминов таксономии из поля "Оплаченные разделы" (taxonomy field)
if (array_search ($ar, array $terms, true)) {
$node_field[0]['value'] = 1; //возвращаем Calculated field значение 1
} else {
$node_field[0]['value'] = 0; //возвращаем 0
}
но данный код к сожалению не работает, если кто-то работал с вычисляемыми полями - объясните пожалуйста, где ошибка?