Esempio n. 1
0
 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;
     }
 }