Mi Odisea por inser...
 
Avisos
Vaciar todo

Mi Odisea por insertar las marcas en M2Epro

9 Respuestas
2 Usuarios
0 Me gustas
2,172 Visitas
Interestellar
(@interestellar)
Respuestas: 19
Eminent Member
Topic starter
 

Estoy investigando como funciona internamente Magento en concreto el Modulo M2Epro, por eso mismo abro este hilo para hacer apuntes de mi investigación y recibir feedback mientras ayudo a gente que en el futuro tenga mi mismo problema.

Básicamente acabo de entrar en una empresa y les urge añadir las Marcas y el MPN al modulo de M2Epro. Se de programación pero estoy algo oxidado con el PHP y el Magento no lo he tocado en mi vida así que voy a tener que hacer un esfuerzo extra.

Lo curioso es que cuando llegue ya estaba el campo para estos, pero cuando se rellenan los datos estos no se encuentran.

Aqui me planteo 3 preguntas que responder para descubrir donde esta el problema:

1.¿Cual es la tabla en la base de datos que usa M2Epro para rellenar esos datos?
2.¿Desde donde se rellenan los datos de la tabla de la pregunta 1?
3.¿Donde se recogen los datos de la tabla de la pregunta 1 para subirlo a Ebay?
4.¿Y si la aplicación no funciona así?

Por lo que me voy a /public_html/magento/app/code/community/Ess/M2ePro/Model y me encuentro con un montón de carpetas para cada cosa.

Muchas, Muchísimas carpetas hay una llamada Ebay a ver si tiene lo que me interesa.

¡Oh! ¡¿En serio?!

Recuerdo que Magento funciona bajo Zend y es Orientado a Objetos.

Me pongo a mirar los abstract a ver si veo algo parecido a;

$this->load->model('Model_name', 'nombre_modelo_para_despistar');

Esta es más o menos la formula que se usaba en CodeIgniter para decir a que te conectabas y me doy cuenta de que estoy buscando en el model, cuando eso se usa en el controlador para llamar al modelo.

Vuelvo atras y me doy cuenta de una cosa:

¿Por qué hay demonios hay dos carpetas de controlador? ¿Quien ha hecho esto?

Deduzco que la importante es "Controller" Porque Model y Helper no tienen esa "s". Y me meto en ella.

Solo hay 2 archivos.
-Una carpeta llamada "Adminhtml"
-Un archivo PHP llamada "router.php"

Entro en este ultimo y me encuentro con esto.

"class Ess_M2ePro_Controller_Router extends Mage_Core_Controller_Varien_Router_Admin"

Viendo la estructura de la clase tengo claro que hace referencia a otra carpeta y el directorio en el que esta.

Paso de ese archivo y me meto en Adminhtml, me encuentro un monton archivos .php clonicos llamandose entre ellos.

AdminController
BaseController
WizardController

Y carpetas como "ebay" asi que entro en ella.

MainController.php
SimpleController.php
WizardController.php

Supongo que ya os imaginareis mi cara en estos instantes.

Attached files

 
Respondido : 10/05/2016 9:29 am
Xarlie
(@xarlie)
Respuestas: 2677
Famed Member
 

Me ha hecho gracia leer tu post 🙂

La estructura que tiene el módulo es la correcta, incluso lo de Controller y controllers. Fíjate como los he nombrado yo porque también es super importante.
En Controller están las clases abstract y en controllers están realmente los controladores a los que vas a llamar en la url.

Pero en cualquier caso has escogido, de todos los módulos que hay, quizás el peor de todos (o casi) para entender lo que hace un módulo en Magento porque el módulo de M2e es enorme y hace mil cosas, controla otras mil y se conecta a mil opciones.
Pero ¡suerte!

Soporte profesional para Magento: www.estatiko.com

 
Respondido : 10/05/2016 11:11 am
Interestellar
(@interestellar)
Respuestas: 19
Eminent Member
Topic starter
 

Si elegir lo ha elegido el que estuvo antes que yo. Al final me pasado a la aplicación de gestion interna y me he fijado en "api_magento.php" donde pone litaralmente como usuario del SOAP "Subida_autamica" y contiene todos los datos esenciales.

Repetidamente leo " $this->soap_conex->call(";

Así que me dirijo a buscar la carpeta SOAP en /magento/lib/

Hay 2 carpetas y abro cada una de ellas, uso la búsqueda de la palabra "call" en todas ellas y acabo encontrando..

Creo que ya tengo a la función y me da que ni la entiendo.

 
Respondido : 10/05/2016 11:52 am
Interestellar
(@interestellar)
Respuestas: 19
Eminent Member
Topic starter
 

Retornamos nuestra aventura;

La aplicacion de gestión tiene un archivo llamado "api_magento.php" vamos a volver a revisarlo...

Código en Español comentado, esto me va gustando más.

Me hace gracia que ciertas variables estén escritas en Español.

En el mismo metodo me encuentro esto....

Deduzco que product_stock es la tabla, la busco en el sistema y.... ¡No existe!

Así que busco en Google y...

http://devdocs.magento.com/guides/m1x/api/soap/catalog/catalogProduct/catalog_product.create.html

¿Entonces catalog_product es un metodo y el create / update / delete es una orden?

