So erhalten Sie die aktuelle Geschäfts-ID aus dem aktuellen Bereich in admin

7

Wie erhalte ich die Geschäfts-ID des aktuellen Bereichsgeschäfts im Administrator?

Wenn ich beispielsweise das Dropdown-Feld in der oberen linken Ecke verwende und den Bereich in eine Geschäftsansicht ändere, wie würde ich die Geschäfts-ID der aktuell gespeicherten Geschäftsansicht erhalten ...

Global
-> Website
--> Store
---> Store View (This is currently the scope, how do I get this store's id?)

Wir arbeiten an einem Admin-Modul, das jemand anderes geschrieben hat. Es ist defekt. Der Fix für das Modul scheint einem Helfer die Store-ID des aktuell gespeicherten Stores zu übergeben.

Jeffrey L. Roberts
quelle
Ein bisschen mehr Kontext würde helfen. Der Administrator läuft immer mit einer Geschäfts-ID von 0, aber ich vermute, dass Sie hier nicht danach fragen. "Current Scoped Store" ist etwas vage.
Alan Storm
Ja, definitiv nicht auf der Suche nach Store-ID 0 =] Hilft meine weitere Beschreibung zu beschreiben, wonach ich suche?
Jeffrey L. Roberts
Postleitzahl, die kaputt ist, würde mehr Hinweise geben
Anton S

Antworten:

11

In a Modelfür Optionen in einer Dropdown-Liste können Sie die aktive Ebene mit dem folgenden Code abrufen:

if (strlen($code = Mage::getSingleton('adminhtml/config_data')->getStore())) // store level
{
    $store_id = Mage::getModel('core/store')->load($code)->getId();
}
elseif (strlen($code = Mage::getSingleton('adminhtml/config_data')->getWebsite())) // website level
{
    $website_id = Mage::getModel('core/website')->load($code)->getId();
    $store_id = Mage::app()->getWebsite($website_id)->getDefaultStore()->getId();
}
else // default level
{
    $store_id = 0;
}

Dies gibt immer eine aktive Geschäfts-ID zurück.

Sander Mangel
quelle
Neugierig: warum die strlenSchecks? Liegt es daran, dass der Admin-Store 0 ist?
Philwinkle
Ehrlich gesagt ist es eine Weile her, dass ich den Code geschrieben habe, daher bin ich mir nicht 100% sicher, aber ich kann mich daran erinnern, dass er eine leere Zeichenfolge zurückgibt, wenn er nicht festgelegt ist (also wenn Sie sich auf einer höheren Ebene befinden)
Sander Mangel
Ich habe diese Methode erfolgreich in Magento 1.8 verwendet, aber als ich sie in 1.6 ausprobiert habe, hat sie nicht mehr funktioniert. Das Modell ist vorhanden und verwendet intern dieselben Methoden, aber in meinem Code wird immer die Standardstufe mit der Speicher-ID 0 zurückgegeben. Haben Sie eine Idee, warum dies geschieht?
Prateek
@Prateek hm nicht sicher. sollte in der Tat funktionieren. Leider habe ich Magento 1.6 nicht so schwer zur Hand, um Ihnen da draußen zu helfen. Sie können die Dateien in vergleichen app/code/core/Mage/Adminhtmlund sehen, was sich geändert hat. Sollte eine zu lange Liste nicht sein, wenn Sie Kommentare ignorieren (aus urheberrechtlichen Gründen)
Sander Mangel
Store und Website werden in 1.9 für mich leer zurückgegeben. Alans Antwort unten funktioniert für mich.
William Oakley
7

Es ist immer noch ein wenig unklar, wo genau Sie versuchen, diese Informationen im Administrator abzurufen. Ich gehe davon aus, dass dies während der Bearbeitung einer Anfrage für den System -> ConfigurationAbschnitt geschieht. Hoffentlich schickt Sie dies in die richtige Richtung

Wie bei allen Formularfeldern in Magento können Sie die Werte der Felder aus dem Anforderungsobjekt abrufen. So etwas tun (von einer Controller-Aktion)

