Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Помогите разобраться. vqmod


Recommended Posts

Наткнулся недавно на одно интересное дополнение. Задача его - прятать кнопку "купить" и подгружать водяной знак для товаров. которых нет в наличии.

На странице товара все заработало "на ура", но на странице категории не работает. Открыв код, я обнаружил кое-что интересное:

<file name="catalog/controller/product/category.php">
  <operation>
   <search position="after" index="1"><![CDATA[
   $this->data['products'][] = array(
   ]]></search>
   <add><![CDATA[
   'quantity' => $result['quantity'],
   ]]></add>
  </operation>
</file>
Эта функция записывает в массив контроллера category.php новую переменную, содержащую количество товара. Вроде бы с первого взгляда все правильно, но если внимательнее разобрать цикл, образующий массив, оказывается что данная переменная пуста. Вот цикл:

$results = $this->model_catalog_product->getProducts($data);

  foreach ($results as $result) {
if ($result['image']) {
 $image = $this->model_tool_image->resize($result['image'], $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height'));
} else {
 $image = false;
}

if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
 $price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')));
} else {
 $price = false;
}

if ((float)$result['special']) {
 $special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')));
} else {
 $special = false;
}

if ($this->config->get('config_tax')) {
 $tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price']);
} else {
 $tax = false;
}  

if ($this->config->get('config_review_status')) {
 $rating = (int)$result['rating'];
} else {
 $rating = false;
}

$this->data['products'][] = array(
 'product_id'  => $result['product_id'],
 'thumb'	   => $image,
 'name'		=> $result['name'],
 'description' => mb_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 100) . '..',
 'price'	   => $price,
 'special'	 => $special,
 'tax'		 => $tax,
 'rating'	  => $result['rating'],
 'reviews'	 => sprintf($this->language->get('text_reviews'), (int)$result['reviews']),
 'href'		=> $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'])
);
  }

Этот цикл вытягивает данные из массива в model/catalog/product.php, функция getProducts (26 строка). Но в данной функции нет захвата данных о наличии.

Следовательно, новая переменная

'quantity' => $result['quantity'],

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

PS: версия ОС 1.5.1.3. Файл дополнения в аттаче.

Hide AddToCart 2.0.0.zip

Надіслати
Поділитися на інших сайтах


Писал. Но ответа не получил. На странице загрузки дополнения можете найти мои комменты. Пока пытаюсь разобраться сам, а также спрашиваю совета у более опытных пользователей ОС

Надіслати
Поділитися на інших сайтах


Следовательно, новая переменная пуста и определить наличие товара таким образом невозможно.

не переменная, а индекс ассоциативного массива. значение не пусто. там верный код

Надіслати
Поділитися на інших сайтах

Писал. Но ответа не получил. На странице загрузки дополнения можете найти мои комменты. Пока пытаюсь разобраться сам, а также спрашиваю совета у более опытных пользователей ОС

это дополнение работает.

На странице товара отображает картинку и скрывает кнопку "Купить", на странице категории - только скрывает кнопку "Купить".

так и должно быть:)

Надіслати
Поділитися на інших сайтах


это дополнение работает.

На странице товара отображает картинку и скрывает кнопку "Купить", на странице категории - только скрывает кнопку "Купить".

так и должно быть :)

Допустим. Но с точки зрения юзабилити, не лучше бы сделать так чтобы на странице категории отображалось наличие товара? Кликабельность картинки при этом можно сохранить, добавив в код водяного знака значение href="<?php echo '$this['href'];' ?>" и сменив точку вывода водяного знака. Не подскажете как в данном случае вывести водяной знак?
Надіслати
Поділитися на інших сайтах


Допустим. Но с точки зрения юзабилити, не лучше бы сделать так чтобы на странице категории отображалось наличие товара? Кликабельность картинки при этом можно сохранить, добавив в код водяного знака значение href="<?php echo '$this['href'];' ?>" и сменив точку вывода водяного знака. Не подскажете как в данном случае вывести водяной знак?

работает. вам уже двое это говорят. разбирайтесь почему quality == 0.

водяной знак по аналогии со страницей товара

Надіслати
Поділитися на інших сайтах

Решено!

Причем довольно-таки просто, без всяких там vqmod'ов. В контроллер category.php дописал:

'quantity'	=> $result['quantity'],
В шаблоне category.tpl вывел картинку с водяным знаком:

<?php if($product['quantity'] <= 0) {
	 echo '<img src="image/sold-out.png" width="200" style="position:absolute" />';
	} ?>
То же самое работает в модулях latest, featured, special итд. Только в контроллер 'quantity' нужно дописать. Смотрим результат:

Изображение

  • +1 1
Надіслати
Поділитися на інших сайтах


Добавил процессинг изображений средствами GD2. Теперь изображения товаров, которых нет в наличии будут визуально выделяться черно-белым, или каким-либо другим эффектом. Как только чуть освобожусь - ждите готовый vqmod

Изображение

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.