/**
* 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()
2 thoughts on “BagFix SEO-1”
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.
Очень давно сотрудничаю с Кириллом, благодарен ему за модуль, который сэкономил уйму времени при работе с номенклатурой и её синхронизацией.
Благодарен ему за оперативную помощь в пусконаладочных частях при работе с модулем.
(Краснодар)
Доброго времени.
А что исправляет это исправление?