Jump to content

Iván Ros Navarro

Members
  • Posts

    20
  • Joined

  • Last visited

About Iván Ros Navarro

  • Birthday 10/03/1988

Profile Information

  • Location
    Murcia
  • First Name
    Iván
  • Last Name
    Ros
  • Activity
    Developer

Recent Profile Visitors

550 profile views

Iván Ros Navarro's Achievements

Newbie

Newbie (1/14)

  • Dedicated Rare
  • Conversation Starter Rare
  • First Post Rare
  • Collaborator Rare
  • One Year In Rare

Recent Badges

3

Reputation

  1. Buenos días. Tengo actualmente Github y hago deploy con un archivo php dentro del server que comprueba las public key y private key y hace push de los cambios. Sin embargo con Bitbucket no lo logro porque no me facilita la private key y me quedo ahí. He visto también que Bitbucket tiene Pipelines pero no sé muy bien cómo funciona. Estoy algo verde con esto de los deploy y el git en general y me cuesta llegar a una solución. ¿Alguien puede ayudarme con esto? Gracias. Un saludo.
  2. Hola, @Frank_C La forma ideal es montar un nuevo campo en la tabla ps_attribute, añadirlo en la class Attribute.php y luego cambiar los tpl (product.tpl y product-list.tpl) para que comprueben este nuevo dato antes de mostrar el atributo. Algo rápido es meterse directamente en los tpl arriba indicados, buscar el tipo de variante que es tu atributo talla (color, select, radio) y meterle un if que compruebe el name del atributo talla para que cuando sea "S", no pintarlo. Como depende del tema que tengas instalado, no puedo darte un código a probar.
  3. Hola. Me acaba de surgir la necesidad y he encontrado la nueva ubicación de las tiendas físicas (almacenes). Imagino que ya lo habrás solucionado pero ahora está en: Configurar > "Parámetros de la tienda" > "Contacto" >> "Tiendas". Un saludo.
  4. Buenas tardes. A mí me pasó ayer. No han cambiado mucho, no. No veas para descubrir que era el módulo de MRW. No muestra error ni deja rastro en logs. Lo ponía en modo DEBUG y seguía igual y no me llegaba a añadir nada a los logs. Tuve que contratar a un experto en Prestashop y tras horas y horas llegamos a ver que mrwtracking hacía peticiones y no le devolvía nada y esperaba hasta el límite de tiempo. Si le pones límite 2 horas, estará 2 horas y te saltará el 'Connection timeout'. He intentado modifciar el código del mrwtracking pero no hay forma de hacerlo funcionar ni de que solo se muestre en el controller AdminMrwController (para intentar "controlarlo"). Sigo a la espera de MRW para que me den solución. Mientras, mi solución es dejar activo el módulo mrwcarrier para poder seguir creando etiquetas y el de mrwtracking lo he dejado renombrado a la espera de noticias. Tampoco es que me haga especialmente falta, pero está bien saber qué pedidos están entregados sin tener que ir su web.
  5. Hi!! I just solved my problem. In case anyone helps, you must add in [ps_] cms_category the column id_webservice_account and assign an active id (in my case 1). I don't know if it's the best solution, but it works. Also serves for [ps_]lang and [ps_]currency when shows the same issue. Thanks! Regards!
  6. Buenas tardes, Yo he conseguido arreglar el problema. En el fichero /modules/redsysoficial/redsysoficial.php busca la cadena $this->html y cambiala por: $this->_html Y la cadena: $this->post_errors Y cambiala por: $this->$_postErrors Es lo que tiene hacer las cosas con prisas, crean la variable de una forma y la usan de otra. Espero que os sirva. Un saludo!
  7. Hi! After many fixes, he could have Prestashop 1.7.6.0 working with the Warehouse theme. However I still have one to fix and I don't know how to do it. When I enter the admin panel and try to access "CMS-Pages" I get the exception: An exception occurred while executing 'SELECT cc.`id_cms_category`, cc.`id_parent`, cc.`active`, cc.`position`, ccl.`name`, ccl.`description` FROM ps_cms_category cc LEFT JOIN ps_cms_category_lang ccl ON ccl.`id_cms_category` = cc.`id_cms_category` INNER JOIN ps_cms_category_shop ccs ON ccs.`id_cms_category` = cc.`id_cms_category` WHERE (ccl.`id_lang` = ?) AND (ccl.`id_shop` IN (?)) AND (ccs.`id_shop` IN (?)) AND (cc.`id_parent` = ?) GROUP BY cc.`id_cms_category` ORDER BY id_webservice_account asc LIMIT 50 OFFSET 0' with params [1, 1, 1, 1]: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'id_webservice_account' in 'order clause' The SQL statement is wrong since it should be SELECT cc.`id_cms_category`, cc.`id_parent`, cc.`active`, cc.`position`, ccl.`name`, ccl.`description` FROM ps_webservice_account wa, ps_cms_category cc LEFT JOIN ps_cms_category_lang ccl ON ccl.`id_cms_category` = cc.`id_cms_category` INNER JOIN ps_cms_category_shop ccs ON ccs.`id_cms_category` = cc.`id_cms_category` WHERE (ccl.`id_lang` = ?) AND (ccl.`id_shop` IN (?)) AND (ccs.`id_shop` IN (?)) AND (cc.`id_parent` = ?) GROUP BY cc.`id_cms_category` ORDER BY wa.id_webservice_account asc LIMIT 50 OFFSET 0 But I don't know where I can change it. Can you help me? Prestashop 1.7.6.0 updated from Prestashop 1.6.0.14 PHP version 7.2 (I have also done tests with 7.1) Thanks!
  8. Tienes que crearlo tú, se trata de un override, son modificaciones en Prestashop. Crea un archivo que se llame ProductController.php y copia y pega el contenido que menciono arriba en mi edición. Debería funcionarte Yika.
  9. Es un post antiguo, pero por si a alguien lo busca (como ha sido mi caso), el comando que me sirve es: curl -s http://www.tuwebcom/modules/gsitemap/gsitemap-cron.php?token=12345678&id_shop=1 Si tenéis una web con HTTPS es necesario añadirle -k, quedando así curl -k -s http://www.tuwebcom/modules/gsitemap/gsitemap-cron.php?token=12345678&id_shop=1 Un saludo.
  10. Por eso mencionaba lo de novato. Gracias ventura, la verdad es que sí es preferible hacerlo mediante override. Voy a hacerlo en mi página.
  11. Buenos días, Prestashop está mejorando mucho en optimización SEO, pero todavía está un poco verde en algunos aspectos y, a pesar de no ser un experto en SEO, se me ha dado la necesidad de redirigir productos que están descatalogados a su categoría y no a un producto en específico, dado que pueden darse casos en los que un artículo puede no ser lo suficientemente parecido a otro para "suplantarlo" y, creo más conveniente que sea el propio cliente el que elija otro artículo dentro de la misma categoría que el artículo descatalogado. Pues bien, aquí tenéis un pequeño aporte que puede servirle a algunos. En el archivo /controllers/front/ProductController.php, sobre la línea 108 hay que comentar o eliminar esta línea para los casos en los que no tenga un artículo asociado no establezca la redirección 404 y quede la redirección 301 if (!$this->product->id_product_redirected || $this->product->id_product_redirected == $this->product->id) $this->product->redirect_type = '404'; y cambiadla por este código para que cuando no tenga redirección 301 ni 302 sea 404 if ($this->product->redirect_type != '301' && $this->product->redirect_type != '302') $this->product->redirect_type = '404'; Con esto hecho, vamos a la línea 112, donde tenemos este código en la función "public function init()": switch ($this->product->redirect_type) { case '301': header('HTTP/1.1 301 Moved Permanently'); header('Location: '.$this->context->link->getProductLink($this->product->id_product_redirected)); exit; break; case '302': header('HTTP/1.1 302 Moved Temporarily'); header('Cache-Control: no-cache'); header('Location: '.$this->context->link->getProductLink($this->product->id_product_redirected)); exit; break; case '404': default: header('HTTP/1.1 404 Not Found'); header('Status: 404 Not Found'); $this->errors[] = Tools::displayError('This product is no longer available.'); break; } Cambiamos el caso 301 para que quede de la siguiente forma: case '301': if ($this->product->id_product_redirected){ header('HTTP/1.1 301 Moved Permanently'); header('Location: '.$this->context->link->getProductLink($this->product->id_product_redirected)); } else { header('HTTP/1.1 301 Moved Permanently'); header('Location: '.$this->context->link->getCategoryLink($this->product->id_category_default)); } exit; break; Comprobamos si tenemos producto relacionado ("id_product_redirected"). Si no tenemos producto relacionado, lo redirigimos a la categoría del producto obteniendo el link con "getCategoryLink" y especificando el Id de la categoría del producto con "id_category_default". Es muy sencillo pero como buen novato tardé bastante en realizarlo. Se puede hacer lo mismo en el 302 si se necesita. Aún así me falta perfeccionarlo para que incluya un mensaje que informe al cliente de que el producto está descatalogado y que se le muestra una serie de artículos de su misma categoría. Cuando lo tenga os lo pondré también, aunque si hay alguien que dé con la solución antes que yo y lo pone, agradecido. Espero os sirva. Un saludo, Iván Ros EDITO: Como bien ha dicho ventura, esto es mejor hacerlo mediante override. Aquí lo tenéis, el archivo sería /override/controllers/front/ProductController.php. Recordad eliminar el archivo /cache/class_index.php después de la modificación para asegurarnos de que coja bien el override. <?php class ProductController extends ProductControllerCore { /** * Initialize product controller * @see FrontController::init() */ public function init() { parent::init(); if ($id_product = (int)Tools::getValue('id_product')) $this->product = new Product($id_product, true, $this->context->language->id, $this->context->shop->id); if (!Validate::isLoadedObject($this->product)) { header('HTTP/1.1 404 Not Found'); header('Status: 404 Not Found'); $this->errors[] = Tools::displayError('Product not found'); } else { $this->canonicalRedirection(); /* * If the product is associated to the shop * and is active or not active but preview mode (need token + file_exists) * allow showing the product * In all the others cases => 404 "Product is no longer available" */ if (!$this->product->isAssociatedToShop() || !$this->product->active) { if (Tools::getValue('adtoken') == Tools::getAdminToken('AdminProducts'.(int)Tab::getIdFromClassName('AdminProducts').(int)Tools::getValue('id_employee')) && $this->product->isAssociatedToShop()) { // If the product is not active, it's the admin preview mode $this->context->smarty->assign('adminActionDisplay', true); } else { $this->context->smarty->assign('adminActionDisplay', false); if ($this->product->redirect_type != '301' && $this->product->redirect_type != '302') $this->product->redirect_type = '404'; switch ($this->product->redirect_type) { case '301': if ($this->product->id_product_redirected){ header('HTTP/1.1 301 Moved Permanently'); header('Location: '.$this->context->link->getProductLink($this->product->id_product_redirected)); } else { header('HTTP/1.1 301 Moved Permanently'); header('Location: '.$this->context->link->getCategoryLink($this->product->id_category_default)); } exit; break; case '302': header('HTTP/1.1 302 Moved Temporarily'); header('Cache-Control: no-cache'); header('Location: '.$this->context->link->getProductLink($this->product->id_product_redirected)); exit; break; case '404': default: header('HTTP/1.1 404 Not Found'); header('Status: 404 Not Found'); $this->errors[] = Tools::displayError('This product is no longer available.'); break; } } } elseif (!$this->product->checkAccess(isset($this->context->customer->id) && $this->context->customer->id ? (int)$this->context->customer->id : 0)) { header('HTTP/1.1 403 Forbidden'); header('Status: 403 Forbidden'); $this->errors[] = Tools::displayError('You do not have access to this product.'); } else { // Load category $id_category = false; if (isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER'] == Tools::secureReferrer($_SERVER['HTTP_REFERER']) // Assure us the previous page was one of the shop && preg_match('~^.*(?<!\/content)\/([0-9]+)\-(.*[^\.])|(.*)id_(category|product)=([0-9]+)(.*)$~', $_SERVER['HTTP_REFERER'], $regs)) { // If the previous page was a category and is a parent category of the product use this category as parent category $id_object = false; if (isset($regs[1]) && is_numeric($regs[1])) $id_object = (int)$regs[1]; elseif (isset($regs[5]) && is_numeric($regs[5])) $id_object = (int)$regs[5]; if ($id_object) { $referers = array($_SERVER['HTTP_REFERER'],urldecode($_SERVER['HTTP_REFERER'])); if (in_array($this->context->link->getCategoryLink($id_object), $referers)) $id_category = (int)$id_object; elseif (isset($this->context->cookie->last_visited_category) && (int)$this->context->cookie->last_visited_category && in_array($this->context->link->getProductLink($id_object), $referers)) $id_category = (int)$this->context->cookie->last_visited_category; } } if (!$id_category || !Category::inShopStatic($id_category, $this->context->shop) || !Product::idIsOnCategoryId((int)$this->product->id, array('0' => array('id_category' => $id_category)))) $id_category = (int)$this->product->id_category_default; $this->category = new Category((int)$id_category, (int)$this->context->cookie->id_lang); if (isset($this->context->cookie) && isset($this->category->id_category) && !(Module::isInstalled('blockcategories') && Module::isEnabled('blockcategories'))) $this->context->cookie->last_visited_category = (int)$this->category->id_category; } } } }
  12. Muchas gracias lastapril, sin embargo mi Prestashop es muy especial. Los transportistas los tengo con rangos de kg no de precios, lo que me "roba" otra solución a mi problema... Se me complica tanto la cosa que no creo que exista una solución al problema si no cambio nada antes. Aun así, gracias por contestar e intentar ayudar.
  13. Buenos días, os explico mi problema, tengo un programa que me sincroniza Prestashop con el ERP de la empresa y debido a esto algunas de las funciones Prestashop no puedo utilizarlas. Tengo ahora la necesidad de poner que a partir de 150€ los portes son gratuitos pero solo para algunos transportistas, para otros no. ¿Esto se puede hacer? Teniendo configurado en Preferencias el "envio gratuito a partir de" 150€, todos los transportistas consiguen esa gratuidad, que es lo que no quiero. No puedo tocar las Reglas de Catálogo por el programa que os digo. ¿Alguna idea? Gracias. Un saludo
×
×
  • Create New...