Magento đọc giá trị cấu hình của nó trong thời gian chạy trực tiếp từ cấu trúc cây đối tượng cấu hình, vì vậy bạn cần phải sử dụng phương pháp setNode
mẹ đẻ của đối tượng cấu hình để thay đổi các giá trị. Tuy nhiên, vì cách mà Magento loads in scoped configuration (tự liên kết), nó không thẳng thắn như nó có vẻ.
Với phiên bản hiện tại của Magento (và tôi tin rằng, nhưng chưa được thử nghiệm, với các phiên bản cũ hơn), bạn sẽ cần đặt giá trị cấu hình trong tập hợp các nút cho store
hiện tại.
Bước một là nhận mã cho cửa hàng hiện được đặt. Bạn có thể làm điều này lập trình với những điều sau
$store = Mage::app()->getStore();
$code = $store->getCode();
sau đó, bạn có thể đặt một giá trị cấu hình với các cuộc gọi sau
$config = Mage::getConfig();
$config->setNode("stores/$code/web/unsecure/base_skin_url", 'value_to_set');
Hãy ghi nhớ điều này tất cả cần phải xảy ra sau Magento đã bootstrapped cấu hình vật. Cũng nên nhớ rằng có một khoảng thời gian Magento sẽ có cấu hình được nạp, nhưng đối tượng lưu trữ sẽ không được nạp. Nếu đây là trường hợp bạn không thể tải mã cửa hàng từ đối tượng cửa hàng.
Tôi đã làm điều gì đó tương tự trong số Pulse Storm Chaos module của mình. Nếu bạn quan tâm đến mã hoạt động, nó là Github.
Nguồn
2012-10-10 23:05:03
Cảm ơn lời giải thích tuyệt vời Alan! Tôi có thể thấy cách làm việc này sẽ hoạt động tốt trên cấu hình trên mỗi cửa hàng nhưng nếu tôi muốn tất cả các cửa hàng (và trang web) sử dụng tùy chọn cấu hình tùy chỉnh của tôi thì sao? Về bản chất, tôi muốn tùy chọn cấu hình tùy chỉnh của mình là toàn cầu ... –
@ChuckD Phiên bản ngắn: Bạn sẽ cần thêm nó cho mỗi cửa hàng trong hệ thống (nhiều cuộc gọi). Khi Magento tạo ra các cửa hàng/store_code nút nó sẽ xem xét các giá trị mặc định và trang web. Bằng cách đó, phương thức getStoreConfig luôn có thể xem xét các cửa hàng/store_code để tìm đúng giá trị. –
Chuck, bạn đã thử '$ config-> setNode (" global/web/unsecure/base_skin_url ", 'value_to_set');'? Chỉ là một ý tưởng, chưa được kiểm chứng. – Jongosi