2017-05-08 3 views
0

Ich versuche, ein Modul zu erstellen, das sowohl Front-End-und Back-End-Funktionalität hat. So wie ich auf der Homepage nach der Stadt fragen muss, wenn der Laden geladen wird. Und alle verfügbaren Städte werden im Backend-Admin-Panel eingegeben/verwaltet.So ändern Sie Magento-Front-End-Seiten

Bevor ich früher nur für Backend-Dinge schrieb, scheint Frontend wenig verwirrend zu sein.

Es gibt einen Design-Ordner, der komplett für die Themenentwicklung gedacht ist.

Alle Beispiel sind wenig anders (https://www.mageplaza.com/magento-2-module-development/, http://inchoo.net/magento-2/how-to-create-a-basic-module-in-magento-2/]2), haben sie routes.xml, wo route_id und alle definiert sind, aber hier muss ich keine zusätzliche Strecke. Brauchen einige zusätzliche Verbesserungen in den Frontend-Seiten.

I erstellt Modul V_name/M_name/adminhtml/block controllers etc view ...

Leite mich wie ein Modul zu schaffen, das sowohl Front-End und Back-End-Verbindung hat, sollten die Städte in Admin eingegeben werden, sollten sie auf dem Frontend-Homepage zeigen.

Im Moment habe ich nur geschafft, Startseite Content CMS-Seite zu bearbeiten, indem Sie einige HTML hinzufügen, die ein Popup mit einem Dropdown für Städte zeigt, wenn die Seite geladen wird.

Antwort

0

Da Sie bereits das Back-End herausgefunden haben, werde ich mich auf Front-End konzentrieren. Da Sie lediglich eine Liste auffüllen müssen, die Sie bereits erstellt haben, sollte dies einfach sein. Ich habe so etwas schon einmal gemacht und ich fand es einfacher, einfach JSON zu benutzen, um eine Liste von Städten abzufragen und das Drop-Down zu füllen. Ich glaube nicht, dass dies der "MVP/richtige" Weg ist, aber es ist weniger Arbeit als die anderen Wege. (Zumindest für mich ist es das. Ich bevorzuge immer die JavaScript-Option, da es eine einfache zukünftige Anpassung der Seite ermöglicht.) Um die JSON-Methode zu verwenden, müssen Sie einen Block mit einer Methode wie der folgenden erstellen. Sie werden sehen, dass Sie auch ein Ressourcenmodell erstellen müssen (ich werde nicht auf das Erstellen des Ressourcenmodells oder die Details von Blöcken eingehen, da es viel bessere Ressourcen als ich bereits online gibt, die in jedes Detail gehen, das Sie brauchen .). Sobald dies abgeschlossen ist, können Sie direkt von der .phtml-Seite auf die Daten in einem einfach zu verwendenden JSON-Array zugreifen.

Zuerst müssen Sie sicherstellen, dass Sie jetzt Ihre Module richtig strukturieren. Der neue Block unten sollte wie folgt in einer Struktur sein ...

app/code/<VENDOR>/<MODULE>/Block/Wrapper.php (or whatever you name it) 

Die Admin-Blocks in der Struktur unten sein sollte, was es klingt wie Sie bereits wissen, sind, wie zu tun.

app/code/<VENDOR>/<MODULE>/Block/Adminhtml 

Erstellen Sie Ihren Block und eine Methode hinzufügen, wie unten, um ein JOSN Array zu erstellen ...

public function getCityList() 
{ 
    $city_array = array(); 
    /** @var \<VENDOR>\<MODULE>\Model\ResourceModel\City\Collection $collection */ 
    $collection = $this->_cityCollectionFactory->create(); 
    $collection->addFieldToFilter('active','1')->addFieldToSelect(['city_id', 'city']); 
    $collection->getSelect()->order(array('city ASC', 'city_id ASC')); 

    $count = 0; 
    foreach ($collection as $model) 
    { 
     $city_array["$count"] = $model->getData(); 
     $count++; 
    } 
    return \Zend_Json::encode($city_array); 
} 

FYI ... Die foreach-Schleife in dem obigen Code seltsam ist und verwendet $ zählen, weil ich musste einige knifflige Dinge tun, um etwas zum Arbeiten zu bringen.

Dann können Sie den Block in Ihrer .phtml-Datei erstellen, um über Javascript auf die Daten zuzugreifen.

<?php 
    $block_obj = $block->getLayout()->createBlock('<VENDOR>\<MODULE>\Block\Wrapper'); 
?> 
<script type="text/javascript"> 

    window.citylistJson = <?php echo $block_obj->getCityList() ?>; 

</script>