Jump to content

Mostrar mismo texto en todos productos y poder cambiarlo de una vez


davidddp

Recommended Posts

Me gustaría mostrar un texto siempre igual en todos mis productos. Pero este texto me gustaría cambiarlo cada mes. ¿Como puedo hacer esto sin tener que añadir el texto en la descripción de todos mis productos?

 

PD: Si se me permite una analogía. Quiero algo como son los Shortcodes de WP, en los cuales me creo uno y añadiendo el código corto donde quiera, aparecerá dicho fragmento.

 

Uso PS1.7

Edited by davidddp (see edit history)
Link to comment
Share on other sites

Me gustaría mostrar un texto siempre igual en todos mis productos. Pero este texto me gustaría cambiarlo cada mes. ¿Como puedo hacer esto sin tener que añadir el texto en la descripción de todos mis productos?

 

PD: Si se me permite una analogía. Quiero algo como son los Shortcodes de WP, en los cuales me creo uno y añadiendo el código corto donde quiera, aparecerá dicho fragmento.

¿Versión de Prestashop que usas?

 

Si es el mismo texto para todos los productos, puedes usar por ejemplo el contentbox http://contentbox.org/ y situarlo en uno de los hooks que tienes disponibles en la ficha del producto, o crear tu propio hook https://mypresta.eu/modules/administration-tools/hooks-manager.html (el modulo es gratis) y colocar ese hook en el product.tpl donde quieras ubicarlo, y luego añadir el nuevo hook al modulo del contentbox. (Hablo de PS 1.6)

 

Fichero Ficha Producto PS 1.6: 

/themes/default-bootstrap/product.tpl

Fichero Ficha Producto General PS 1.7

/themes/classic/templates/catalog/product.tpl
Link to comment
Share on other sites

Lo siento, se me pasó decirlo, es para PS 1.7 por lo que contentbox no me vale ¿hay alguno similar para PS1.7?.

 

La idea es poder mostrar cosas distintas pero me podría valer con mostrar siempre lo mismo. Hasta ahora lo que he hecho es añadir a /themes/classic/templates/catalog/product.tpl: 

          <div><a href="http://colorex.laboratoriofotografico.es/index.php?id_cms=6&controller=cms&id_lang=1" target="_blank">{l s='Guia de medidas comunión'}</a></div>
          <div><a href="http://colorex.laboratoriofotografico.es/index.php?id_cms=8&controller=cms&id_lang=1" target="_blank">{l s='Guia de complementos comunión'}</a></div>
          <div><a href="http://colorex.laboratoriofotografico.es/index.php?id_cms=7&controller=cms&id_lang=1" target="_blank">{l s='Guia de medidas boda'}</a></div>
          <div><a href="http://colorex.laboratoriofotografico.es/index.php?id_cms=9&controller=cms&id_lang=1" target="_blank">{l s='Guia de complementos boda'}</a></div>

Imagen como lo tengo ahora mismo: http://prnt.sc/e0ipm8

 

Me gustaría que en vez de irse a una página, saltara un pop-up o una imagen lightbox con la imagen de las medidas.

 

¿Qué me recomiendan hacer?

 

Comento otra opcion que estoy valorando: He añadido la librería fancybox y veo que la librería está añadido correctamente pero no puedo hacer uso de ella porque si añado el siguiente código a product.tpl me da error y no funciona. Y si lo añado a una página cms, automáticamente me borra dicho código cuando doy a guardar la página.

Se que las librerías están bien añadidas porque si ese fragmento lo introduzco directamente en la consola del explorador, si que funciona la imagen con fancybox.

<script type="text/javascript">
{literal}
    $(document).ready(function() {
        $(".fancybox").fancybox();
    });
{/literal}
</script>

¿Sabriais decirme como puedo añadir el código javascript sin que de problema?

Link to comment
Share on other sites

 

¿Versión de Prestashop que usas?

 

Si es el mismo texto para todos los productos, puedes usar por ejemplo el contentbox http://contentbox.org/ y situarlo en uno de los hooks que tienes disponibles en la ficha del producto, o crear tu propio hook https://mypresta.eu/modules/administration-tools/hooks-manager.html (el modulo es gratis) y colocar ese hook en el product.tpl donde quieras ubicarlo, y luego añadir el nuevo hook al modulo del contentbox. (Hablo de PS 1.6)

 

Fichero Ficha Producto PS 1.6: 

/themes/default-bootstrap/product.tpl

Fichero Ficha Producto General PS 1.7

/themes/classic/templates/catalog/product.tpl

 

 

Hola Victor,

Podrías indicarme como se usa ese modulo de hooks? lo tengo instalado pero no consigo saber usarlo.

