Kiedy chcę sortować produkty według ceny (od najniższej do najwyższej i od najwyższej do najniższej), mój link nie działa. Wartością opcji jest „price & product_list_dir = asc”, co oznacza „price% 26product_list_dir% 3Dasc”. Jak mogę zdekodować ten adres URL?
Oto mój kod:
<div class="toolbar-sorter sorter"> <label class="sorter-label" for="sorter"><?php /* @escapeNotVerified */ echo __("Sort by") ?></label> <select data-role="sorter" class="sorter-options selectpicker"> <?php $url = $_SERVER["REQUEST_URI"]; $path = strstr($url, "?"); ?> <option <?php if($path == "?product_list_order=price&product_list_dir=desc"): ?> selected="selected" <?php endif; ?> class="high-low" value="price&product_list_dir=desc"> Price - High to low </option> <option <?php if($path == "?product_list_order=price&product_list_dir=asc"): ?> selected="selected" <?php endif; ?> class="low-high" value="<?php /* @escapeNotVerified */ echo __("price&product_list_dir=asc") ?>"> Price - Low to high </option> </select></div>
Komentarze
- Co nie działa? Czy wybrane " " nie są poprawnie wyświetlane? Czy w atrybucie value w html znajdują się obce elementy "% 26 i% 3D ", tak jak ' < option value = " price% 26product_list_dir% 3Dasc " > '? Czy kolejność sortowania nie zmienia się po wybraniu innego rodzaju sortowania? Określ, co nie działa, abyśmy mogli szybciej pomóc.
- Sprawdziłem za pomocą opcji Sprawdź element i wartość opcji jest wyświetlana poprawnie. Kiedy klikam opcję, strona przekierowuje do mysite.com/category.html?product_list_order=price%26product_list_dir%3Dasc. Ale kiedy zmienię "% 26 " i "% 3D " do " & " i " & " bezpośrednio na pasku adresu, to działa. Wygląda na to, że kiedy klikam opcję, Magento koduje wartość tej opcji w adresie url
Odpowiedź
To „to przeglądarka, która prawidłowo koduje wartość zgodnie z oczekiwaniami. Sprawdź https://perishablepress.com/stop-using-unsafe-characters-in-urls/ , aby znaleźć bezpieczne znaki.
Moim zdaniem najlepszy sposób na zrobienie tego wystarczy ustawić wartość na coś takiego jak „cena $ produkt_list_dir! asc” lub „cena + katalog-opis” lub po prostu „price_desc” i przeanalizować wartość produktu_list_order w kodzie. Inne opcje to:
- Podziel menu na dwa menu rozwijane (product_list_order i product_list_dir)
- Zaktualizuj adres URL za pomocą javascript, gdy zmieni się rozwijane menu
Komentarze
- Dziękuję. Dodałem onChange = " window.document.location.href = this.options [this.selectedIndex] .value; ", aby wybrać i < typ skryptu = " text / javascript " > jQuery (function ($) {$ (' select ') .on (' change ', function () {var url = $ (this) .val (); if (url) {window.location = url;} return false;} );}); < / script > Teraz ' działa. Dziękuję
Odpowiedź
zmień to echo __("price&product_list_dir=asc")
na echo "price&product_list_dir=asc"
Komentarze
- Dziękuję za pomoc, ale ' nie działa