Domanda

Io sono la creazione di un modulo personalizzato con una tabella del database personalizzato utilizzando il seguente tutorial .

Questo modulo è un modulo di contatto personalizzato, e vorrei che le impostazioni per il modulo di contatto personalizzato di essere su una base per negozio, il che significa, voglio l'invio da indirizzo email per essere diverso per ogni negozio che creo.

Devo aggiungere campi specifici per il database per Magento per salire su questo? Oppure Magento fare questo automaticamente?

È stato utile?

Soluzione

Si potrebbe utilizzare il comportamento esistente di Magento, che permette di definire e ottenere un indirizzo email di contatto per ogni store view e in funzione del reparto (vendite, assistenza clienti, generale). È quindi possibile utilizzare le tesi contatto specifico per view negozio nel vostro modulo personalizzato.

Questa è la configurazione di back-end per gli indirizzi di posta elettronica: indirizzi e-mail di back-end

E per utilizzare questa specifica e-mail nel modulo personalizzato, la parte importante nel tuo caso è il $sendervariable. Ecco un esempio di codice (controllare il commento in essa, essere consapevoli che si è preso da un codice di me, quindi adattarsi alle vostre esigenze):

$recipient = $item->getRecipient();
$template = $item->getTemplate();

if (!Mage::getConfig()->getNode(Mage_Core_Model_Email_Template::XML_PATH_TEMPLATE_EMAIL .'/' . $template)){
    Mage::throwException(Mage::helper('customer')->__('Wrong transactional notification email template.'));
}

$customer = Mage::getModel('customer/customer')->load($customer->getId());
$recipient = array('name' => $customer->getName(), 'email' => $customer->getEmail());
    /**
     * $senderType can be support, general, sales, custom1, custom2
     *  You can also replace the array by a string and provide only the string 'general', 'support', etc
     */
    $sender = array(
        'name' => Mage::getStoreConfig('trans_email/ident_' . $senderType . '/name', $storeId),
        'email' => Mage::getStoreConfig('trans_email/ident_' . $senderType . '/email', $storeId)
    );
}

$translate = Mage::getSingleton('core/translate');
$translate->setTranslateInline(false);

/* @var $emailTemplate Mage_Core_Model_Email_Template */
$emailTemplate = Mage::getModel('core/email_template');

if (Mage::app()->getStore()->isAdmin()) Mage::app()->getLocale()->emulate($storeId);

$variables += array(
    'name' => $customer->getName()
);

if (Mage::app()->getStore()->isAdmin()) Mage::app()->getLocale()->revert();

$emailTemplate->setDesignConfig(array('area' => 'frontend', 'store' => $storeId))
    ->sendTransactional($template, // xml path email template
        $sender,
        $recipient['email'],
        $recipient['name'],
        $variables
    );

$translate->setTranslateInline(true);

Altri suggerimenti

Magento aggiungerà questi automagically quando li si definisce nel file moduli system.xml.

<some_setting>
    <label>Some Setting Label</label>
    <frontend_type>text</frontend_type>
    <sort_order>1</sort_order>
    <show_in_default>1</show_in_default>
    <show_in_website>1</show_in_website>
    <show_in_store>1</show_in_store>
</some_setting>

È quindi recuperare il valore di configurazione per il negozio in questione via ...

Mage::getStoreConfig( '/path/to/setting', $store_id );

app/Mage.php

public static function getStoreConfig($path, $store = null)
{
    return self::app()->getStore($store)->getConfig($path);
}

Il che, a sua volta, chiama ...

app/code/core/Mage/Core/Model/Store.php

public function getConfig($path)
{
    if (isset($this->_configCache[$path])) {
        return $this->_configCache[$path];
    }

    $config = Mage::getConfig();

    $fullPath = 'stores/' . $this->getCode() . '/' . $path;
    $data = $config->getNode($fullPath);
    if (!$data && !Mage::isInstalled()) {
        $data = $config->getNode('default/' . $path);
    }
    if (!$data) {
        return null;
    }
    return $this->_processConfigValue($fullPath, $path, $data);
}

Avviso come è determinare il percorso per il valore di configurazione in base al codice di negozio qui ...

$fullPath = 'stores/' . $this->getCode() . '/' . $path;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top