Я использую модули Ubercart product и 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);
}
}
}
}
НоПоскольку наборы продуктов также загружают продукты, я в конечном итоге в рекурсивном цикле.
Я предполагаю, что мой вопрос состоит из двух частей:
Вопрос, которыйзаголовок этого поста: как я могу предотвратить эту рекурсию?
Немного другой вопрос, который, вероятно, в любом случае отвечает на первый: я должен делать это, когда загружается узел, илипозже в процессе (например, при просмотре или изменении)?