Pergunta

Tenho seguido http://www.solvingmagento.com/accessing-an-external-database-from-your-magento-module/ e artigos de Alan Tempestade e estou preso em conexão de um Módulo para Magento um banco de dados externo.[Mage/Core versão 1.6 neste projeto].

Eu acho que a configuração parece correto, mas eu não pode obter dados para a tela.Em vez disso, o real código php está sendo exibido.Especificamente, toda a classe de Recurso está sendo exibido.

Aqui é relevante controller, model, modelo de recursos, e config trecho.Eu não estou certo de que o modelo de Recursos que deve ser estendido, que pode ser o problema, mas talvez haja alguma coisa também?

O Meu Controlador

public function indexAction()
{
    echo "<h1> Connecting Magento to Developer Store! </h1>";

    $externalDataRead = Mage::getModel('developer_integration/customer');
    $externalDataRead->load(1, 'user_id');

    echo '<pre>';
    print_r($externalDataRead->getData());
    echo '</pre>';
 }

O Meu Modelo

class Developer_Integration_Model_Customer extends Mage_Core_Model_Abstract
{
     protected function _construct()
     {
         $this->_init('developer_integration/customer');
     }
 }

O Meu Modelo De Recursos

class Developer_Integration_Model_Resource_Customer extends Mage_Core_Model_Resource_Type_Db_Pdo_Mysql
{
        protected function _construct()
    {
        $this->_init('developer_integration/customer', 'user_id');
    }
}

Meu config.xml (isto pode não ser bem-formatado aqui, mas está no arquivo)

 <models>
   <developer_integration><!-- name of the model configuration-->
      <class>Developer_Integration_Model</class><!-- path where to look for model classes for-->
      <resourceModel>developer_integration_resource</resourceModel><!-- pointer to the resource model configuration node-->
   </developer_integration>
  <developer_integration_resource><!-- resource model configuration name -->
    <class>Developer_Integration_Model_Resource</class><!-- path where to look for resource model classes for -->
    <entities><!-- entities list -->
      <customer><!-- our test entity -->
         <table>dev_customer</table><!-- name of the external table to store data for our entity -->
      </customer>
    </entities>
  </developer_integration_resource>
</models>
<resources>
   <developer_integration_setup><!-- name of the external db connection -->
     <connection>
       <host><![CDATA[localhost]]></host>
       <username><![CDATA[devuser]]></username>
       <dbname><![CDATA[dev_store]]></dbname>
       <type><![CDATA[pdo_mysql]]></type>
       <active>1</active>
     </connection>
   </developer_integration_setup>
   <developer_integration_write><!-- connection used for write access -->
     <connection>
       <use>developer_integration_setup</use>
     </connection>
   </developer_integration_write>
   <developer_integration_read><!-- connection used for read access -->
     <connection>
       <use>developer_integration_setup</use>
     </connection>
   </developer_integration_read>
 </resources>
Foi útil?

Solução 2

Bem, a resposta para isso é manter a quebra do modelo de recursos e até pode-se acionar o azul magento tela de erro ou algo assim - de modo que você pode dizer que os erros que estão a bater há no interior do Recurso.

No meu caso, eu achei que fazer o meu Recurso ampliar class Mage_Core_Model_Resource_Db_Abstract accionado um erro de execução.Enquanto que parecia ser um sinal de que o meu Recurso foi estendendo-se o Recurso errado Modelo, na verdade, era um sinal de que eu estava estendendo o correto Modelo de Recursos.

Vale a pena notar que o Magento api do google docs em http://docs.magentocommerce.com/index.html não lista a Mage_Core_Model_Resource_Db_Abstract.O Mage_Core_Model_Resource_Abstract está listado, como é Mage_Core_Model_Resource, mas Mage_Core_Model_Resource_Db_Abstract não é.A única razão que eu estava disposto a repetir que a classe foi porque ele foi listado na solvingmagento.com tutorial.Eu também poderia ter grep ed para a classe dentro do meu instalação e descobriu que ele existia.

Então, que pelo menos leva para o problema, agravado por api acima ausência...em algum momento, no meio da minha hacking volta, tirei o <password> nó de minha conexão, porque o meu local dev senha está vazia.No entanto, quando o xml é analisado pelo Magento, é apresentada coordenadas para ter esse campo presente.Ele se transforma em <password /> dentro da configuração de conexão e é necessário [Outro ponto de falta do magento configuração do wiki].

Se mais alguém tem esse problema - talvez esta informação irá reduzir o tempo de ervas daninhas.Melhor para todos.

Outras dicas

Substituir os Modelos de Recursos e tags com este:

<models> <developer_integration><!-- name of the model configuration--> <class>Developer_Integration_Model</class><!-- path where to look for model classes for--> <resourceModel>developer_integration_mysql4</resourceModel><!-- pointer to the resource model configuration node--> </developer_integration> <developer_integration_mysql4><!-- resource model configuration name --> <class>Developer_Integration_Model_Mysql4</class><!-- path where to look for resource model classes for --> <entities><!-- entities list --> <customer><!-- our test entity --> <table>dev_customer</table><!-- name of the external table to store data for our entity --> </customer> </entities> </developer_integration_mysql4> </models> <resources> <developer_integration_setup><!-- name of the external db connection --> <connection> <host><![CDATA[localhost]]></host> <username><![CDATA[devuser]]></username> <dbname><![CDATA[dev_store]]></dbname> <type><![CDATA[pdo_mysql]]></type> <active>1</active> </connection> </developer_integration_setup> <developer_integration_write><!-- connection used for write access --> <connection> <use>core_write</use> </connection> </developer_integration_write> <developer_integration_read><!-- connection used for read access --> <connection> <use>core_read</use> </connection> </developer_integration_read> </resources>

Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top