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);
}
}
}
}
しかし、製品キットも製品をロードしているため、再帰的なループに陥ります。
私の質問は実際には2つの部分に分かれていると思います。
この投稿のタイトルである質問:この再帰を防ぐにはどうすればよいですか?
とにかく最初の質問におそらく答える少し異なる質問:ノードがロードされているとき、またはプロセスの後半(たとえば、表示または変更時)にこれを行う必要がありますか?