El fin es poder poner el modulo loyalty bajo el botón de añadir al carrito.

 

Un saludo y gracias por todo!

Link to comment
Share on other sites

A mi también me gustaría saber usar el módulo hooks manager, porque:

  • Lo he instalado
  • He creado un nuevo hook llamado "NewHook"
  • He añadido en product.tpl: {hook h='NewHook'}

Pero ya no se que mas hacer, porque no me aparece en posiciones de los módulos, ni se añadir algo para que aparezca en ese hook.

Link to comment
Share on other sites

A mi también me gustaría saber usar el módulo hooks manager, porque:

  • Lo he instalado
  • He creado un nuevo hook llamado "NewHook"
  • He añadido en product.tpl: {hook h='NewHook'}

Pero ya no se que mas hacer, porque no me aparece en posiciones de los módulos, ni se añadir algo para que aparezca en ese hook.

Una vez has realizado eso, ahora te vas al modulo que quieres posicionar en ese "nuevo hook", y en la clase principal de ese modulo (*.php), añades algo asi:

 

En el:

public function install()

añades 

$this->registerHook('nombrePosicion') 

y en el mismo *.php añades..

public function hookNombrePosicion($params)
	{
		.........
	}
Link to comment
Share on other sites

Pero no termino de entenderlo. Por ejemplo yo quiero añadir el módulo contentbox en mi nuevo hook llamado "NewHook".

 

Me he instalado el módulo que me recomendó Nadie: Hooks Manager

 

  • He registrado un nuevo módulo llamado "NewHook" en Hooks Manager
  • He añadido en product.tpl: {hook h='NewHook'}
  • En contentbox.php, dentro de la función public function install () he añadido: $this->registerHook('NewHook');
  • Todavía dentro de contentbox.php he creado una función:
	public function NewHook()
	{
		
	}

Vale la duda, para que he creado la función si lo único que quiero es mostrar el módulo contentbox en el hook NewHook? ¿Qué debo incluir dentro de esta función?

Link to comment
Share on other sites

A mi también me gustaría saber usar el módulo hooks manager, porque:

  • Lo he instalado
  • He creado un nuevo hook llamado "NewHook"
  • He añadido en product.tpl: {hook h='NewHook'}

Pero ya no se que mas hacer, porque no me aparece en posiciones de los módulos, ni se añadir algo para que aparezca en ese hook.

 

Esto: product.tpl: {hook h='NewHook'} se añade en cualquier parte? por ejemplo al final?

 

Un saludo!

Link to comment
Share on other sites

Esto: product.tpl: {hook h='NewHook'} se añade en cualquier parte? por ejemplo al final?

 

Un saludo!

No, lo añades donde quieras colocar el hook, yo por ejemplo lo he colocado, debajo de la imagen del producto:

    <div class="row">
      <div class="col-md-6">
        {block name='page_content_container'}
          <section class="page-content" id="content">
            {block name='page_content'}
              {block name='product_flags'}
                <ul class="product-flags">
                  {foreach from=$product.flags item=flag}
                    <li class="product-flag {$flag.type}">{$flag.label}</li>
                  {/foreach}
                </ul>
              {/block}

              {block name='product_cover_tumbnails'}
                {include file='catalog/_partials/product-cover-thumbnails.tpl'}
              {/block}
              <div class="scroll-box-arrows">
                <i class="material-icons left"></i>
                <i class="material-icons right"></i>
              </div>

            {/block}
          </section>
        {/block}

        {hook h='NewHook'}

        </div>
        <div class="col-md-6">...
Link to comment
Share on other sites

 

No, lo añades donde quieras colocar el hook, yo por ejemplo lo he colocado, debajo de la imagen del producto:

    <div class="row">
      <div class="col-md-6">
        {block name='page_content_container'}
          <section class="page-content" id="content">
            {block name='page_content'}
              {block name='product_flags'}
                <ul class="product-flags">
                  {foreach from=$product.flags item=flag}
                    <li class="product-flag {$flag.type}">{$flag.label}</li>
                  {/foreach}
                </ul>
              {/block}

              {block name='product_cover_tumbnails'}
                {include file='catalog/_partials/product-cover-thumbnails.tpl'}
              {/block}
              <div class="scroll-box-arrows">
                <i class="material-icons left"></i>
                <i class="material-icons right"></i>
              </div>

            {/block}
          </section>
        {/block}

        {hook h='NewHook'}

        </div>
        <div class="col-md-6">...

 

 

Como lo quier bajo el botón de añadir al carrito, lo e puesto así:

