BagFix SEO-1

Версия 1.6
/**
 * ver 5
 * update 2019-07-24
 * Генерит SEO переменные шаблона для товара
 */
public function seoGenerate() {

    $now = date('Y-m-d H:i:s');
    $result = array(
        'error'         => '',
        'product'       => 0,
        'category'      => 0,
        'manufacturer'  => 0
    );

    if (empty($this->TAB_FIELDS)) {
        $this->TAB_FIELDS = $this->defineTableFields();
    }

    $language_id = $this->getLanguageId($this->config->get('config_language'));

    if ($this->config->get('exchange1c_seo_product_mode') != 'disable') {
        // Выбрать все товары, нужны поля:
        // name, sku, model, manufacturer_id, description, product_id, category_id
        $no_update_description = array();

        if (isset($this->TAB_FIELDS['product_description']['meta_h1'])) {
            $sql = "SELECT
                p.product_id,
                p.sku,
                p.model,
                p.manufacturer_id,
                pd.name,
                pd.tag,
                pd.meta_title,
                pd.meta_description,
                pd.meta_keyword,
                pd.meta_h1
                FROM `" . DB_PREFIX . "product` p
                LEFT JOIN `" . DB_PREFIX . "product_description` pd ON (p.product_id = pd.product_id)
                WHERE pd.language_id = " . $language_id;
        } else {
            $sql = "SELECT
                p.product_id,
                p.sku,
                p.model,
                p.manufacturer_id,
                pd.name,
                pd.tag,
                pd.meta_title,
                pd.meta_description,
                pd.meta_keyword
                FROM `" . DB_PREFIX . "product` p
                LEFT JOIN `" . DB_PREFIX . "product_description` pd ON (p.product_id = pd.product_id)
                WHERE pd.language_id = " . $language_id;
            array_push($no_update_description, 'meta_h1');
        }

        $query = $this->query($sql);
        if ($query->num_rows) {
            foreach ($query->rows as $data) {

                $this->log($data, 2);
                $result['product']++;
                $data_old = $data;
                if ($this->config->get('exchange1c_seo_product_mode') != 'disable')
                    $update = $this->seoGenerateProduct($data['product_id'], $data);
                    $this->log($update, 2);

                if (!$update) {
                    $this->log("Нечего обновлять!", 2);
                    continue;
                }

                // Сравнение
                $update_fields = $this->compareArraysData($update, $data_old);

                // Если есть что обновлять
                if ($update_fields) {
                    $sql_set = $this->prepareQuery($update_fields, 'set');
                    $this->query(
                        "UPDATE `" . DB_PREFIX . "product_description`
                        SET " . $sql_set . "
                        WHERE `product_id` = " . (int)$data['product_id'] . "
                        AND `language_id` = " . $language_id
                    );
                }
            }
        }
    }

    // Категории

    if ($this->config->get('exchange1c_seo_category_mode') != 'disable') {
        // Выбрать все категории, нужны поля:
        // name, sku, model, manufacturer_id, description, product_id, category_id
        $no_update_description = array();
        if (isset($this->TAB_FIELDS['category_description']['meta_h1'])) {
            $sql = "SELECT c.category_id, cd.name, cd.meta_title, cd.meta_description, cd.meta_keyword, cd.meta_h1
                FROM `" . DB_PREFIX . "category` c
                LEFT JOIN `" . DB_PREFIX . "category_description` cd ON (c.category_id = cd.category_id)
                WHERE cd.language_id = " . $language_id;
        } else {
            $sql = "SELECT c.category_id, cd.name, cd.meta_title, cd.meta_description, cd.meta_keyword
                FROM `" . DB_PREFIX . "category` c
                LEFT JOIN `" . DB_PREFIX . "category_description` cd
                ON (c.category_id = cd.category_id)
                WHERE cd.language_id = " . $language_id;
            array_push($no_update_description, 'meta_h1');
        }

        $query = $this->query($sql);
        if ($query->num_rows) {
            foreach ($query->rows as $data) {

                $result['category']++;
                if ($this->config->get('exchange1c_seo_category_mode') != 'disable')
                    $this->seoGenerateCategory($data['category_id'], $data);

                // Сравнение
                $update_fields = $this->compareArraysData($data_old, $data, $no_update_description);

                // Если есть что обновлять
                if ($update_fields) {
                    $sql_set = $this->prepareQuery($update_fields, 'set');
                    $this->query(
                        "UPDATE `" . DB_PREFIX . "category_description`
                        SET " . $sql_set . "
                        WHERE `category_id` = " . (int)$data['category_id'] . "
                        AND `language_id` = " . $language_id
                    );
                    $this->query(
                        "UPDATE `" . DB_PREFIX . "category`
                        SET `date_modified` = '" . $now . "'
                        WHERE `category_id` = " . (int)$data['category_id']
                    );
                }
            }
        }
    }

    // Производители

    if ($this->config->get('exchange1c_seo_manufacturer_mode') != 'disable') {
        if (isset($this->TAB_FIELDS['manufacturer_description'])) {
            // Выбрать все категории, нужны поля:
            // name, sku, model, manufacturer_id, description, product_id, category_id
            $no_update_description = array();
            if (isset($this->TAB_FIELDS['manufacturer_description']['meta_h1'])) {
                $sql = "SELECT m.manufacturer_id, md.name, md.meta_title, md.meta_description, md.meta_keyword, md.meta_h1
                    FROM `" . DB_PREFIX . "manufacturer` m
                    LEFT JOIN `" . DB_PREFIX . "manufacturer_description` md
                    ON (m.manufacturer_id = md.manufacturer_id)
                    WHERE md.language_id = " . $language_id;
            } else {
                $sql = "SELECT m.manufacturer_id, md.name, md.meta_title, md.meta_description, md.meta_keyword
                    FROM `" . DB_PREFIX . "manufacturer` m
                    LEFT JOIN `" . DB_PREFIX . "manufacturer_description` md ON (m.manufacturer_id = md.manufacturer_id)
                    WHERE md.language_id = " . $language_id;
                array_push($no_update_description, 'meta_h1');
            }

            $query = $this->query($sql);
            if ($query->num_rows) {
                foreach ($query->rows as $data) {

                    $result['manufacturer']++;

                    $data_old = $data;

                    if ($this->config->get('exchange1c_seo_manufacturer_mode') != 'disable')
                        $update = $this->seoGenerateManufacturer($data['manufacturer_id'], $data);

                    if (!$update)
                        continue;

                    // Сравнение
                    $update_fields = $this->compareArraysData($data_old, $data, $no_update_description);

                    // Если есть что обновлять
                    if ($update_fields) {
                        $sql_set = $this->prepareQuery($update_fields, 'set');
                        $this->query(
                            "UPDATE `" . DB_PREFIX . "category_description` SET " . $sql_set . "
                            WHERE `category_id` = " . (int)$data['category_id'] . "
                            AND `language_id` = " . $language_id
                        );
                        $this->query(
                            "UPDATE `" . DB_PREFIX . "category`
                            SET `date_modified` = '" . $now . "'
                            WHERE `category_id` = " . (int)$data['category_id']
                        );
                    }
                }
            }

        }
    }
    return $result;

} // seoGenerate()
Кириллов Виталий
Программист 1С, php, java, jquery. Мастер по ремонту электроники

2 thoughts on “BagFix SEO-1

  1. Очень давно сотрудничаю с Кириллом, благодарен ему за модуль, который сэкономил уйму времени при работе с номенклатурой и её синхронизацией.
    Благодарен ему за оперативную помощь в пусконаладочных частях при работе с модулем.
    (Краснодар)

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.