показать изображение категории из задачи подкатегории - PullRequest
0 голосов
/ 09 октября 2010

Пожалуйста, позвольте мне сначала объяснить мой вопрос. У меня есть интернет-магазин, в котором много товаров, но есть много категорий. Изображения продуктов импортированы из openicecat.biz , это тоже контент-провайдер. Если для определенного продукта нет описания или изображения, отображается noimage.jpg

Кто-то создал код, который выбирает изображение из списка продуктов и использует его в качестве изображения для этой категории. (по мере доступности) Проблема возникает, когда категория имеет подкатегорию с изображениями и подкатегорию без изображений. Вместо этого отображается файл noimage.jpg, который показывает изображение из подкатегории с изображениями.

Например

catelog -> components -> card readers (no image) -> internal card reader (image)
                                                 -> external card reader (no image)

В соответствии с тем, как был разработан фрагмент кода, только изображение будет отображаться, когда во внутреннем и внешнем устройстве чтения карт есть изображения, а не когда в одной подкатегории нет изображений.

Что я хотел бы иметь, так это то, что, например, если во внутреннем картридере подкатегории есть продукты с изображениями, а во внешнем картридере подкатегории нет изображений, изображение внешнего устройства чтения карт отображается в виде изображения категории для кард-ридеров.

Пример

catelog -> components -> card readers (image of internal card reader, instead of no image)                                    
                                       -> internal card reader (image)
                                       -> external card reader (no image)

Надеюсь, вы поймете, о чем я.

Это фрагмент кода:

// Start auto fetch category image from product
if($categories['categories_image'] == "") {
$categories_img_query = tep_db_query("select products_image from " . TABLE_PRODUCTS . " p, products_to_categories pc WHERE p.products_id = pc.products_id AND pc.categories_id = '{$categories['categories_id']}' AND p.products_image IS NOT NULL order by p.products_id ASC");

if(tep_db_num_rows($categories_img_query) > 0) {
 $categories_img = tep_db_fetch_array($categories_img_query);
 $categories['categories_image'] = $categories_img['products_image'];
}
else {
 $categories_img_parent_query = tep_db_query("select categories_id from categories WHERE parent_id = '{$categories['categories_id']}'");

 while($categories_img_parent = tep_db_fetch_array($categories_img_parent_query)) {
   $categories_img_query = tep_db_query("select products_image from " . TABLE_PRODUCTS . " p, products_to_categories pc WHERE p.products_id = pc.products_id AND pc.categories_id = '{$categories_img_parent['categories_id']}' AND p.products_image IS NOT NULL order by p.products_id ASC");
   if(tep_db_num_rows($categories_img_query) > 0) {
     $categories_img = tep_db_fetch_array($categories_img_query);
     $categories['categories_image'] = $categories_img['products_image'];
   }
 }
}
}
// End auto fetch category image from product

Может кто-нибудь помочь мне завершить этот фрагмент?

Кстати, это для oscommerce.

btw2, боже мой, я трачу 40 минут на объяснение и ввод этой проблемы, стоит ли это тоже медали (медаль Вечного Терпения); -)

1 Ответ

0 голосов
/ 09 октября 2010

Прежде всего, некоторая критика. Ваше предложение WHERE должно быть в вашем JOIN. То есть:

WHERE p.products_id = pc.products_id

на самом деле должно быть

p JOIN pc USING (products_id)

Это быстрее, понятнее.

О вашей конкретной проблеме:

Я вообще не понимаю, как вы можете иметь пустые изображения (вы всегда указываете, что products_image IS NOT NULL), поэтому подразумевается, что noimage.jpg фактически сохраняется как значение для этого изображения. В этом случае проблема заключается в том, что вы просто добавляете любое найденное изображение, даже если это noimage.jpg. Вместо того, чтобы добавлять первое изображение из tep_db_fetch_array (), переберите его и посмотрите, не было ли найдено не-изображение. Например:

while ($row = tep_db_fetch_assoc($categories_img_query)) {
  if ($row['products_image'] <> 'noimage.jpg'
     or !isset($categories['categories_image'])
  ) {
     $categories['categories_image'] = $row['products_image'];
  }
}

Это также предполагает, что вам не нужно добавлять СПЕЦИФИЧЕСКОЕ изображение для категории, просто любое не-noimage.jpg, если оно доступно.

...