</a>
															</li>
															{if ($group.default == $id_attribute)}
																{$default_colorpicker = $id_attribute}
															{/if}
														{/foreach}
													</ul>
													<input type="hidden" class="color_pick_hidden" name="{$groupName|escape:'html':'UTF-8'}" value="{$default_colorpicker|intval}" />
												{elseif ($group.group_type == 'radio')}
													<ul>
														{foreach from=$group.attributes key=id_attribute item=group_attribute}
															<li>
																<input type="radio" class="attribute_radio" name="{$groupName|escape:'html':'UTF-8'}" value="{$id_attribute}" {if ($group.default == $id_attribute)} checked="checked"{/if} />
																<span>{$group_attribute|escape:'html':'UTF-8'}</span>
															</li>
														{/foreach}
													</ul>
												{/if}
											</div> <!-- end attribute_list -->
										</fieldset>
									{/if}
								{/foreach}
							</div> <!-- end attributes -->
						{/if}
					</div> <!-- end product_attributes -->
					<div class="box-cart-bottom">
						<div{if (!$allow_oosp && $product->quantity <= 0) || !$product->available_for_order || (isset($restricted_country_mode) && $restricted_country_mode) || $PS_CATALOG_MODE} class="unvisible"{/if}>
							<p id="add_to_cart" class="buttons_bottom_block no-print">
								<button type="submit" name="Submit" class="exclusive btn btn-default btn-warning">
									<span>{l s='Add to cart'}</span>
								</button>
							</p>
						</div>
						{hook h='PuntosFidelidad'}
						{if isset($HOOK_PRODUCT_ACTIONS) && $HOOK_PRODUCT_ACTIONS}{$HOOK_PRODUCT_ACTIONS}{/if}<strong></strong>
					</div> <!-- end box-cart-bottom -->
				</div> <!-- end box-info-product -->
			</form>
			{/if}
		</div> <!-- end pb-right-column-->
	</div>
	</div> <!-- end primary_block -->

Estaría correcto?

Pero no termino de entenderlo. Por ejemplo yo quiero añadir el módulo contentbox en mi nuevo hook llamado "NewHook".

 

Me he instalado el módulo que me recomendó Nadie: Hooks Manager

 

  • He registrado un nuevo módulo llamado "NewHook" en Hooks Manager
  • He añadido en product.tpl: {hook h='NewHook'}
  • En contentbox.php, dentro de la función public function install () he añadido: $this->registerHook('NewHook');
  • Todavía dentro de contentbox.php he creado una función:
	public function NewHook()
	{
		
	}

Vale la duda, para que he creado la función si lo único que quiero es mostrar el módulo contentbox en el hook NewHook? ¿Qué debo incluir dentro de esta función?

Tengo la misma duda, e realizado todo lo indicado y estoy a la espera, ya que aun no me aparece el hook.

 

Gracias por todo!

Link to comment
Share on other sites

  • 2 weeks later...

Si x-ackal en principio sería ahí donde lo has colocado pero seguimos a la espera que alguien nos termine de contar cómo sería el proceso de añadir el hook completamente.

 

Así debería ir:

public function NewHook()
{
   return $this->genericHookMethod();	
}

Después en Módulos > Posiciones le das a "Insertar un hook" y eliges el módulo contentBox y mover a NewHook.

 

Confirma si te funciona.

Edited by w3bsolutions (see edit history)
Link to comment
Share on other sites

  • 3 weeks later...

La verdad esque he seguido dándole vueltas y no consigo añadir un nuevo hook con éxito. Lo añado y me aparece pero después añado al hook algunos módulos y nunca muestra nada.

 

qxmgr6.png

 

He añadido el siguiente código. En este caso quería mostrar el módulo ps_sharebuttons

    public function install()
    {
        return parent::install()
            && Configuration::updateValue('PS_SC_TWITTER', 1)
            && Configuration::updateValue('PS_SC_FACEBOOK', 1)
            && Configuration::updateValue('PS_SC_GOOGLE', 1)
            && Configuration::updateValue('PS_SC_PINTEREST', 1)
            && $this->registerHook('displayProductButtons')
+            && $this->registerHook('displayButtonsPicture')
        ;
    }

+    public function displayButtonsPicture()
+    {
+       return $this->genericHookMethod();
+    }

No hay ningún tutorial de principio a fin de como añadir un nuevo hook en PS1.7?

Link to comment
Share on other sites

La verdad esque he seguido dándole vueltas y no consigo añadir un nuevo hook con éxito. Lo añado y me aparece pero después añado al hook algunos módulos y nunca muestra nada.

 

qxmgr6.png

 

