Множественный выбор – рендеринг как URL-адрес и поиск
-
13-12-2019 - |
Вопрос
Я создаю книжный магазин с помощью Magento.У меня есть несколько пользовательских атрибутов для авторов и переводчиков.
Я хотел бы представить их значения в виде ссылки на расширенный поиск, чтобы перечислить все продукты для этого автора/переводчика.
- Первая проблема:Расширенный поиск не принимает строку/catalogsearch/advanced/result/?author="Имя"
- Вторая проблема:Могу ли я отображать каждый элемент как ссылку?например,что-то вроде этого
< a href = "/catalogsearch/advanced/result/?author= < ?php echo $_product->getAttributeText('author') ?>"> < ?php echo $_product->getAttributeText('автор') ?>
Решение
Если я вас правильно понимаю, ваша проблема теперь связана с несколькими атрибутами выбора.Если вы выполните расширенный поиск и посмотрите на полученный URL-адрес, вы увидите, что он выглядит так:
[YOUR_BASE_URL]/catalogsearch/advanced/result/?author[]=1&author[]=2&other_attribute[]=45
Фактически, именно так вы передаете несколько входных значений с одним и тем же именем.Имя тогда не name="author"
, но name="author[]"
.Также убедитесь, что вы не используете getAttributeText()
для части URL - он ожидает option_id, поэтому getData('author')
или волшебный добытчик getAuthor()
верно.
Ваша последняя ссылка будет выглядеть так:
<a href="<?php echo Mage::getBaseUrl() ?>catalogsearch/advanced/result/?author[]=<?php
echo $_product->getAuthor() ?>"><?php
echo $_product->getAttributeText('author') ?></a>
Теперь о проблеме, если у продукта более одного автора.Как предложил Фабиан, вы можете использовать is_array и foreach.
<?php
$_authors = $_product->getAuthor();
if( !is_array($_authors) ) {
$_authors = explode(',', $_authors);
}
$_authorTexts = $_product->getAttributeText('author');
if( !is_array($_authorTexts) ) {
$_authorTexts = array($_authorTexts);
}
foreach($_authors as $i => $_author) {
?><a href="<?php echo Mage::getBaseUrl() ?>catalogsearch/advanced/result/?author[]=<?php
echo $_author ?>"><?php
echo $_authorTexts[$i] ?></a><?php
}