Index: trunk/core/units/general/cat_event_handler.php =================================================================== diff -u -N -r8686 -r8687 --- trunk/core/units/general/cat_event_handler.php (.../cat_event_handler.php) (revision 8686) +++ trunk/core/units/general/cat_event_handler.php (.../cat_event_handler.php) (revision 8687) @@ -702,26 +702,10 @@ } // linking existing images for item with virtual fields - $sql = 'SELECT * - FROM '.TABLE_PREFIX.'Images - WHERE ResourceId = '.$object->GetDBField('ResourceId').' - ORDER BY ImageId ASC'; - $item_images = $this->Conn->Query($sql); + $image_helper =& $this->Application->recallObject('ImageHelper'); + /* @var $image_helper ImageHelper */ - $image_counter = 1; - foreach ($item_images as $item_image) { - $image_path = preg_replace('/^'.preg_quote(IMAGES_PATH, '/').'(.*)/', '\\1', $item_image['ThumbPath']); - if ($item_image['DefaultImg'] == 1 || $item_image['Name'] == 'main') { - // process primary image separately - $object->SetDBField('PrimaryImage', $image_path); - $object->Fields['PrimaryImage']['original_field'] = $item_image['Name']; - continue; - } - - $object->SetDBField('Image'.$image_counter, $image_path); - $object->Fields['Image'.$image_counter]['original_field'] = $item_image['Name']; - $image_counter++; - } + $image_helper->LoadItemImages($object); } function OnAfterItemUpdate(&$event) Index: trunk/core/units/images/image_tag_processor.php =================================================================== diff -u -N -r8686 -r8687 --- trunk/core/units/images/image_tag_processor.php (.../image_tag_processor.php) (revision 8686) +++ trunk/core/units/images/image_tag_processor.php (.../image_tag_processor.php) (revision 8687) @@ -56,13 +56,14 @@ // if we need primary thumbnail which is preloaded with category item's list $is_primary = $this->SelectParam($params, 'primary,Primary'); + $image_id = $this->Application->GetVar($this->Prefix.'_id'); if ( - ($is_primary || !isset($params['name'])) - && - !$this->Application->GetVar('img_id') - && - isset($parent_item->Fields['LocalThumb']) + // is primary, when primary mark set OR name & field not given + ($is_primary || !(isset($params['name']) || isset($params['field']))) && + + // primary image is preloaded AND direct id not given + isset($parent_item->Fields['ThumbPath']) && !$image_id ) { $object->SetDefaultValues(); $object->SetDBField('Url', $parent_item->GetDBField('FullUrl')); @@ -76,21 +77,26 @@ $keys[$id_field] = $parent_item->GetDBField($parent_table_key); // which image to load? - if ( getArrayValue($params, 'Primary') ) { //load primary image + if ($is_primary) { + // by PrimaryImage mark $keys['DefaultImg'] = 1; } - elseif ( getArrayValue($params, 'name') ) { //load by name + elseif (getArrayValue($params, 'name')) { + // by ImageName $keys['Name'] = $params['name']; } - elseif ( getArrayValue($params, 'field') ) { //load by virtual field name in main object + elseif (getArrayValue($params, 'field')) { + // by virtual field name in main object $field_options = $parent_item->GetFieldOptions($params['field']); $keys['Name'] = $field_options['original_field']; } - elseif ( $image_id = $this->Application->GetVar($this->Prefix.'_id') ) { + elseif ($image_id) { + // by ID $keys['ImageId'] = $image_id; } else { - $keys['DefaultImg'] = 1; //if primary was not set explicity and name was also not passed - load primary + // by PrimaryImage if no other criteria given + $keys['DefaultImg'] = 1; } $object->Load($keys); Index: trunk/core/units/general/helpers/image_helper.php =================================================================== diff -u -N -r8686 -r8687 --- trunk/core/units/general/helpers/image_helper.php (.../image_helper.php) (revision 8686) +++ trunk/core/units/general/helpers/image_helper.php (.../image_helper.php) (revision 8687) @@ -169,9 +169,6 @@ // no images found in POST -> create default image fields $image_names = Array ('PrimaryImage' => ''); $image_count = $this->Application->ConfigValue($prefix.'_MaxImageCount'); - if (!$image_count) { - $image_count = 3; // primary image + 2 additional images - } $created_count = 1; while ($created_count < $image_count) { @@ -187,6 +184,38 @@ $this->Application->setUnitOption($prefix, 'Fields', $fields); $this->Application->setUnitOption($prefix, 'VirtualFields', $virtual_fields); } + + /** + * Puts existing item images (from subitem) to virtual fields (in main item) + * + * @param kCatDBItem $object + */ + function LoadItemImages(&$object) + { + $max_image_count = $this->Application->ConfigValue($object->Prefix.'_MaxImageCount'); + + $sql = 'SELECT * + FROM '.TABLE_PREFIX.'Images + WHERE ResourceId = '.$object->GetDBField('ResourceId').' + ORDER BY ImageId ASC + LIMIT 0, '.(int)$max_image_count; + $item_images = $this->Conn->Query($sql); + + $image_counter = 1; + foreach ($item_images as $item_image) { + $image_path = preg_replace('/^'.preg_quote(IMAGES_PATH, '/').'(.*)/', '\\1', $item_image['ThumbPath']); + if ($item_image['DefaultImg'] == 1 || $item_image['Name'] == 'main') { + // process primary image separately + $object->SetDBField('PrimaryImage', $image_path); + $object->Fields['PrimaryImage']['original_field'] = $item_image['Name']; + continue; + } + + $object->SetDBField('Image'.$image_counter, $image_path); + $object->Fields['Image'.$image_counter]['original_field'] = $item_image['Name']; + $image_counter++; + } + } } ?> \ No newline at end of file Index: trunk/kernel/units/images/image_tag_processor.php =================================================================== diff -u -N -r8686 -r8687 --- trunk/kernel/units/images/image_tag_processor.php (.../image_tag_processor.php) (revision 8686) +++ trunk/kernel/units/images/image_tag_processor.php (.../image_tag_processor.php) (revision 8687) @@ -56,13 +56,14 @@ // if we need primary thumbnail which is preloaded with category item's list $is_primary = $this->SelectParam($params, 'primary,Primary'); + $image_id = $this->Application->GetVar($this->Prefix.'_id'); if ( - ($is_primary || !isset($params['name'])) - && - !$this->Application->GetVar('img_id') - && - isset($parent_item->Fields['LocalThumb']) + // is primary, when primary mark set OR name & field not given + ($is_primary || !(isset($params['name']) || isset($params['field']))) && + + // primary image is preloaded AND direct id not given + isset($parent_item->Fields['ThumbPath']) && !$image_id ) { $object->SetDefaultValues(); $object->SetDBField('Url', $parent_item->GetDBField('FullUrl')); @@ -76,21 +77,26 @@ $keys[$id_field] = $parent_item->GetDBField($parent_table_key); // which image to load? - if ( getArrayValue($params, 'Primary') ) { //load primary image + if ($is_primary) { + // by PrimaryImage mark $keys['DefaultImg'] = 1; } - elseif ( getArrayValue($params, 'name') ) { //load by name + elseif (getArrayValue($params, 'name')) { + // by ImageName $keys['Name'] = $params['name']; } - elseif ( getArrayValue($params, 'field') ) { //load by virtual field name in main object + elseif (getArrayValue($params, 'field')) { + // by virtual field name in main object $field_options = $parent_item->GetFieldOptions($params['field']); $keys['Name'] = $field_options['original_field']; } - elseif ( $image_id = $this->Application->GetVar($this->Prefix.'_id') ) { + elseif ($image_id) { + // by ID $keys['ImageId'] = $image_id; } else { - $keys['DefaultImg'] = 1; //if primary was not set explicity and name was also not passed - load primary + // by PrimaryImage if no other criteria given + $keys['DefaultImg'] = 1; } $object->Load($keys);