Jump to content

Product list hook problem


Moggen
 Share

Recommended Posts

Hi

I have created module for displaying discount price based on third party api and I have created a custom hook in my module and in category.php. So far everything is good I can display test message any where I wont by moving my {hook} in the product-list template. Now my problem is that the hook i called once when category.php smarty assign is called but is there a way for my module to know witch product is displayed in the loop. Because I cant figure out how to calculate each product price based on the list witch is give by $params and some how assign correct price to the module template.

Thanks for any help

Share this post


Link to post
Share on other sites

Well the hook its self is realy easy

I have in my install function something like this:

simplefied not comleat

function install() {

if(!parren::install())
{
return false;
}

$db = Db::getInstance()
$db->Execute("insert into ps_hook name title description position values myHook, title, desc, 1 ");
if(!Hook:registerHook("myHook"){
return false
}

return true
}

This will do 3 inserts first add my module in parrent::install (this must be done first to get id to hook register). Then I do a simple insert of my hook to ps_hook table. Last I execute registerHook this function will add myHook to module_hook and like the hook to this module.


the I just create myHook function something like this

function myHook($params) {
}


Then I add the Hook execute function in the assign to smart in category.php

Share this post


Link to post
Share on other sites

Ok I think what I am trying to do is not possible with a hook but I will try to explain my code a bit more

My module

monthlycost

class MonthlyCost extends Module {

   function __construct()
   {
       $this->name = 'monthlycost';
       $this->tab = 'Payment';
       $this->version = '0.1';
       parent::__construct();

       $this->displayName = $this->l('Monthly Cost');
       $this->description = $this->l('Display monthly cost for part payment');
       $this->confirmUninstall = $this->l('Are you sure you want to delete your module ?');
   }

   function install()
   {
       if (!parent::install()) {
           return false;
       }
       $db = Db::getInstance();
       $db->Execute( "INSERT INTO `ps_hook` (`name`, `title`, `description`) VALUES ('monthlyCost', 'Part payment', 'Part payment')" );
       if (!$this->registerHook('monthlyCost')) {
           return false;
       }
       return true;
   }

   function uninstall() {

       $idHook = Hook::get( 'monthlyCost' ) ;

       $db = Db::getInstance();
       $db->Execute(" DELETE FROM " . _DB_PREFIX_ . "hook WHERE id_hook = " . $idHook );
       $this->unregisterHook( $idHook );

       if( !parent::uninstall() ) {
           return false;
       } else {
           return true;
       }
   }

   public function hookMonthlyCost( $params ) {
               api calculations on price
              return $this->display(__FILE__, 'monthlycost.tpl');
        }
}




and in category.php
row 64 I have added following row:
'HOOK_PART_PAYMENT' => Module::hookExec('monthlyCost',array("products" => $cat_products)),


And in product-list.tpl
{$HOOK_PART_PAYMENT}

But the thing is that when i Exec monthlyCost i will return a html rendered by the template in the module.
Then when the product-list.tpl loops $HOOK_PART_PAYMENTit will off course display the same price over and over again.
So basically what I need is a way to execute the hook foreach row in the template and supply a id like.
{EXEC_HOOK v=$product.id} or something like that.

Share this post


Link to post
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
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More