Magento: Güncelleme mağaza logosu programlı

3 Cevap php

Ben Magento her mağazada core_config_data tabloda kurulum için kullandığı logosu URL tutar fark ettik.

Ben bu SQL çalıştırın:

SELECT * 
FROM core_config_data`
WHERE path = 'design/header/logo_src'

Ben mağaza ve bunların ilişkili logosu bir listesini almak. Ben de bir config_id ve scope_id olsun.

Ben bu logo en programlı perde arkasında güncellemek mümkün istiyorum ama geri bir mağaza adına bu tablonun veri ilişkilendirmek için nasıl anlamaya olamaz.

config_id ve store_id nasılsa ilişki kurar başka bir tabloya geri bağlantı var. Magento'nın EAV modeli, öf :)

Herhangi bir fikir?

3 Cevap

Magento yapılandırma değerlerini ayarlamak ve almak için bir API sağlar. I fetching data out of the config hakkında bir makale yazdı. Aşağıdaki terminolojinin herhangi karıştırır eğer gözden isteyeceksiniz.

Değişkenlerini ayarlama gelince, onu "bu değer" değişken "Ben tasarım / başlık / logo_src ayarlamak istiyoruz" diyerek kadar basit değil. Ayrıca için değerleri kaydetmeden olduğunuz web sitesi belirtmeniz gerekir, ve hangi için değerleri tasarruf ediyoruz saklayın.

Burada dikkatli olmak önemlidir. Ben Magento "web sitesi için gösteri site için gösteri" back-end/resource düzeyinde yapılandırma değerlerinin parçalı, veya yalnızca UI düzeyde zorlama olup olmadığını görmek için sisteme derinden bakmadım. Benim içgüdüleri bunu bu düzeyde savable olması amaçlanmıştır değildi web sitesi / mağaza düzeyinde bir değer tasarruf sonunda olabilir demek ki, daha sonra, ve bu korkunç Tanımsız Davranış yol açabileceği görüşünde.

Magento aşağıdaki konumda yapılandırma değerleri kaydetmeden nerede 1.4 topluluk sayımızda görebilirsiniz

File: app/code/core/Mage/Adminhtml/controllers/System/ConfigController.php

//around line 126
Mage::getModel('adminhtml/config_data')
    ->setSection($section)
    ->setWebsite($website)
    ->setStore($store)
    ->setGroups($groups)
    ->save();

Yolumdan uyarılar, üst düzey mağaza / web config için sadece logosunu güncelleştirmek için kod olacaktır.

//create a groups array that has the value we want at the rigth location
$groups_value = array();

$groups_value['header']['fields']['logo_src']['value'] = 'images/logo.gif'; 
Mage::getModel('adminhtml/config_data')
    ->setSection('design')
    ->setWebsite(null)
    ->setStore(null)
    ->setGroups($groups_value)
    ->save();   

Çizgi

Mage::getModel('adminhtml/config_data')

Bir Magento modeli başlatır.

'design' {[(1)}] yöntemi hem de 'header' ve 'logo_src' dizesi yapılandırma URI tekabül

design/header/logo_src

Ben null setWebsite ve setStore Eğer üst düzeyde bu değer tasarruf ediyoruz nesneyi anlatmak için geçebilen eminim. Ayrıca mağaza ve web sitesi kimliklerini geçebileceği. (Ben bu konuda biraz zayıf değilim, ama logoyu kaydetmek zaman normalde bu sistem yapıyor ne)

'fields' ve 'values' sabit kodlanmıştır. Nesnenin niyet bölümdeki tüm gruplardan bir kerede birden fazla yapılandırma değerleri kaydetmek için.

Eğer merak ediyorsanız eğer yukarıdaki denetleyicisi saveAction yöntemini Ödeme.

En kolay ve kısa bir yöntemdir:

Mage::getConfig()->saveConfig('design/header/logo_src', $logo);

Derinlemesine Cevabınız için teşekkürler. Ben gerçekten takdir ediyorum.

Ben sadece bu gibi yeni bir kayıt eklemek olduğunu anladım:

INSERT INTO core_config_data (`scope`, `scope_id`, `path`, `value`) 
VALUES ('websites', $websiteId, 'design/header/logo_src', $logo);

Bunu test ve konfigürasyon içinde mağaza için farklı bir logo eklemek için görünür - tasarım sayfa, ama <?php echo $this->getLogoSrc() ?> benim header.phtml hala varsayılan çekiyor yılında tarafından logosunu başvuru ne zaman üst düzey yapılandırma logo.

Ben yazınızı kullanarak bir kılavuz olarak ben Mage::log() kullanarak hata ayıklama başlatmak ve beni nereye götürdüğünü görebilirsiniz düşünüyorum.