PDA

Ver la Versión Completa : Añadir botón (ajax o jquery) a referafriends



davidselo
11-02-2010, 07:08 PM
Buenas, pues estoy empezando en el mundo de desarrollador para magento y tengo diversos problemas.Necesito añadir un botón a referafriend en la parte en la cual te salen los amigos que tienes invitados,este boton al pulsarlo debe de eliminar una invitación obsoleta a un amigo, que supongo que se realizará borrandola de la tabla invite de la base de datos y refrescar la página. tengo diversas dudas de donde colocar el código ajax y como llamar desde el código ajax a la funcion php y su posterior refresco de la página en la que el amigo eliminado ya no aparezca. Gracias de antemano.

OSdave
11-03-2010, 09:46 AM
"código ajax" en sí, no existe: ajax significa asincronada, o sea que desde el lado cliente (en general javascript) llamas a una tecnologia servidor (en este caso php) sin recargar la pagina.
el codigo javascript lo pones en un fichero .js que incluyes desde el layout (.xml) en la(s) pagina(s) relevante(s).
este codigo hace una llamada asincronada a un controlador (php, dentro del directorio controllers del modulo) que instancia el bloque (php dentro del directorio blocks del modulo) que a su vez llama el modelo y ejecuta el script (que va a eliminar la invitacion de la bbdd) y devuelve la respuesta que el codigo javascript pondra en algun sitio de la pagina.
estas son las ideas generales, si tienes preguntas mas precisas te podremos ayudar mejor.

Indica la version de magento que usas en tu firma. gracias.

davidselo
11-03-2010, 12:48 PM
Bueno ante todo agradecer que me hayas contestado y de una manera tan completa para que asi poco a poco me vaya enterando de como van interactuando los diversos módulos y nada que me han surguido algunas dudas, que te expresaré a continuación y de paso hago una especie de seudocódigo:

directorio-->JS/MyExtension.js : ¿Bueno pues aquí como se llama a la función del index controller? la funcion determinada se incluye en indexcontroller.php con un tereminado nombre y acabando en Action y posteriormente se hace una llamada desde Js con el mismo nombre.Le deberia de pasar como parámetro el id de la invitación

directorio-->controllers/indexController.php: aqui ponemos acciones que se llaman nombreDeLaAccionAction() y esta acción es posible de ejecutarla poniendo la url en el navegador miSitio/MyExtension/index/nombreDeLaAccion. Bueno pues esta accion puede que sea desencadenada al meter manualmente la URL??? podrian acceder y eliminar clientes.
en este archivo se podría eliminar la tupla de la siguiente manera:
public function deleteFirstPostAction() {
$blogpost = Mage::getModel('weblog/blogpost');
$blogpost->load(1);
$blogpost->delete();
echo 'post removed';
}

directorio-->Blocks/archivo.php como se llama al modelo? el modelo debe de estas creado en config.xml , este archivo me devolvería el control al scrip para que con las modificaciones realizadas en el servidor refresque los componentes determinados de la página.

Bueno perdona por el avasalle de preguntas y la des organización,pero así es como tengo los conceptos actualmente en la cabeza, si me pudieras aclarar estas cuestiones te estaré muy agradecido, de echo cuando lo saque lo pondré en el foro explicado paso a paso para gente que este empezando le sirva de referencia. Gracias de antemano

davidselo
11-03-2010, 01:24 PM
Bueno aun nose donde puedo poner la version de magento, asi que la dejo aqui con mensaje, la version es magento 1.4.1.1.

