Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

OpenCart 2.0.1.1: Почему для некоторых товаров нет строк в url_alias ?


Recommended Posts

Приветствую.

 

Правил массово URL для СЕО и заметил, что для некоторых товаров нет строк в табличке url_alias. Товары ничем практически не отличаются кроме названия и модели. У всех товаров в данный момент, в табличке url_alias - колонка keywords пустая. Но процентов 10-15 товаров вообще не имеют записи в этой таблице, хотя также как и другие - добавлялись в ручную, причем цифра в url_alias_id пропущена как бы.

Вот интересно почему так?

Надіслати
Поділитися на інших сайтах


Приветствую.

 

Правил массово URL для СЕО и заметил, что для некоторых товаров нет строк в табличке url_alias. Товары ничем практически не отличаются кроме названия и модели. У всех товаров в данный момент, в табличке url_alias - колонка keywords пустая. Но процентов 10-15 товаров вообще не имеют записи в этой таблице, хотя также как и другие - добавлялись в ручную, причем цифра в url_alias_id пропущена как бы.

Вот интересно почему так?

 

На этот вопрос самый лучший ответ дали в фильме "О чем говорят мужчины" - Может быть потому-что ты...? :)

А если серьезно, то массовые изменения в этом движке часто приносят больше проблем, чем решений.

Из чего создается keyword в таблице url_alias? не может быть такого, что товары оказались с идентичными наименованиями, например, и скрипт не стал создавать дубли? А не может быть такого, что дубли запрещены в таблице url_alias и скрипт не смог записать туда значения дублей?

Надіслати
Поділитися на інших сайтах


p.s. OpenCart 2.0.1.1

 

Это либо к модулю, которым "правил массово и заметил", либо к гадалкам. Другие варианты придумать не могу.

Ничего страшного, спасибо что вообще так глубоко подумали. :)

 

вот это подробно распишите

Да это я так к слову. Просто в этом процессе заметил такую проблему. :) Процесс никак не повлиял на вопрос. посмотрел на дамп боле ранней базы и там уже было то, что я описал
Ну а вообще я просто простенький скрипт написал, который объединяет Name товара и через тире model (уникальная для каждого товара) и далее через транслит таблицу и в базу в табличку url_alias через phpMyAdmin SQL UPDATE .
p.s. Если интересно, то вот код с помощью которого сформировал запросы:

 

<?php

function rus2translit($string) {
    $converter = array(
        'а' => 'a',   'б' => 'b',   'в' => 'v',
        'г' => 'g',   'д' => 'd',   'е' => 'e',
        'ё' => 'e',   'ж' => 'zh',  'з' => 'z',
        'и' => 'i',   'й' => 'y',   'к' => 'k',
        'л' => 'l',   'м' => 'm',   'н' => 'n',
        'о' => 'o',   'п' => 'p',   'р' => 'r',
        'с' => 's',   'т' => 't',   'у' => 'u',
        'ф' => 'f',   'х' => 'h',   'ц' => 'c',
        'ч' => 'ch',  'ш' => 'sh',  'щ' => 'sh',
        'ь' => '',  'ы' => 'y',   'ъ' => '',
        'э' => 'e',   'ю' => 'yu',  'я' => 'ya',
        
        'А' => 'A',   'Б' => 'B',   'В' => 'V',
        'Г' => 'G',   'Д' => 'D',   'Е' => 'E',
        'Ё' => 'E',   'Ж' => 'Zh',  'З' => 'Z',
        'И' => 'I',   'Й' => 'Y',   'К' => 'K',
        'Л' => 'L',   'М' => 'M',   'Н' => 'N',
        'О' => 'O',   'П' => 'P',   'Р' => 'R',
        'С' => 'S',   'Т' => 'T',   'У' => 'U',
        'Ф' => 'F',   'Х' => 'H',   'Ц' => 'C',
        'Ч' => 'Ch',  'Ш' => 'Sh',  'Щ' => 'Sch',
        'Ь' => '',  'Ы' => 'Y',   'Ъ' => '',
        'Э' => 'E',   'Ю' => 'Yu',  'Я' => 'Ya',
    );
    return strtr($string, $converter);
}
function str2url($str) {
    // переводим в транслит
    $str = rus2translit($str);
    // в нижний регистр
    $str = strtolower($str);
    // заменям все ненужное нам на "-"
    $str = preg_replace('~[^-a-z0-9_]+~u', '-', $str);
	// Удаляем "-" идущие подряд
	$str = preg_replace("/[\/_|+ -]+/", '-', $str);
    // удаляем начальные и конечные '-'
    $str = trim($str, "-");
    return $str;
}

