вытащить значение price из БД в скрипт

Тема в разделе "Ошибки и их решения", создана пользователем tp-20, 10 дек 2024.

  1. tp-20

    tp-20 Новичок

    Сообщения:
    6
    Симпатии:
    0
    доброго дня.
    задача: в админке в выпадающем списке товаров кроме названия дополнительно нужно вывести цену price из бд из таблицы oc_product.

    вот кусочек кода в js-файле, где лежит редактируемый код:
    это файл admin/view/javascript/common.js

    for (i = 0; i < json.length; i++) {
    if (!json['category']) {
    html += '<li data-value="' + json['value'] + '"><a href="#">' + json['label'] + '</a></li>';
    }
    }


    Где выделил жирным - там нужно вставить цену.
    Здесь выводится json['value'] - id товара и json['label'] название товара.
    Вот нужно что-то типа json['price'] для цены. Как это сделать? Где прописать, где указать?

    Прилагаю Скриншот для понимания.
     

    Вложения:

    • 8.jpg
      8.jpg
      Размер файла:
      93 КБ
      Просмотров:
      10
  2. Tom

    Tom Специалист

    Сообщения:
    897
    Симпатии:
    304
    Видимо заменить в скрипте Related label: item['name'] на что то типа label: item['name'] + ' (' + item['price'] + ')'
     
  3. tp-20

    tp-20 Новичок

    Сообщения:
    6
    Симпатии:
    0
    Спасибо. Пока не сработало. выводит undefined. (скрин 1).

    в common.js дописал json['price'] (скрин 2)

    а по вашей подсказке в разделе Related дописал label: item['name'] + ' (' + item['price'] + ')'
    в двух файлах, т.к. не уверен, какой именно задействован:
    admin/view/template/catalog/article_form.tpl и
    admin/view/template/catalog/prоduct_form.tpl
    (Скрин 3)
     

    Вложения:

    • 1.jpg
      1.jpg
      Размер файла:
      87,8 КБ
      Просмотров:
      3
    • 2.jpg
      2.jpg
      Размер файла:
      51,8 КБ
      Просмотров:
      3
    • 3.jpg
      3.jpg
      Размер файла:
      78,7 КБ
      Просмотров:
      3
  4. Tom

    Tom Специалист

    Сообщения:
    897
    Симпатии:
    304
    Не нужно ничего трогать в common.js
    Так на вскидку, заменить вывод цены в контроллере
    admin/controller/catalog/product.php
    Здесь
    Код:
      $json[] = array(
                        'product_id' => $result['product_id'],
                        'name'       => strip_tags(html_entity_decode($result['name'], ENT_QUOTES, 'UTF-8')),
                        'model'      => $result['model'],
                        'option'     => $option_data,
                        'price'      => $result['price']
                    );
    'price' => $result['price']
    на
    'price' => $this->currency->format($result['price'], $this->config->get('config_currency'))

    что бы получить отформатированную цену.

    Ну и в шаблоне карточки товара
    admin/view/template/catalog/product_form.twig

    В скрипте

    Код:
      // Related
      $('input[name=\'related\']').autocomplete({
          'source': function(request, response) {
              $.ajax({
                  url: 'index.php?route=catalog/product/autocomplete&user_token={{ user_token }}&filter_name=' + encodeURIComponent(request),
                  dataType: 'json',
                  success: function(json) {
                      response($.map(json, function(item) {
                          return {
                              label: item['name'],
                              value: item['product_id']
                          }
                      }));
                  }
              });
          },
          'select': function(item) {
              $('input[name=\'related\']').val('');
    
              $('#product-related' + item['value']).remove();
    
              $('#product-related').append('<div id="product-related' + item['value'] + '"><i class="fa fa-minus-circle"></i> ' + item['label'] + '<input type="hidden" name="product_related[]" value="' + item['value'] + '" /></div>');
          }
      });
    Вместо [label: item['name'],
    Это label: item['name'] + ' (' + item['price'] + ')',

    Не проверял.
     
    tp-20 нравится это.
  5. tp-20

    tp-20 Новичок

    Сообщения:
    6
    Симпатии:
    0
    большое спасибо! всё работает.
    подскажите последнее: есть товары с нулевой ценой (сняты с производства). как сделать, чтобы они не выводились в выпадающем списке?
    на скриншоте.
     

    Вложения:

    • 1.jpg
      1.jpg
      Размер файла:
      86,1 КБ
      Просмотров:
      10
  6. Tom

    Tom Специалист

    Сообщения:
    897
    Симпатии:
    304
    Ну как вариант, в том же контроллере , где подменяли цену
    до
    Код:
    $json[] = array(
    Добавить проверку
    Код:
    if ($result['price'] <= 0) {
          continue;
    }
    Ocmod
    Код:
    <?xml version="1.0" encoding="UTF-8"?>
    <modification>
        <name>Add Price to Related Products Autocomplete</name>
        <version>1.0.0</version>
        <author>Tom</author>
        <code>Add Price to Related Products Autocomplete</code>
        <link>Add Price to Related Products Autocomplete</link>
    
        <file path="admin/controller/catalog/product.php">
            <operation error="skip">
                <search><![CDATA['product_id' => $related_info['product_id'],]]></search>
                <add position="after"><![CDATA['price'      => $this->currency->format($related_info['price'], $this->config->get('config_currency')),]]></add>
            </operation>
            <operation error="skip">
                <search><![CDATA['price'      => $result['price']]]></search>
                <add position="replace"><![CDATA['price'      => $this->currency->format($result['price'], $this->config->get('config_currency'))]]></add>
            </operation>
            <operation error="skip">
                <search><![CDATA[$json[] = array(]]></search>
                <add position="before"><![CDATA[
                    if ($result['price'] <= 0) {
                        continue;
                    }
                ]]></add>
            </operation>
        </file>
    
        <file path="admin/view/template/catalog/product_form.twig">
            <operation error="skip">
                <search><![CDATA[<div id="product-related{{ product_related.product_id }}"><i class="fa fa-minus-circle"></i> {{ product_related.name }}]]></search>
                <add position="replace"><![CDATA[
                <div id="product-related{{ product_related.product_id }}"><i class="fa fa-minus-circle"></i> {{ product_related.name }}
                    <span style="color: #0088cc; font-size: 12px; margin-left: 10px;">{{ product_related.price }}</span>
                ]]></add>
            </operation>
            <operation error="skip">
                <search><![CDATA[label: item['name'],]]></search>
                <add position="replace"><![CDATA[label: item['name'] + ' (' + item['price'] + ')',]]></add>
            </operation>
        </file>
    </modification>
     
    tp-20 и Tesloz нравится это.