OSdave
11-03-2010, 02:27 PM
pues lo que estas preguntando es basicamente como programar con Magento... Para darte una idea, antes de ponerme he pasado un año a estudiar el Zend Framework, revisar conceptos de MVC/POO/... y todavia todos los dias leo todo lo que puedo encontrar.
Para empezar, asumiendo que ya estas familiarizado, hummm, mejor dicho, que dominas POO y MVC, puedes empezar con la serie de Alan Storm: Magento for Developpers (http://www.magentocommerce.com/knowledge-base/entry/magento-for-dev-part-1-introduction-to-magento).

Y para responderte, el directorio js/ sirve para guardar librerias (jQuery, shadowbox, etc...), no tus scripts. Los tuyos los pones en el skin.
La funcion se llama exactamente como si fuese una llamada normal, por la URL (lo que describes en la primera linea del paragrafo siguiente)
Los controllers sirven a esto, relacionar una URL con el contenido que haya que generar, las acciones que haya que ejecutar.
El modelo en Magento se instancia con
Mage::getModel('module/model')

OSdave
11-03-2010, 02:29 PM
Bueno aun nose donde puedo poner la version de magento, asi que la dejo aqui con mensaje, la version es magento 1.4.1.1.el enlace "Perfil", arriba del todo, y despues en "Acciones del foro" -> "Editar perfil" -> "Editar firma"

davidselo
11-03-2010, 05:05 PM
Bueno, no me cansaré de dar las gracias.Nada pues ahora voy a ponerme a realizar un nuevo módulo paso a paso y a intentar añadir mi botón que borre algo de una base de datos, ya que el manual que me comentas ya me lo leí hace unos días. Y todas las dudas que me vayan surgiendo las voy poniendo aquí y a ver si voy sacándolo adelante poco a poco. Aun no se por donde empezaré. por cierto algún tutorial mas aparte del ya comentado. y que tenga una calidad similar( bastante buena).

davidselo
11-08-2010, 07:45 PM
Bueno pues dije que cuando lo sacara lo pondría como lo había sacado. La verdad que lo he sacado de una forma que no me termina de convencer mucho, pero bueno cuando tenga mas conocimientos ya podre programarlo bajo ajax.

indexControler:
Aquí creo un Action que capture por POST el id de la persona que voy a borrar, creando el modelo y eso, borramos el cliente de la tabla y posteriormente redirijo a la página conde tengo el botón, así se refresca y mostraré la página sin el elemento borrado.

Página donde quiero poner el botón:
aquí pongo el botón en un formulario que llama a la URL de la Action, a esta Url le pasamos por POST el id de la persona que voy a borrar.

Porque no me gusta esta solución:
Pues porque lo hago mediante redirecciones de la URL, lo que me proporciona un poco de lentitud, y mi fin es optimizar magento para que funcione más rápido.

Mi odisea : si yo en el botón en vez de llamar a la URL, hubiera puesto un onclick, que lo recibiera el archivo JS, como este archivo se comunicaría con el action para eliminar el elemento sin necesidad de recargar la página y posteriormente como devuelvo el control al JS para que me modifique los elementos de la página.
Asi que por favor , si alguien sabe como funciona esto y me puede explicar un poco como funciona le estaré agradecido.

OSdave
11-09-2010, 03:05 PM
no tienes que poner un onclick, de hecho es mejor no ponerlo ya que no es un atributo valido. mejor le pones un id y con codigo js cambias el funcionamiento de este boton para que funcione de manera ayncrona.
La idea general te la he explicado en mi primera respuesta: para aprender como hacerlo practicamente, hay muchissimos tutoriales en la web.

davidselo
11-12-2010, 12:42 PM
Buenas, aquí sigo buscando algún tutorial que me explique como utilizar ajax en magento, he tomado uno que he probado y no me ha convencido del todo, sera porque aun no lo entiendo bien, aquí os los dejo por si a vosotros os sirven:
http://subesh.com.np/2009/11/working-with-ajax-in-magento/

Mi intención es colocar un botón en un "archivo.phtml" que este llame a un Action que haga las operaciones sobre la base de datos , posteriormente que me devuelva el control al ajax y que yo modifique las propiedades de la página.

Si alguien me puede pasar un tutorial para tontos, por favor que lo ponga por aquí, ya nose si es complicado o soy yo el tonto. Gracias

davidselo
11-29-2010, 07:40 PM
bueno pues después de un tiempo desarrollando en otras cosas, he podido retomar este tema, y la solución que he encontrado es lanzar una petición desde el código ajax a mi action. aqui os dejo un ejemplo.
código JS:
var myAjax = new Ajax.Request(
"../myAccion",
{method: 'get'}
);

davidselo
12-13-2010, 10:32 AM
Bueno después de un tiempo luchando con esto ya estoy dando los retoques finales para terminar la implementación. El caso es que me queda una cosilla por ahi, quiero recargar la página desde un botón, me gustaria saber a que función debo de llamar para esto. supongo que sera alguna parecida a this->renderlayout();

OSdave
12-13-2010, 11:05 AM
$this->renderLayout() renderiza el layout (vaya!). de lo que dices que quieres recargar la pagina, y dado el resto del hilo, entiendo que lo quieres hacer en javascript: entonces un simple window.location.reload() lo haria

davidselo
12-13-2010, 11:39 AM
Muchas gracias, aveces cambio el chip, me pongo a trabajar en base a magento e intento hacer todo con funciones de magento olvidando mis épocas de php puro y duro.