Làm cách nào để lấy id cửa hàng hiện tại từ phạm vi hiện tại trong quản trị viên


7

Làm cách nào để có id cửa hàng của cửa hàng có phạm vi hiện tại trong quản trị viên?

Chẳng hạn, nếu tôi sử dụng hộp thả xuống ở góc trên bên trái và thay đổi phạm vi thành chế độ xem cửa hàng, làm cách nào tôi có được id cửa hàng của chế độ xem cửa hàng hiện tại trong phạm vi ...

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

Chúng tôi đang làm việc trên một mô-đun quản trị mà người khác đã viết, nó bị hỏng, bản sửa lỗi cho mô-đun dường như đang thông qua một người trợ giúp id cửa hàng của cửa hàng hiện tại ...


Một chút bối cảnh sẽ giúp. Quản trị viên luôn chạy với ID cửa hàng 0, nhưng tôi nghi ngờ đó không phải là điều bạn đang hỏi ở đây. "Cửa hàng phạm vi hiện tại" là một chút mơ hồ.
Alan Storm

Ya, chắc chắn không tìm kiếm id cửa hàng 0 =] Mô tả thêm của tôi có giúp mô tả những gì tôi đang tìm kiếm không?
Jeffrey L. Roberts

mã bài viết bị hỏng sẽ cung cấp thêm manh mối
Anton S

Câu trả lời:


11

Trong giả sử, Modelđối với các tùy chọn trong danh sách thả xuống, bạn có thể truy xuất mức hoạt động bằng cách sử dụng đoạn mã sau:

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;
}

Điều này sẽ luôn trả về một ID cửa hàng đang hoạt động.


Tò mò: tại sao strlenkiểm tra? Có phải vì cửa hàng quản trị là 0?
philwinkle

Thành thật mà nói trước đây tôi đã viết mã nên tôi không chắc chắn 100% nhưng tôi có thể nhớ rằng nó trả về một chuỗi trống khi nó không được đặt (vì vậy khi bạn ở cấp độ cao hơn)
Sander Mangel

Tôi đã sử dụng phương pháp này thành công trong Magento 1.8, nhưng khi thử trong 1.6, nó đã ngừng hoạt động. Mô hình ở đó và bên trong, nó đang sử dụng các phương thức tương tự, nhưng trên mã của tôi, nó luôn trả về mức mặc định với 0 id lưu trữ. Bất kỳ ý tưởng bạn có thể cung cấp tại sao điều này đang xảy ra?
Prateek

@Prateek hm không chắc. thực sự nên làm việc Thật không may, tôi không có Magento 1.6 trong tay để giúp bạn ngoài đó. Bạn có thể làm một so sánh giữa các tập tin trong app/code/core/Mage/Adminhtmlvà xem những gì đã thay đổi. Không nên quá dài một danh sách nếu bạn bỏ qua các bình luận (vì các dòng bản quyền)
Sander Mangel

Cửa hàng và trang web đều trả lại cho tôi trong 1.9, câu trả lời của Alan dưới đây không phù hợp với tôi.
William Oakley

7

Vẫn còn một chút không rõ ràng, chính xác, bạn đang cố lấy thông tin này trong quản trị viên. Tôi sẽ cho rằng nó trong khi xử lý một yêu cầu cho System -> Configurationphần này. Hy vọng điều này sẽ gửi cho bạn đi đúng hướng

Giống như tất cả các trường biểu mẫu trong Magento, bạn có thể lấy các giá trị của các trường từ đối tượng yêu cầu. Làm một cái gì đó như thế này (từ một hành động điều khiển)

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

Sẽ cung cấp cho bạn những giá trị trường cho section, websitestorecác yếu tố thông qua các yếu tố switcher. Bạn quan tâm đến storeyếu tố này. Thật không may, hình thức này không vượt qua ID của cửa hàng, mà thay vào đó là mã ngắn của cửa hàng

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

Điều này có nghĩa là bạn sẽ cần lấy mã ngắn $storevà sử dụng nó để lấy thông tin của cửa hàng từ core/storebộ sưu tập mô hình.

$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');
}

5

Thật không may, không có cách tiêu chuẩn để thêm phạm vi vào các trang quản trị, ngoài các trang cấu hình hệ thống. Nếu bạn chỉ cần nó trong cấu hình hệ thống, các câu trả lời trước sẽ giúp bạn.

Nếu không, đây là cách nó được thực hiện trong các trang quản trị cốt lõi khác:

Quản lý sản phẩm

Trên lưới sản phẩm cũng như trên trang chỉnh sửa sản phẩm, storechỉ đơn giản là một tham số URL có chứa id cửa hàng (không có phạm vi "trang web" cho sản phẩm). Nó không được xử lý tập trung, thay vào đó là các khối cần nó, truy cập trực tiếp vào tham số. Ví dụ phương pháp này trong lưới sản phẩm:

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

Quản lý danh mục

Nó giống như trong quản lý sản phẩm, chỉ là bạn không thấy tham số URL trong thanh địa chỉ trình duyệt vì các biểu mẫu được tải với các hành động của bộ điều khiển AJAX.


Đây là những phần quản trị duy nhất bên cạnh cấu hình hệ thống mà tôi biết, nơi bạn có thể chuyển đổi phạm vi. Nếu mô-đun quản trị tùy chỉnh là một bổ sung cho quản lý danh mục, hãy sử dụng tham số cửa hàng như trên. Nếu lấy đó làm ví dụ, bạn có thể sử dụng tham số yêu cầu theo cách tương tự. Hãy xem các yêu cầu HTTP trong khi sử dụng mô-đun.


0

Điều này - tôi tin - là một mã tốt hơn. Bạn có thể xử lý các trường hợp ngoại lệ ( try...catch), bị bỏ qua trong phiên bản này để tránh lỗi khi tham số yêu cầu cửa hàng hoặc trang web không tương ứng với cửa hàng hoặc trang web hiện tại.

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;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.