Показать сообщение отдельно
  #23 (permalink)  
Старый 03.12.2019, 18:52
Профессор
Отправить личное сообщение для Триви Посмотреть профиль Найти все сообщения от Триви
 
Регистрация: 23.04.2010
Сообщений: 354

Нужно вывести `select` во всех товарах в разделе Рекомендуем на главной странице.

1. Беру за основу для копирования кода контроллер `mysite\catalog\controller\product/product.php` (1.1)
и шаблон к нему `mysite/catalog/view/theme/mysite/template/product/product.twig` (1.2)

2. Открываю контроллер нужного модуля `mysite/catalog/controller/extension/module/featured.php` (2.1)
и шаблон к нему `mysite/catalog/view/theme/mysite/template/extension/module/featured.twig` (2.2)

3. Копирую в цикл файла 2.1, перебирающий товары, кусок кода из 1.1, отвечающий за этот option. Меняю `foreach ($this->model_catalog_product->getProductOptions($this->request->get['product_id']) as $option) {...}`
на
`foreach ($this->model_catalog_product->getProductOptions($product_id) as $option) {...}`
Вот этот кусок:
$data['options'] = array();

					foreach ($this->model_catalog_product->getProductOptions($product_id) as $option) {
						$product_option_value_data = array();

						foreach ($option['product_option_value'] as $option_value) {
							if (!$option_value['subtract'] || ($option_value['quantity'] > 0)) {
								if ((($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) && (float)$option_value['price']) {
									$price = $this->currency->format($this->tax->calculate($option_value['price'], $product_info['tax_class_id'], $this->config->get('config_tax') ? 'P' : false), $this->session->data['currency']);
								} else {
									$price = false;
								}

								$product_option_value_data[] = array(
									'product_option_value_id' => $option_value['product_option_value_id'],
									'option_value_id'         => $option_value['option_value_id'],
									'name'                    => $option_value['name'],
									'image'                   => $this->model_tool_image->resize($option_value['image'], 50, 50),
									'price'                   => $price,
									'price_prefix'            => $option_value['price_prefix']
								);
							}
						}

						$data['options'][] = array(
							'product_option_id'    => $option['product_option_id'],
							'product_option_value' => $product_option_value_data,
							'option_id'            => $option['option_id'],
							'name'                 => $option['name'],
							'type'                 => $option['type'],
							'value'                => $option['value'],
							'required'             => $option['required']
						);
					}


Далее копирую из шаблона 1.2 в шаблон 2.2 следующее:
{% if options %}
            {% for option in options %}
            {% if option.type == 'select' %}
            <div class="form-group{% if option.required %} required {% endif %}">
              <label class="control-label" for="input-option{{ option.product_option_id }}">{{ option.name }}</label>
              <select name="option[{{ option.product_option_id }}]" id="input-option{{ option.product_option_id }}" class="form-control">
                <option value="">{{ text_select }}</option>
                {% for option_value in option.product_option_value %}
                <option value="{{ option_value.product_option_value_id }}">{{ option_value.name }}
                {% if option_value.price %}
                ({{ option_value.price_prefix }}{{ option_value.price }})
                {% endif %} </option>
                {% endfor %}
              </select>
            </div>
            {% endif %}


В результате в шаблон передаётся массив данных последнего товара в цикле и всем товарам прописывыется этот селект. Сделал проверку print_r($data); Да, так и есть.
Т.о. придётся городить многомерные массивы на PHP, чтобы в product_id запихать ещё и соответствующий ему опшен?

По сути уже в модуль лезу и это настораживает.

В ту ли сторону я вообще начал ковырять? Или есть что-то уже написанное и не нужно вовсе лезть в эти дебри?

Последний раз редактировалось Триви, 03.12.2019 в 19:02.
Ответить с цитированием