У меня была очень похожая проблема, и я не только нашел ее решение, но и узнал новое о том, как работает представление. Позвольте мне поделиться тем, что я узнал, и решением вашей проблемы.
Когда вы создаете представление с одним или несколькими контекстными фильтрами, оно должно откуда-то получать значения этих фильтров. Это может быть сделано с помощью -
- Выбор значений фильтра контекста из URL
- Как правило, для таких целей у вас будет представление страницы с URL-адресом формы
foo/%/bar
или foo/bar/%
для одного контекстного фильтра ИЛИ формы foo/%/bar/%
или foo/bar/%/%
для нескольких фильтров.
- Если у вас есть несколько фильтров, значение URL, которое отображается первым, сопоставляется с первым фильтром, рядом со вторым фильтром и так далее.
- Представления позволяют указать, что делать, если значения фильтра недоступны в URL-адресе . Это обычно используется для блочных представлений .
- Вы можете выбрать из различных действий, а затем настроить выбор тоже.
asdfj kajsdf
- Другая вещь, которую позволяет просматривать представления, - это указывать, что делать со значениями фильтра, если они найдены в URL, как описано в # 1 выше. Типичные случаи использования: создание динамических заголовков на основе значений фильтра, проверка значений фильтра и т. Д.
- При проверке значений фильтра вы также можете изменить значения! (Вот где наше решение лежит между прочим). Это очень похоже на то, как мы можем изменять значения $ form в обратных вызовах проверки формы drupal.
Решение вашей конкретной проблемы заключается в использовании очень похожего кода в разделах, на которые указывают стрелки на изображении выше.
Эта ссылка оказалась мне очень полезной. Вот выдержка из этого:
$np = explode('/', drupal_get_normal_path($argument));
if (!empty($np[1])) {
$handler->argument = $np[1];
return TRUE;
} else {
return FALSE;
}