PHPFixing
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • PHP
  • Programming
  • SQL Injection
  • Web3.0

Thursday, October 27, 2022

[FIXED] How to move a hook in prestashop?

 October 27, 2022     php, prestashop, prestashop-1.7     No comments   

Issue

I need to move my hook right between the product description and the add button to the cart, in the area I marked in the photo

enter image description here

So far I can only put it before and after the buttons of social networks using the admin, but I need to put my module before the button.

This is how I create my hook:

public function install()
    {
        if (!parent::install() || !$this->registerHook('displayProductAdditionalInfo'))
            return false;
        return true;
    }

public function uninstall()
    {
        if (!parent::uninstall() || !$this->unregisterHook('displayProductAdditionalInfo'))
            return false;
        return true;
    }

public function hookDisplayProductAdditionalInfo($params)
    {
        return $this->runnable();
    }

And this is my file that contains the iframe that I want to show

{block name='product_description_short' prepend}
    <style type='text/css'> 
        .products { border: none; width: 100%; height: {$height}px;  } 
    </style>
    <iframe class='products' src='{$iframe}{$token}'></iframe>
{/block}

How can I do to move the hook to where I need to, without having to touch the source code of the theme?


Solution

This is exactly what the concept of widget aims at. Widgets is an advanced feature introduced in PS 1.7 that extends the hooks feature.

From the documentation:

With widgets, module developers can display content everywhere the module is asked to do so. When a module implements widgets in its code, it allows:

1 a theme to call the module directly with {widget name="module_name"}

2 the core to fallback on it if a registered hook is called but its method hook() does not exist.

By following the same link you can make a module widgets compliant and then call the widget in templates/catalog/product.tpl in the place you want.

In classic theme for 1.7.5.0, you can call the widget in line 98 just before <div class="product-actions">.

Hope it helped.

Edit:

Let's assume your module name is 'my_module' and your custom hook name is 'myCustomHook', Here is how the module class should look like:

class MyModule extends Module implements WidgetInterface
{

    public function __construct()
    {
        $this->name = 'my_module';
        $this->version = '1.0.0';
        $this->author = 'me';
        $this->tab = 'front_office_features';
        $this->need_instance = 0;
        $this->bootstrap = true;

        parent::__construct();

        $this->description = ...
        $this->displayName = ...
        $this->confirmUninstall = ...
    }



    public function install()
    {
        if(!parent::install())
        {
            return false;
        }

        return true;
    }


    public function uninstall()
    {
        return(parent::uninstall());
    }

    public function renderWidget($hookName = null, array $configuration = [])
    {

        $this->smarty->assign($this->getWidgetVariables($hookName, $configuration));

        return $this->display(__FILE__, 'views/templates/widget/my_template.tpl');

    }

    public function getWidgetVariables($hookName = null, array $configuration = [])
    {
            if($hookName === 'MyCustomHook')
            {
                $your_height_value, $your_iframe_value, $your_token_value... //  Get the values depending on your logic

                return [
                    'token' => $your_token_value;
                    'height' => $your_height_value;
                    'iframe' => $your__iframe_value;
                ];

            }
    }

In template file, just call the widget like:

{widget module='my_module' hook='myCustomHook'}


Answered By - Adib Aroui
Answer Checked By - David Goodson (PHPFixing Volunteer)
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
Newer Post Older Post Home

0 Comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Total Pageviews

Featured Post

Why Learn PHP Programming

Why Learn PHP Programming A widely-used open source scripting language PHP is one of the most popular programming languages in the world. It...

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Copyright © PHPFixing