Перейти к содержанию
Sanek

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

Рекомендуемые сообщения

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Правил массово URL для СЕО

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Правил массово 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 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.