我正在使用Ubercart產品和product_kit模塊。這對於將相關產品套件鏈接到包含的產品非常有用,但我也想從單個產品鏈接到它可能包含的任何套件。如何防止用Drupal的node_load()進行無限遞歸?
我想我可以在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);
}
}
}
}
但是,因爲該產品包也被加載的產品,我在遞歸循環結束了。
我想我的問題實際上有兩個部分:
的問題就是這個帖子的標題:我怎麼防止這種遞歸?
無論如何,可能會回答第一個問題的一個稍微不同的問題:我應該在加載節點時還是在後續過程中(例如,在視圖或更改過程中)執行此操作?
沒有真正回答我的任何問題。 – HorusKol 2011-02-28 02:55:53