2017-08-31 84 views
0

是prestashop跟踪挂钩调用的一些解决方案吗?特别是我需要检查钩子在哪里调用的钩子和钩子在做什么。很难找到钩子的函数。他们可以无处不在。Prestashop调试挂钩

+0

你想知道哪个钩子被调用? – joseantgv

+0

在我的商店有时DB包含双行。插入处于挂钩功能。所以有时他们必须跑两次。我无法找到何时何地。第二种情况是我找到HOOK :: EXEC,但是我找不到它的功能。他们必须在某个模块中。 –

回答

2

所有钩子执行都是通过funcion execHook类完成的。您可以在这个函数的开头加上调试跟踪:

public static function exec($hook_name, $hook_args = array(), $id_module = null, $array_return = false, $check_exceptions = true, 
          $use_push = false, $id_shop = null) 
{ 
    $logger = new FileLogger(0); 
    $logger->setFilename(_PS_ROOT_DIR_.'/log/debug.log'); 
    $e = new Exception; 
    $logger->logDebug('Hook '.$hook_name.' called from:'); 
    $logger->logDebug($e->getTraceAsString()); 
    .... 

这将创造/log/debug.log调试日志,将显示有关谁该挂钩的信息。

即使你重写这个函数来进行更好;)


您也可以调试所有的插入你的数据库。

q函数从Db类(/classes/db/Db.php)添加这个代码

protected function q($sql, $use_cache = true) 
{ 
    $logger = new FileLogger(0); 
    $logger->setFilename(_PS_ROOT_DIR_.'/log/sql.log'); 
    $e = new Exception; 
    $logger->logDebug('SQL '.$sql.' executed from:'); 
    $logger->logDebug($e->getTraceAsString()); 
    ... 

+0

@Marcin Jaworski回答编辑,以帮助您找到谁插入 – idnovate