dostoyevski Posted October 6, 2021 Share Posted October 6, 2021 (edited) hola, queria añadir una funcionalidad a prestashop de modo que cuando se pulse el boton pagar me actualizase una base de datos externa. ¿qué hook deberia utilizar para lanzar esto? o como deberia programar esto? un saludo. Edited October 6, 2021 by dostoyevski (see edit history) Link to comment Share on other sites More sharing options...
JulienPct Posted October 6, 2021 Share Posted October 6, 2021 Hello, In my opinion, for your need, you should first look for the order confirmation TPL (where you have the order confirmation button). Once you have found this TPL, you have to find in which controller it is called. You can then override it and add a database update function when the button is clicked. Is this what you need? Link to comment Share on other sites More sharing options...
dostoyevski Posted October 6, 2021 Author Share Posted October 6, 2021 he encontrado el archivo order-confirmation.tpl pero no logro encontrar el controlador. Este es el codigo del archivo order-confirmation.tpl: {extends file='page.tpl'} {block name='page_content_container' prepend} <section id="content-hook_order_confirmation" class="card"> <div class="card-block"> <div class="row"> <div class="col-md-12"> {block name='order_confirmation_header'} <h3 class="h1 card-title"> <i class="material-icons rtl-no-flip done"></i>{l s='Your order is confirmed' d='Shop.Theme.Checkout'} </h3> {/block} <p> {l s='An email has been sent to your mail address %email%.' d='Shop.Theme.Checkout' sprintf=['%email%' => $customer.email]} {if $order.details.invoice_url} {* [1][/1] is for a HTML tag. *} {l s='You can also [1]download your invoice[/1]' d='Shop.Theme.Checkout' sprintf=[ '[1]' => "<a href='{$order.details.invoice_url}'>", '[/1]' => "</a>" ] } {/if} </p> {block name='hook_order_confirmation'} {$HOOK_ORDER_CONFIRMATION nofilter} {/block} </div> </div> </div> </section> {/block} {block name='page_content_container'} <section id="content" class="page-content page-order-confirmation card"> <div class="card-block"> <div class="row"> {block name='order_confirmation_table'} {include file='checkout/_partials/order-confirmation-table.tpl' products=$order.products subtotals=$order.subtotals totals=$order.totals labels=$order.labels add_product_link=false } {/block} {block name='order_details'} <div id="order-details" class="col-md-4"> <h3 class="h3 card-title">{l s='Order details' d='Shop.Theme.Checkout'}:</h3> <ul> <li>{l s='Order reference: %reference%' d='Shop.Theme.Checkout' sprintf=['%reference%' => $order.details.reference]}</li> <li>{l s='Payment method: %method%' d='Shop.Theme.Checkout' sprintf=['%method%' => $order.details.payment]}</li> {if !$order.details.is_virtual} <li> {l s='Shipping method: %method%' d='Shop.Theme.Checkout' sprintf=['%method%' => $order.carrier.name]}<br> <em>{$order.carrier.delay}</em> </li> {/if} </ul> </div> {/block} </div> </div> </section> {block name='hook_payment_return'} {if ! empty($HOOK_PAYMENT_RETURN)} <section id="content-hook_payment_return" class="card definition-list"> <div class="card-block"> <div class="row"> <div class="col-md-12"> {$HOOK_PAYMENT_RETURN nofilter} </div> </div> </div> </section> {/if} {/block} {block name='customer_registration_form'} {if $customer.is_guest} <div id="registration-form" class="card"> <div class="card-block"> <h4 class="h4">{l s='Save time on your next order, sign up now' d='Shop.Theme.Checkout'}</h4> {render file='customer/_partials/customer-form.tpl' ui=$register_form} </div> </div> {/if} {/block} {block name='hook_order_confirmation_1'} {hook h='displayOrderConfirmation1'} {/block} {block name='hook_order_confirmation_2'} <section id="content-hook-order-confirmation-footer"> {hook h='displayOrderConfirmation2'} </section> {/block} {/block} Link to comment Share on other sites More sharing options...
JulienPct Posted October 7, 2021 Share Posted October 7, 2021 Normally it should be called in the ps_checkout module Link to comment Share on other sites More sharing options...
ventura Posted October 7, 2021 Share Posted October 7, 2021 Lo mejor es que utilices un módulo nuevo en el que utilices el hook hookActionValidateOrder para establecer la lógica de funcionamiento Link to comment Share on other sites More sharing options...
dostoyevski Posted October 8, 2021 Author Share Posted October 8, 2021 On 10/7/2021 at 12:41 PM, ventura said: Lo mejor es que utilices un módulo nuevo en el que utilices el hook hookActionValidateOrder para establecer la lógica de funcionamiento asi lo he hecho. Este es el codigo completo de mi modulo (lo cree con el generador de modulos de prestashop:https://validator.prestashop.com/generator) El caso es que no me actualiza la base de datos cuando finalizo una compra. La conexion y el update de la base de datos lo he comprobado con otro hook y me la actualiza sin problemas. if (!defined('_PS_VERSION_')) { exit; } class MiModulo extends Module { protected $config_form = false; public function __construct() { $this->name = 'miModulo'; $this->tab = 'shipping_logistics'; $this->version = '1.0.0'; $this->author = 'luilli'; $this->need_instance = 0; /** * Set $this->bootstrap to true if your module is compliant with bootstrap (PrestaShop 1.6) */ $this->bootstrap = true; parent::__construct(); $this->displayName = $this->l('miModulo'); $this->description = $this->l('este es mi modulo este es mi modulo este es mi modulo este es mi modulo'); $this->ps_versions_compliancy = array('min' => '1.6', 'max' => _PS_VERSION_); } /** * Don't forget to create update methods if needed: * http://doc.prestashop.com/display/PS16/Enabling+the+Auto-Update */ public function install() { Configuration::updateValue('MIMODULO_LIVE_MODE', false); return parent::install() && $this->registerHook('header') && $this->registerHook('backOfficeHeader') && $this->registerHook('actionPaymentConfirmation') && $this->registerHook('displayPayment') && $this->registerHook('displayLeftColumn') && /*esto lo añadi yo*/ $this->registerHook('actionValidateOrder') && $this->registerHook('displayPaymentReturn'); } public function uninstall() { Configuration::deleteByName('MIMODULO_LIVE_MODE'); return parent::uninstall(); } /** * Load the configuration form */ public function getContent() { /** * If values have been submitted in the form, process. */ if (((bool)Tools::isSubmit('submitMiModuloModule')) == true) { $this->postProcess(); } $this->context->smarty->assign('module_dir', $this->_path); $output = $this->context->smarty->fetch($this->local_path.'views/templates/admin/configure.tpl'); return $output.$this->renderForm(); } /** * Create the form that will be displayed in the configuration of your module. */ protected function renderForm() { $helper = new HelperForm(); $helper->show_toolbar = false; $helper->table = $this->table; $helper->module = $this; $helper->default_form_language = $this->context->language->id; $helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG', 0); $helper->identifier = $this->identifier; $helper->submit_action = 'submitMiModuloModule'; $helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false) .'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name; $helper->token = Tools::getAdminTokenLite('AdminModules'); $helper->tpl_vars = array( 'fields_value' => $this->getConfigFormValues(), /* Add values for your inputs */ 'languages' => $this->context->controller->getLanguages(), 'id_language' => $this->context->language->id, ); return $helper->generateForm(array($this->getConfigForm())); } /** * Create the structure of your form. */ protected function getConfigForm() { return array( 'form' => array( 'legend' => array( 'title' => $this->l('Settings'), 'icon' => 'icon-cogs', ), 'input' => array( array( 'type' => 'switch', 'label' => $this->l('Live mode'), 'name' => 'MIMODULO_LIVE_MODE', 'is_bool' => true, 'desc' => $this->l('Use this module in live mode'), 'values' => array( array( 'id' => 'active_on', 'value' => true, 'label' => $this->l('Enabled') ), array( 'id' => 'active_off', 'value' => false, 'label' => $this->l('Disabled') ) ), ), array( 'col' => 3, 'type' => 'text', 'prefix' => '<i class="icon icon-envelope"></i>', 'desc' => $this->l('Enter a valid email address'), 'name' => 'MIMODULO_ACCOUNT_EMAIL', 'label' => $this->l('Email'), ), array( 'type' => 'password', 'name' => 'MIMODULO_ACCOUNT_PASSWORD', 'label' => $this->l('Password'), ), ), 'submit' => array( 'title' => $this->l('Save'), ), ), ); } /** * Set values for the inputs. */ protected function getConfigFormValues() { return array( 'MIMODULO_LIVE_MODE' => Configuration::get('MIMODULO_LIVE_MODE', true), 'MIMODULO_ACCOUNT_EMAIL' => Configuration::get('MIMODULO_ACCOUNT_EMAIL', '[email protected]'), 'MIMODULO_ACCOUNT_PASSWORD' => Configuration::get('MIMODULO_ACCOUNT_PASSWORD', null), ); } /** * Save form data. */ protected function postProcess() { $form_values = $this->getConfigFormValues(); foreach (array_keys($form_values) as $key) { Configuration::updateValue($key, Tools::getValue($key)); } } /** * Add the CSS & JavaScript files you want to be loaded in the BO. */ public function hookBackOfficeHeader() { if (Tools::getValue('module_name') == $this->name) { $this->context->controller->addJS($this->_path.'views/js/back.js'); $this->context->controller->addCSS($this->_path.'views/css/back.css'); } } /** * Add the CSS & JavaScript files you want to be added on the FO. */ public function hookHeader() { $this->context->controller->addJS($this->_path.'/views/js/front.js'); $this->context->controller->addCSS($this->_path.'/views/css/front.css'); } public function hookActionPaymentConfirmation() { /* Place your code here. */ } public function hookDisplayPayment() { /* Place your code here. */ } public function hookDisplayPaymentReturn() { /* Place your code here. */ } public function hookDisplayLeftColumn($params) /*esto tambien lo añadi yo*/ { /*$nombre="desparafusador"; $db = new DbMySQLi("localhost","u117490907_ferreteria", "1*Ouroverde","u117490907_ferreteria",true); $db->Execute('UPDATE productos SET nombre="'.$nombre.'" WHERE id = 1'); $item_name = $db->getValue('SELECT nombre FROM productos WHERE id = 1'); return($item_name);*/ } public function hookActionValidateOrder($params) /*esto tambien lo añadi yo*/ { $db = new DbMySQLi("localhost","u117490907_ferreteria", "1*Ouroverde","u117490907_ferreteria",true); $db->Execute('UPDATE productos SET nombre="destornillador" WHERE id = 1'); /*return(true);*/ } Link to comment Share on other sites More sharing options...
Yelish Posted October 25, 2021 Share Posted October 25, 2021 Yo usaría un módulo, si no puedes programarlo, puedes comprarlo. Un saludo, Antonio B. Link to comment Share on other sites More sharing options...
LabelGrup Networks Posted October 25, 2021 Share Posted October 25, 2021 Buenas, Tienes el siguiente Hook: actionObject<ObjectName>AddAfter Con este Hook, modificando el parámetro <ObjectName> por Order (actionObjectOrderAddAfter), se te llamará una vez el objeto se haya creado, por lo que en ese momento podrás intervenir recogiendo los datos de este y enviándolos a la base de datos que desees. Espero que te sea de ayuda, Saludos! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now