Me doy cuenta de que en la lista todos los nombres son en ingles...

Y en mi array hay españolidades , algunas las detecta y otras no.

DEDUCCIÓN: Hay otro sitio que ha sido modificado para recibir por ejemplo estado_ebay, un dato que sé que llega al final del proceso.

Pero ya no se donde buscar...

 
Respondido : 11/05/2016 7:17 am
Xarlie
(@xarlie)
Respuestas: 2677
Famed Member
 

madre mía... andas perdidísimo 😀
product_stock, es la llamada a un método del web service a través de la api correspondiente, en concreto al método update, donde se le pasan determinados atributos, sku, qty... esas cosas
No se, creo que la forma en la que estás intentando buscar el proceso no es el correcto...

Soporte profesional para Magento: www.estatiko.com

 
Respondido : 11/05/2016 4:57 pm
Interestellar
(@interestellar)
Respuestas: 19
Eminent Member
Topic starter
 

Xarlie wrote: madre mía... andas perdidísimo 😀
product_stock, es la llamada a un método del web service a través de la api correspondiente, en concreto al método update, donde se le pasan determinados atributos, sku, qty... esas cosas
No se, creo que la forma en la que estás intentando buscar el proceso no es el correcto...

Como me sale aviso de Spam envio el mensaje en una imagen.

 
Respondido : 12/05/2016 7:46 am
Xarlie
(@xarlie)
Respuestas: 2677
Famed Member
 

La tabla de eav_attribute es donde se guardan todos los atributos de Magento, de todo tipo: productos, categorías, clientes...
Si existe el atributo entonces en tu panel lo encontrarás en catalogo > Attributes > Manage Attributes

Sobre lo que indicas de catalog_product_entity_varchar, lo mejor es que primero entiendas que las bases de datos de Magento funcionan como EAV, por lo que lo primero has cogido la entidad, después estás cogiendo el atributo correspondiente y en su tipo (varchar) y te falta el valor asociado.

Con el anterior mensaje quería decirte que estás haciéndolo de una forma extraña, larga, difícil, complicada... y cientos de adjetivos similares. Primero deberías intentar entender como funciona un poco Magento y después intentar hacer lo que vas a modificar, porque veo que vas a tocar en algún sitio y la tienda se va a ir al traste 🙂

Soporte profesional para Magento: www.estatiko.com

 
Respondido : 12/05/2016 10:18 pm
Interestellar
(@interestellar)
Respuestas: 19
Eminent Member
Topic starter
 

Xarlie wrote: La tabla de eav_attribute es donde se guardan todos los atributos de Magento, de todo tipo: productos, categorías, clientes...
Si existe el atributo entonces en tu panel lo encontrarás en catalogo > Attributes > Manage Attributes

Sobre lo que indicas de catalog_product_entity_varchar, lo mejor es que primero entiendas que las bases de datos de Magento funcionan como EAV, por lo que lo primero has cogido la entidad, después estás cogiendo el atributo correspondiente y en su tipo (varchar) y te falta el valor asociado.

Con el anterior mensaje quería decirte que estás haciéndolo de una forma extraña, larga, difícil, complicada... y cientos de adjetivos similares. Primero deberías intentar entender como funciona un poco Magento y después intentar hacer lo que vas a modificar, porque veo que vas a tocar en algún sitio y la tienda se va a ir al traste 🙂

Gracias, lo digo completamente en serio intento hacer esto con el máximo cuidado posible.

Ayer probé a insertar el dato en un producto a modo de prueba en la tabla catalog_product_entity_varchar, el dato se rellena y ya tengo un código para actualizar la marca de unos 5000 articulos.

He probado el codigo en una BBDD en Wampserver, pero sin embargo aun no lo he hecho porque el insert lo hace sin control.


INSERT INTO bbdd_mgnt.catalog_product_entity_varchar ('entity_type_id',' attribute_id', 'store_id', 'entity_id', 'value')
SELECT (4, 144, 0, entidades.entity_id, csv.marca)
FROM bbdd_gestion.csvmagento as csv LEFT JOIN bbdd_mgnt.catalog_product_entity_varchar AS entidades
ON csv.ean = entidades.value
WHERE entidades.attribute_id = 134

El problema de esta query es que insertaría el dato indiscriminadamente.

Estoy mirando ON DUPLICATE KEY UPDATE pero el ON ya lo estoy usando para hacer el left join.

 
Respondido : 13/05/2016 5:58 am
Interestellar
(@interestellar)
Respuestas: 19
Eminent Member
Topic starter
 

Ya hay dos backups, una en un CSV y otra en .sql

Ahora corrigeme si me equivoco, cuando crear un campo nuevo, basicamente lo que se inserta es una nueva columna en attributes.

Lo primero se le indica el tipo de entidad, si es 4 buscara en la tabla de los varchar y no en los longs ni los text.

Luego tambien esta el attribute_id para interpretar en que campo meterlo en este caso 144 y por otro lado el entity_id que coincide con el producto.

Me parece una forma muy inteligente de haber diseñado la Base de Datos sobretodo para que se puedan incorporar nuevas funcionalidades en el futuro.

 
Respondido : 13/05/2016 6:29 am