Skip to main content

Название товара и варианты его заполнения по данным выгрузки

2 декабря, 2021 16:41
Просмотров 263
Section background
Версия: 1.121.0 | Последнее обновление: 01 марта 2023 | открыть

Название или заголовок товара на сайте это данные, которые записываются и содержатся в поле post_title.

В стандартных минимальных данных выгрузки, присутствует узел «Товар->Наименование«, данные из которого попадают в название товара на сайте.

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

Давайте рассмотрим ряд самых частых вариантов, ну и начнем с самого первого. В примерах xml, для удобства оставлены только интересующие узлы.

Поведение 1. Название товара на сайте из данных узла `Товар->Наименование`

Самых простой и стандартный вариант. Название номенклатуры поступает в узле «Товар->Наименование», данные из которого попадают в название товара на сайте, то есть в post_title.

Пример xml.

<Товар>
    ...
    <Наименование>Содержимое названия товара</Наименование>
    ...
</Товар>

Поведение 2. Название из данных реквизита `Полное наименование`

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

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

Если настройка включена и у товара есть реквизит с данными, то информация из него будет записана в название товара. Если реквизита нет или данные в нем пусты, то будут использованы данные из «Товар->Наименование»

Пример xml.

<Товар>
    ...
    <ЗначенияРеквизитов>
        ...
        <ЗначениеРеквизита>
            <Наименование>Полное наименование</Наименование>
            <Значение>Это попадет в название товара</Значение>
        </ЗначениеРеквизита>
        ...
    </ЗначенияРеквизитов>
    ...
</Товар>

Поведение 3. Название по данным из какого-то реквизита.

Предположим, вы хотите заполнить название товара на сайте на основании данных какого-то нестандартного реквизита «РеквизитДляНазвания», который содержится в вашей выгрузке.

Пример xml.

<Товар>
    ...
    <ЗначенияРеквизитов>
        ...
        <ЗначениеРеквизита>
            <Наименование>РеквизитДляНазвания</Наименование>
            <Значение>Это попадет в название</Значение>
        </ЗначениеРеквизита>
        ...
    </ЗначенияРеквизитов>
    ...
</Товар>

В этом случае, воспользуемся парой фильтров, чтобы записать в название товара (post_title) значение из этого реквизита.

Пример:

// набор параметров при обновлении поста товара
\add_filter('itglx_wc1c_update_post_product_params','postProductParams', 10, 2);

// набор параметров при создании поста товара
\add_filter('itglx_wc1c_insert_post_new_product_params', 'postProductParams', 10, 2);

function postProductParams($params, $element)
{
    foreach ($element->ЗначенияРеквизитов->ЗначениеРеквизита as $requisite) {
        $requisiteName = trim((string) $requisite->Наименование);

        // если это нужный реквизит, то используем его значение для названия
        if ($requisiteName === 'РеквизитДляНазвания') {
            $params['post_title'] = html_entity_decode(trim((string) $requisite->Значение));

            break;
        }
    }

    return $params;
}

Поведение 4. Название товара по данным из свойства.

Предположим, для названия товара на сайте в данных товара в выгрузке есть какое-то строковое (то есть не Справочник) свойство «Название для сайта», которое имеет GUID — ffe29f44-a7f1-11ea-a08c-b42e99cfeeed. Подробнее по данным свойств — открыть

Пример xml в данных товара.

<Товар>
    ...
    <ЗначенияСвойств>
        ...
        <ЗначенияСвойства>
            <Ид>ffe29f44-a7f1-11ea-a08c-b42e99cfeeed</Ид>
            <Значение>Это попадет в название товара</Значение>
        </ЗначенияСвойства>
        ...
    </ЗначенияСвойств>
    ...
</Товар>

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

Во-вторых, воспользуемся все теми же фильтрами, чтобы направить значение из свойства в название товара, то есть в post_title

Пример:

// набор параметров при обновлении поста товара
\add_filter('itglx_wc1c_update_post_product_params','postProductParams', 10, 2);

// набор параметров при создании поста товара
\add_filter('itglx_wc1c_insert_post_new_product_params', 'postProductParams', 10, 2);

function postProductParams($params, $element)
{
    foreach ($element->ЗначенияСвойств->ЗначенияСвойства as $option) {
        $guid = trim((string) $option->Ид);

        // если это нужное свойство, то используем его значение для названия
        if ($guid === 'ffe29f44-a7f1-11ea-a08c-b42e99cfeeed') {
            $params['post_title'] = html_entity_decode(trim((string) $option->Значение));

            break;
        }
    }

    return $params;
}

Поведение 5. Название товара по значению из кастомного узла

Предположим, ваша конфигурация в 1С доработана и название, которое должно попасть в товар на сайте, содержится в каком-то кастомном узле, например, «Товар->НазваниеДляСайта«

Пример xml.

<Товар>
    ...
    <НазваниеДляСайта>Содержимое названия товара</НазваниеДляСайта>
    ...
</Товар>

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

Пример:

// набор параметров при обновлении поста товара
\add_filter('itglx_wc1c_update_post_product_params','postProductParams', 10, 2);

// набор параметров при создании поста товара
\add_filter('itglx_wc1c_insert_post_new_product_params', 'postProductParams', 10, 2);

function postProductParams($params, $element)
{ 
   $params['post_title'] = html_entity_decode(trim((string) $element->НазваниеДляСайта));

    return $params;
}

Поделиться: