public static function preloadFieldData($ids) { if (!is_array($ids) && is_numeric($ids)) { $ids = array($ids); } $tmp = array(); for ($i = 0; $i < count($ids); $i++) { $n = (int) $ids[$i]; if ($n < 0) { continue; } if (is_array(self::$_cached_fieldvals) && isset(self::$_cached_fieldvals[$n])) { continue; } $tmp[] = $n; } if (!is_array($tmp) || !count($tmp)) { return; } sort($tmp); $idlist = array_unique($tmp); $fielddefs = self::get_fielddefs(); if (!count($fielddefs)) { return; } $db = cmsms()->GetDb(); $query = 'SELECT A.news_id,A.fielddef_id,A.value FROM ' . cms_db_prefix() . 'module_news_fieldvals A INNER JOIN ' . cms_db_prefix() . 'module_news_fielddefs B ON A.fielddef_id = B.id WHERE news_id IN (' . implode(',', $idlist) . ') ORDER BY A.news_id,B.item_order'; $dbr = $db->GetArray($query); if (!$dbr) { return; } // initialization. if (!is_array(self::$_cached_fieldvals)) { self::$_cached_fieldvals = array(); } foreach ($idlist as $news_id) { if (isset(self::$_cached_fieldvals[$news_id])) { continue; } self::$_cached_fieldvals[$news_id] = array(); foreach ($fielddefs as $field) { $obj = new news_field(); foreach ($field as $k => $v) { $obj->{$k} = $v; } self::$_cached_fieldvals[$news_id][$field['id']] = $obj; } } // fill with values. foreach ($dbr as $row) { $news_id = $row['news_id']; $flddef_id = $row['fielddef_id']; $value = $row['value']; if (!isset(self::$_cached_fieldvals[$news_id][$flddef_id])) { continue; } self::$_cached_fieldvals[$news_id][$flddef_id]->value = $value; } }