He añadido el siguiente código. En este caso quería mostrar el módulo ps_sharebuttons

    public function install()
    {
        return parent::install()
            && Configuration::updateValue('PS_SC_TWITTER', 1)
            && Configuration::updateValue('PS_SC_FACEBOOK', 1)
            && Configuration::updateValue('PS_SC_GOOGLE', 1)
            && Configuration::updateValue('PS_SC_PINTEREST', 1)
            && $this->registerHook('displayProductButtons')
+            && $this->registerHook('displayButtonsPicture')
        ;
    }

+    public function displayButtonsPicture()
+    {
+       return $this->genericHookMethod();
+    }
No hay ningún tutorial de principio a fin de como añadir un nuevo hook en PS1.7?

 

 

La verdad esque he seguido dándole vueltas y no consigo añadir un nuevo hook con éxito. Lo añado y me aparece pero después añado al hook algunos módulos y nunca muestra nada.

 

qxmgr6.png

 

He añadido el siguiente código. En este caso quería mostrar el módulo ps_sharebuttons

    public function install()
    {
        return parent::install()
            && Configuration::updateValue('PS_SC_TWITTER', 1)
            && Configuration::updateValue('PS_SC_FACEBOOK', 1)
            && Configuration::updateValue('PS_SC_GOOGLE', 1)
            && Configuration::updateValue('PS_SC_PINTEREST', 1)
            && $this->registerHook('displayProductButtons')
+            && $this->registerHook('displayButtonsPicture')
        ;
    }

+    public function displayButtonsPicture()
+    {
+       return $this->genericHookMethod();
+    }
No hay ningún tutorial de principio a fin de como añadir un nuevo hook en PS1.7?

 

 

 

http://developers.prestashop.com/module/04-DivingIntoPSCoreDevelopment/06-ManagingHooks.html

 

http://developers.prestashop.com/module/04-DivingIntoPSCoreDevelopment/06-ManagingHooks.html

 

http://developers.prestashop.com/themes/hooks/index.html

 

Por cierto, lo de genericHook.... fue un ejemplo del compañero (no tienes que ponerlo literalmente), lo que tienes que retornar es el hook al que quieres copiar en todo caso.

Link to comment
Share on other sites

Entonces que estoy haciendo mal? Ya lo he modificado de esta manera:

    public function install()
    {
        return parent::install()
            && Configuration::updateValue('PS_SC_TWITTER', 1)
            && Configuration::updateValue('PS_SC_FACEBOOK', 1)
            && Configuration::updateValue('PS_SC_GOOGLE', 1)
            && Configuration::updateValue('PS_SC_PINTEREST', 1)
            && $this->registerHook('displayProductButtons')
            && $this->registerHook('displayButtonsPicture')
        ;
    }

    public function hookDisplaydisplayButtonsPicture()
    {
       return $this->displayButtonsPicture();
    }

Lo que no he entendido es lo de "in a controller". Yo no he hecho nada en ningún controlador.

Link to comment
Share on other sites

Entonces que estoy haciendo mal? Ya lo he modificado de esta manera:

    public function install()
    {
        return parent::install()
            && Configuration::updateValue('PS_SC_TWITTER', 1)
            && Configuration::updateValue('PS_SC_FACEBOOK', 1)
            && Configuration::updateValue('PS_SC_GOOGLE', 1)
            && Configuration::updateValue('PS_SC_PINTEREST', 1)
            && $this->registerHook('displayProductButtons')
            && $this->registerHook('displayButtonsPicture')
        ;
    }

    public function hookDisplaydisplayButtonsPicture()
    {
       return $this->displayButtonsPicture();
    }

Lo que no he entendido es lo de "in a controller". Yo no he hecho nada en ningún controlador.

 

El módulo ps_sharebuttons es un poco diferente porque ya está convertido a widget, otra forma de preparar la salida del módulo. 

Te adjunto el ps_sharebuttons.php modificado que funciona en tu hook nuevo "displayButtonsPicture".

 

  1. Sustitúyelo por ftp en el directorio del módulo /modules/ps_sharebuttons/ por el que hay.
  2. Entra al panel de control > Módulos y haz click en "Reiniciar" en el módulo. 
  3. Ya te debería aparecer en el nuevo hook automáticamente. Si no te aparece dale a "Trasladar un módulo" eligiendo este módulo y el nuevo hook debería aparecer en la lista a la que trasladarlo. Si te figura enganchando en el módulo pero no lo ves en el frontend quizás tengas que borrar la caché o pon el código que has incluido en la plantilla para mostrar lo que está en ese hook.

 

Saludos.

ps_sharebuttons.php

  • Like 2
Link to comment
Share on other sites

