Magento2 - Layered Navigation zum Erstellen von Multiselect-Funktionen mithilfe von Code

7

Magento2-Version ist - 2.1.2

Ich erstelle ein benutzerdefiniertes Modul für die geschichtete Navigation und möchte Funktionen für Mehrfachauswahloptionen für die geschichtete Navigation erstellen .

Ich habe dort bereits das Kontrollkästchen angezeigt, indem ich die Vorlage für die geschichtete Navigation in meinem benutzerdefinierten Modul überschrieben habe. Jetzt muss ich diese Kontrollkästchen als Mehrfachauswahl ** auswählen.

Ich habe gesehen, dass es dafür viele Erweiterungen gibt , aber ich möchte es mit Code machen. Ist es möglich?

Gibt es ein gutes Tutorial , um das mehrschichtige Navigationsmodul zu überschreiben und diese Art von Funktionalität zu erstellen?

Vorab Danke.

Manthan Dave
quelle
Funktioniert Ihr Ajax-Filter? nur Multi Select funktioniert nicht nur? @ ManthanDave
Mohammad Mujassam
@MohammadMujassam - Erstens habe ich Multi-Select-Option gestartet Ich habe nichts dagegen, wenn seine Arbeit mit Post auf Seite referesh, wenn seine Arbeit dann werde ich
Ajax

Antworten:

0

Zunächst müssen Sie Ihr eigenes / benutzerdefiniertes Thema erstellen. Erstellen Sie in Ihrem Themenverzeichnis den Ordner Magento_LayeredNavigation (falls noch nicht verfügbar). Kopieren Sie in diesem Ordner die gesamte Vorlagendatei aus dem Kernmodul Magento\LayeredNavigation\view\frontend\templatesin Magento_LayeredNavigation\template.

Jetzt können Sie das mehrschichtige Navigationsdesign und die Codes überschreiben.

Für die Mehrfachauswahl müssen Sie die URL schreiben. Die unten angegebene Beispielmethode zum erneuten Schreiben von URLs kann gemäß Ihren Anforderungen angepasst werden.

Beispiel Helferfunktion unten angegeben ..

public function getFilterUrls($params,$filter,$value){
    $currentCatUrl = $this->getCurrentCatUrl();
    unset($params['id']);
    unset($params['isAjax']);
    unset($params['_']);
    //$value = str_replace(',', '', $value);
    if (isset($params[$filter])) {
        $filterArray = explode(',', $params[$filter]);
        $checkValue = in_array($value, $filterArray);
        $remVelue = array_diff($filterArray, [$value]);
        $remVelue = implode(',', $remVelue);
    }
    if(isset($params[$filter]) and $params[$filter] == $value){
        unset($params[$filter]);
        $url = $currentCatUrl . '?' . http_build_query($params);
    }elseif (!empty($params[$filter]) && $params[$filter] !== ',' && $params[$filter] !== $value && $checkValue == FALSE) {
        $urlValues = $params[$filter];
        unset($params[$filter]);
        $url = $currentCatUrl . '?' . http_build_query($params) . '&' . $filter . '='.$urlValues.','.$value;
    }elseif (isset($params[$filter]) && $params[$filter] !== ',' && $params[$filter] !== $value && $checkValue == TRUE) {
        unset($params[$filter]);
        $url = $currentCatUrl . '?' . http_build_query($params) . '&' . $filter . '='.$remVelue;
    }
    else{
        unset($params[$filter]);
        $url = $currentCatUrl . '?' . http_build_query($params) . '&' . $filter . '=' . $value ;
    }
    return $url;
}

wo $params = $this->getRequest()->getParams();

AND $ filter ist ein neuer / alter Parametername, den Sie mehrfach auswählen / auswählen möchten.

AND $ value ist der gewünschte Wert für den übergebenen Parameter.

AND $ currentCatUrl URL der aktuellen Kategorie, die Sie aus der Registrierung erhalten.

Rufen Sie die obige Hilfsmethode in Magento_LayeredNavigation \ template \ view.phtml auf . Magento_LayeredNavigation \ template \ view.phtml ist die Datei, in der Sie die Änderungen für die geschichtete Navigation vornehmen.

Dadurch wird die Filter-URL für Multiselect und Sigle Select zurückgegeben.

Update 1: Beispiel formatieren

<a href="<?php echo $block->escapeUrl($helper->getFilterUrls($params,'for','1')) ?>">
                <input type="checkbox" name="" value="l" id="check1"  <?php echo $this->getRequest()->getParam('for')=='1'?'checked':'' ?>>
                <label for="check1"> </label> <div class="anchor-text">Men</div> 

Mohammad Mujassam
quelle
Bitte überprüfen Sie die Methode, die ich gegeben habe. Alle Filter, die bereits vorhanden sind, werden nicht entfernt. Wenn Sie auf dasselbe Kontrollkästchen klicken, das bereits angewendet wurde, wird nur es entfernt
Mohammad Mujassam,
Bitte überprüfen Sie mein Update 1
Mohammad Mujassam
Erstellen Sie einen Helfer in einem beliebigen Modul und laden Sie ihn in die Datei view.phtml (Vorlage). $ helper = $ this-> helper ('Vendor \ Module \ Helper \ Data') Sie können auf diese Site verweisen, um den Helfer cloudways.com
Mohammad Mujassam
Möglicherweise fehlt Ihnen ein Parameter oder Sie können ihn debuggen. Im Grunde ist die Logik dieselbe, die ich angegeben habe. Einige Parameter können sich je nach Ihren Anforderungen ändern. Und ja, Sie können dies überall verwenden
Mohammad Mujassam
Okay, ich habe alle Dinge getan und jetzt ist die Seite leer, wenn ich versuche, auf die Seite zuzugreifen. Gibt es ein anderes Problem? - <? php $ helper = $ this-> helper ('vendorname \ LayeredNavigation \ Helper \ Data'); ?> <? php $ params = $ this-> getRequest () -> getParams (); ?> <a href="<?php echo $block-> EscapeUrl ($ helper-> getFilterUrls ($ params, 'for', '1'))?> "> </a> - Ich habe diese Zeile aktiviert my view.phtml top
Manthan Dave