$data2 = file('oct_product_description.sql');
$product_id_meta_title = array();
foreach ($data2 as $k => $v) {
	preg_match('/\`product_id\` = (.*?)\,\`language_id\` \= /si', $v, $id);
	preg_match('/,\`meta_title\` = \'(.*?)\',\`meta_description\`/si', $v, $meta_title);
	
	$meta_title = trim($meta_title[1]);
	$product_id_meta_title[$id[1]] = str2url(html_entity_decode($meta_title, ENT_COMPAT, 'UTF-8'));;
}

$data3 = file('oct_url_alias.sql');

foreach ($data3 as $k => $v) {
	preg_match('/,\`query\` = \'(.*?)\',\`keyword\`/si', $v, $product_id);
	$product_id = explode('=', $product_id[1]);
	if ($product_id[0] === 'product_id') {
		
		preg_match('/\`url_alias_id\` = (.*?)\,\`query\` \= /si', $v, $url_alias_id);
		
		preg_match('/,\`keyword\` = \'(.*?)\' \`WHERE \`oct_url_alias\`/si', $v, $keyword);
		
		echo 'UPDATE `oct_url_alias` SET `keyword` = \''.$product_id_meta_title[$product_id[1]].'\' WHERE `oct_url_alias`.`url_alias_id` = '.$url_alias_id[1].';'."\r\n";
	}
}


?>

Из чего создается keyword в таблице url_alias? не может быть такого, что товары оказались с идентичными наименованиями, например, и скрипт не стал создавать дубли? А не может быть такого, что дубли запрещены в таблице url_alias и скрипт не смог записать туда значения дублей?

 

Создаются из уникальных английских букв. :) Не может, я добавляю через PHPMyAdmin. Не может, т.к. в таблице нет строчек для этих товаров изначально. И у меня нет сформированных под них запросов для SQL UPDATE просто потому, что эти запросы формировались на основе этой же таблицы, просто с уникальными keyword.

p.s.В таблице url_alias всего три колонки
url_alias_id - Главная

query - урл (в нашем случае продукта, например product_id=306)
keyword - СЕО урл (Не заполняется, если при создании товара поле СЕО урла не заполнялось)

Ну так вот прикол в том, что было добавлено 800 практически одинаковых по параметрам товаров. Заполнялись одни и те же поля грубо говоря, просто различными данными. :) СЕО урл не заполнялись, поэтому в табличке url_alias  для этих товаров в колонке keyword пустое место. НО некоторые товары не имеют даже запись в это табличке. Вот мне и интересно из за чего так. То есть я понимаю, что никто мне ответ не даст, но хотя бы может понять в каком направлении посмотреть, а то я вообще в прострации от такого. (Уверен конечно, что если добавить СЕОурл в ручную, в товары которые отсутствуют в этой табличке, они там появятся.....)



p.s. OpenCart 2.0.1.1
Надіслати
Поділитися на інших сайтах


Просто ты неправильно ставишь вопрос, или описываешь ситуацию. Я себе писал скрипт, который заполняет поле keyword автоматически.

для этого он перебирает все существующие продукты, берет для каждого ID, имя бренда и модель. Так как у расходки вместо модели может быть просто название (диск пильный, например), мне нужно было добавить уникальность. Именно для этого я тяну ID товара.

Таким образом, у меня все keyword заполняются автоматически и являются уникальными.

Например, товар с ID 25648 - Бур SDS MAX Makita P-77883

получает автоматом keyword 25648-makita-p-77883

Таблица url_alias заполняется командой UPDATE - то есть, существующие поля презаписываются, если есть изменения, а новые - добавляются. Уникальность установлена на поле query. Таким образом, сколько бы я товаров не добавил через заливку прайсов, у меня автоматом к ним пропишется SEO_URL

Естественно. query и keyword записываются в соответствии друг другу, а alias_id - пишется просто по порядку, он меня не интересует.

 

P.S. - через phpMyAdmin большие объемы не загрузишь - я пользуюсь программой Navicat.

Надіслати
Поділитися на інших сайтах


СЕО урл не заполнялись, поэтому в табличке url_alias для этих товаров в колонке keyword пустое место.

Это однозначно ошибка. Не должно быть таких записей в поле url_alias. С одинаковыми кейвордами (хоть это допускается схемой БД, но на прикладном уровне в опенкарт это место возникновения ошибки) и тем более с пустым значением кейворда.

НО некоторые товары не имеют даже запись в это табличке.

Вот именно так и должно быть, если SEO URL в админке у товара не заполнен.

Вот мне и интересно из за чего так. То есть я понимаю, что никто мне ответ не даст

Уже дали и не раз. Из-за скрипта, заполняющего эту таблицу записями.

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.