El módulo ps_sharebuttons es un poco diferente porque ya está convertido a widget, otra forma de preparar la salida del módulo. 

Te adjunto el ps_sharebuttons.php modificado que funciona en tu hook nuevo "displayButtonsPicture".

 

  1. Sustitúyelo por ftp en el directorio del módulo /modules/ps_sharebuttons/ por el que hay.
  2. Entra al panel de control > Módulos y haz click en "Reiniciar" en el módulo. 
  3. Ya te debería aparecer en el nuevo hook automáticamente. Si no te aparece dale a "Trasladar un módulo" eligiendo este módulo y el nuevo hook debería aparecer en la lista a la que trasladarlo. Si te figura enganchando en el módulo pero no lo ves en el frontend quizás tengas que borrar la caché o pon el código que has incluido en la plantilla para mostrar lo que está en ese hook.

 

Saludos.

 

Me podrías decir que ha sido lo que has cambiado? Ya que realmente no es que quiera poner hay el módulo de las redes sociales. Lo que quiero es aprender cómo crear un nuevo hook y poder añadir ahí cualquier módulo. Y he cogido el de redes sociales por coger uno cualquiera.

Link to comment
Share on other sites

Me podrías decir que ha sido lo que has cambiado? Ya que realmente no es que quiera poner hay el módulo de las redes sociales. Lo que quiero es aprender cómo crear un nuevo hook y poder añadir ahí cualquier módulo. Y he cogido el de redes sociales por coger uno cualquiera.

 

No hay un procedimiento genérico que sirva para TODOS los módulos. El que hemos comentado anteriormente sirve para la mayoría pero algunos módulos están programados de otra manera y hay que adaptarlos con cambios diferentes.  Es el caso de algunos módulos de PS 1.7 que Prestashop ha cambiado a widgets, pero tampoco te podría asegurar que el cambio que he hecho en ps_sharebuttons sea el mismo que hay que hacer en otros. 

 

El cambio fue:

public function install()
    {
        return parent::install()
            && Configuration::updateValue('PS_SC_TWITTER', 1)
            && Configuration::updateValue('PS_SC_FACEBOOK', 1)
            && Configuration::updateValue('PS_SC_GOOGLE', 1)
            && Configuration::updateValue('PS_SC_PINTEREST', 1)
            && $this->registerHook('displayProductButtons')
+           && $this->registerHook('displayButtonsPicture')
        ;
    }

public function renderWidget($hookName, array $params)
    {
+       $key = null;
    
+       if (isset($params['product'])) {
            $key = 'ps_sharebuttons|' . $params['product']['id_product'];
            if (!empty($params['product']['id_product_attribute'])) {
                $key .= '|' . $params['product']['id_product_attribute'];
            }
+       }

        if (!$this->isCached($this->templateFile, $this->getCacheId($key))) {
            $this->smarty->assign($this->getWidgetVariables($hookName, $params));
        }

        return $this->fetch($this->templateFile, $this->getCacheId($key));
    }

P.S. Un detalle, cuando preguntas qué hay que cambiar en un módulo por favor hazlo de forma específica, no cogiendo "uno cualquiera", así no perdemos el tiempo intentando darte una solución que no es la que necesitas. En este caso, al menos yo hubiera entendido mejor: "quiero poner el módulo X en mi posición nueva Y" (sustituyendo X e Y, obviamente) y te hubiera dado la respuesta para ese módulo X (siempre que fuera un módulo público). Gracias.

Edited by w3bsolutions (see edit history)
  • Like 1
Link to comment
Share on other sites

Lo siento w3bsolutions. Valoro mucho vuestros comentarios y la ayuda que prestas. Lo mismo no me expliqué bien, pero creo que lo que quiero es lo correcto, y es querer aprender, no poner simplemente la duda y que me la solucioneis.

 

Realmente si ves el título del post, lo que quiero es crear un hook en esta posición (que lo hemos hecho) y ya en esta posición poder añadir un modulo que me venga bien como puede ser: algún módulo tipo contenbox para ps1.7 como me dijo nadie, alguno de guia de tamaño (este sería perfecto), o si lo consiguiera... porque no, hacer yo uno propio.

 

Como aun no encuentro el módulo que me viene bien, por eso lo he hecho con uno cualquiera.

 

Gracias

Link to comment
Share on other sites

Aprender siempre es lo correcto, y te animo a que aprendas todo lo que puedas.

 

Te acabo de adaptar el módulo "contentbox" para PS 1.7. He hecho pruebas y se añade bien a hooks propios sin tocar nada del código del módulo. Te lo adjunto.

 

Saludos.

 

¿Te funciona? ¿Queda resuelto el problema?

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...