$current = Mage::app()->getRequest()->getParam('section');
$website = Mage::app()->getRequest()->getParam('website');
$store   = Mage::app()->getRequest()->getParam('store');

Würde geben Sie die Feldwerte für die section, websiteund storeElemente , die durch den Schalter - Elemente übergeben. Sie interessieren sich für das storeElement. Leider übergibt dieses Formular nicht die IDs des Geschäfts, sondern den Funktionscode des Geschäfts

<option value="store_code" url="..." selected="selected" style="">Store View Name</option>

Dies bedeutet, dass Sie den Funktionscode aufnehmen $storeund verwenden müssen, um die Informationen des Geschäfts aus einer core/storeModellsammlung abzurufen .

$store   = Mage::app()->getRequest()->getParam('store');

if($store)
{
    $c = Mage::getModel('core/store')->getCollection()
    ->addFieldToFilter('code', $store);        

    $item = $c->getFirstItem();

    var_dump($item->getData());

    var_dump($item->getStoreId());
}
else
{
    var_dump('Store Value Not Set');
}
Alan Storm
quelle
5

Leider gibt es außer den Systemkonfigurationsseiten keine Standardmethode zum Hinzufügen von Bereichen zu Administrationsseiten. Wenn Sie es nur in der Systemkonfiguration benötigen, helfen Ihnen die vorherigen Antworten.

Wenn nicht, geschieht dies auf anderen Kernadministrationsseiten:

Produkt Management

Im Produktraster sowie auf der Produktbearbeitungsseite storebefindet sich einfach ein URL-Parameter, der die Geschäfts-ID enthält (es gibt keinen "Website" -Bereich für Produkte). Es wird nicht zentral verarbeitet, sondern die Blöcke, die es benötigen, greifen direkt auf den Parameter zu. Zum Beispiel diese Methode im Produktraster:

protected function _getStore()
{
    $storeId = (int) $this->getRequest()->getParam('store', 0);
    return Mage::app()->getStore($storeId);
}

Kategorienverwaltung

Es ist dasselbe wie im Produktmanagement, nur dass Sie den URL-Parameter nicht in der Adressleiste des Browsers sehen, da die Formulare mit AJAX-Controller-Aktionen geladen sind.


Dies sind neben der mir bekannten Systemkonfiguration die einzigen Admin-Bereiche, in denen Sie den Bereich wechseln können. Wenn das benutzerdefinierte Administrationsmodul eine Ergänzung zur Katalogverwaltung darstellt, verwenden Sie den Store-Parameter wie oben. Wenn Sie diese als Beispiel nehmen, können Sie den Anforderungsparameter möglicherweise auf die gleiche Weise verwenden. Sehen Sie sich die HTTP-Anforderungen an, während Sie das Modul verwenden.

Fabian Schmengler
quelle
0

Dies ist - glaube ich - ein besserer Code. Sie können Ausnahmen ( try...catch) behandeln, die in dieser Version ignoriert werden, um Fehler zu vermeiden, wenn der Parameter für die Anforderung eines Geschäfts oder einer Website nicht einem vorhandenen Geschäft oder einer Website entspricht.

protected function _getConfigScopeStoreId()
{
    $storeId = Mage_Core_Model_App::ADMIN_STORE_ID;
    $storeCode = (string)Mage::getSingleton('adminhtml/config_data')->getStore();
    $websiteCode = (string)Mage::getSingleton('adminhtml/config_data')->getWebsite();
    if ('' !== $storeCode) { // store level
        try {
            $storeId = Mage::getModel('core/store')->load( $storeCode )->getId();
        } catch (Exception $ex) {  }
    } elseif ('' !== $websiteCode) { // website level
        try {
            $storeId = Mage::getModel('core/website')->load( $websiteCode )->getDefaultStore()->getId();
        } catch (Exception $ex) {  }
    }
    return $storeId;
}
Dmitri Sologoubenko
quelle