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

Автор: admin

13 декабря 2022

Название или заголовок товара на сайте это данные, которые записываются и содержатся в поле 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; }

Копирование материала разрешено с указанием ссылки на первоисточник

Подпишитесь на новые статьи