我正在使用 Ubercart 产品和 product_kit 模块。这非常适合从相关产品套件链接到包含的产品,但我也想从单个产品链接到它可能属于的任何套件。
我想我可以对 SKU/型号进行数据库搜索(轻松完成该部分),然后使用 node_load($nid) 获取相关套件。
到目前为止我有这个:
function amh_shop_nodeapi(&$node, $op, $a3 = null, $a4 = null)
{
if ($node->type == 'product') {
if ($op == 'load') {
error_log("product::load");
$bundles = array();
$results = db_query('SELECT DISTINCT n.nid FROM {node} n RIGHT JOIN {uc_products} up ON up.nid = n.nid WHERE up.model LIKE "%s /%" OR up.model LIKE "%/ %s /%" OR up.model LIKE "%/ %s"', $node->model, $node->model, $node->model);
while ($bundle = db_fetch_object($results)) {
error_log("bundle::load");
$bundles[] = node_load($bundle->nid);
}
}
}
}
但是,因为产品套件也在加载产品,所以我最终陷入了递归循环。
我想我的问题实际上分为两部分:
这篇文章标题的问题是:如何防止这种递归?
稍微不同的问题可能会回答第一个问题:我应该在加载节点时执行此操作,还是在此过程的后期(例如,查看或更改)?