--- links.inc +++ links.inc @@ -1148,40 +1148,49 @@ * This is used, among other things, for legacy compatibility with weblink.module. */ function links_load_links_for_node($nid, $module='links', $lid=0, $firstonly=FALSE, $indexedby = NULL) { - $links = array(); - if ($lid) { - $sql = "SELECT l.lid, ln.nid, url, url_md5, weight, clicks, module, l.link_title AS link_link_title, ln.link_title AS node_link_title FROM {links_node} ln LEFT JOIN {links} l ON l.lid=ln.lid WHERE ln.nid=%d AND l.lid=%d"; - if (! empty($module)) { - $sql .= " AND module='" . $module . "' "; + static $links_cache = array(); + + if (!is_array($links_cache[$module][$nid])) { + $links = array(); + if ($lid) { + $sql = "SELECT l.lid, ln.nid, url, url_md5, weight, clicks, module, l.link_title AS link_link_title, ln.link_title AS node_link_title FROM {links_node} ln LEFT JOIN {links} l ON l.lid=ln.lid WHERE ln.nid=%d AND l.lid=%d"; + if (! empty($module)) { + $sql .= " AND module='" . $module . "' "; + } + $sql .= " ORDER BY weight, l.link_title"; + $result = db_query($sql, array($nid, $lid)); + } else { + $sql = "SELECT l.lid, ln.nid, url, url_md5, weight, clicks, module, l.link_title AS link_link_title, ln.link_title AS node_link_title FROM {links_node} ln LEFT JOIN {links} l ON l.lid=ln.lid WHERE ln.nid=%d"; + if (! empty($module)) { + $sql .= " AND module='" . $module . "' "; + } + $sql .= " ORDER BY weight, l.link_title"; + $result = db_query($sql, array($nid)); } - $sql .= " ORDER BY weight, l.link_title"; - $result = db_query($sql, array($nid, $lid)); - } else { - $sql = "SELECT l.lid, ln.nid, url, url_md5, weight, clicks, module, l.link_title AS link_link_title, ln.link_title AS node_link_title FROM {links_node} ln LEFT JOIN {links} l ON l.lid=ln.lid WHERE ln.nid=%d"; - if (! empty($module)) { - $sql .= " AND module='" . $module . "' "; + if (db_error($result)) { + watchdog("error",t("links failed on query ").$sql); } - $sql .= " ORDER BY weight, l.link_title"; - $result = db_query($sql, array($nid)); - } - if (db_error($result)) { - watchdog("links",t("links failed on query @sql", array('@sql'=>$sql)), WATCHDOG_ERROR); - } else { - while ($row = db_fetch_array($result)) { - $row['link_title'] = trim($row['link_title']); - $row['link_title'] = trim(empty($row['node_link_title']) ? $row['link_link_title'] : $row['node_link_title']); - if($indexedby){ - $links[$row[$indexedby]] = $row; - } - else { - $links[] = $row; - } - if ($firstonly) { - break; + else { + while ($row = db_fetch_array($result)) { + $row['link_title'] = trim($row['link_title']); + $row['link_title'] = trim(empty($row['node_link_title']) ? $row['link_link_title'] : $row['node_link_title']); + if($indexedby){ + $links[$row[$indexedby]] = $row; + } + else { + $links[] = $row; + } + if ($firstonly) { + break; + } } } + if (!$lid && !$firstonly && empty($indexedby)) { + $links_cache[$module][$nid] = $links; + } + return $links; } - return $links; + return $links_cache[$module][$nid]; } /**