В этом уроке мы рассмотрим детали пользовательских SEO-дружественных URL. Это важный аспект, на который следует обратить внимание при разработке пользовательских модулей, и он также влияет на общий рейтинг в поисковых системах.
Мы будем использовать последнюю версию OpenCart, поэтому убедитесь, что вы установили ее, чтобы следовать коду.
Что мы собираемся сделать — в двух словах
Вот краткое изложение шагов, которые нам необходимо предпринять для создания пользовательских URL-адресов в OpenCart:
- Во-первых, нам нужно понять, как это работает в ядре.
- Мы пройдем через изменения, необходимые в основных файлах.
- Мы кратко рассмотрим запросы SQL, чтобы вставить наши пользовательские сопоставления URL.
- Мы рассмотрим, как использовать встроенные функции перезаписи.
Итак, это быстрый взгляд на то, что будет дальше. Давайте перейдем к первой теме.
Отображения URL в базе данных
Прежде всего, важно понять, как работают URL-адреса SEO в ядре OpenCart.
Идите дальше и изучите записи в таблице MySQL «url_alias», используя phpMyAdmin или что-то подобное. Вы увидите такие отображения.
|
1
2
3
4
|
product_id=48 ipod-classic
category_id=20 desktops
manufacturer_id=8 apple
information_id=6 delivery
|
Здесь нужно отметить два важных столбца. Первый столбец запроса содержит фактический путь, а второй — ключевое слово , в котором хранится псевдоним SEO для этого URL.
Как видите, существуют сопоставления для различных объектов, таких как продукт, категория, информация и производитель. Всякий раз, когда какая-либо сущность сохраняется в серверной части OpenCart, в эту таблицу добавляется связанная запись.
Во внешнем интерфейсе, когда пользователь обращается к URL-адресу, OpenCart находит соответствующее отображение из таблицы «url_alias». Таким образом, фактическая сущность сопоставляется с SEO-дружественным URL.
Давайте откроем файл catalog/controller/common/seo_url.php и рассмотрим следующий фрагмент из метода index .
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
public function index() {
// Add rewrite to url class
if ($this->config->get(‘config_seo_url’)) {
$this->url->addRewrite($this);
}
// Decode URL
if (isset($this->request->get[‘_route_’])) {
$parts = explode(‘/’, $this->request->get[‘_route_’]);
// remove any empty arrays from trailing
if (utf8_strlen(end($parts)) == 0) {
array_pop($parts);
}
foreach ($parts as $part) {
$query = $this->db->query(«SELECT * FROM » . DB_PREFIX . «url_alias WHERE keyword = ‘» . $this->db->escape($part) . «‘»);
if ($query->num_rows) {
$url = explode(‘=’, $query->row[‘query’]);
if ($url[0] == ‘product_id’) {
$this->request->get[‘product_id’] = $url[1];
}
if ($url[0] == ‘category_id’) {
if (!isset($this->request->get[‘path’])) {
$this->request->get[‘path’] = $url[1];
} else {
$this->request->get[‘path’] .= ‘_’ .
}
}
if ($url[0] == ‘manufacturer_id’) {
$this->request->get[‘manufacturer_id’] = $url[1];
}
if ($url[0] == ‘information_id’) {
$this->request->get[‘information_id’] = $url[1];
}
if ($query->row[‘query’] && $url[0] != ‘information_id’ && $url[0] != ‘manufacturer_id’ && $url[0] != ‘category_id’ && $url[0] != ‘product_id’) {
$this->request->get[‘route’] = $query->row[‘query’];
}
} else {
$this->request->get[‘route’] = ‘error/not_found’;
break;
}
}
if (!isset($this->request->get[‘route’])) {
if (isset($this->request->get[‘product_id’])) {
$this->request->get[‘route’] = ‘product/product’;
} elseif (isset($this->request->get[‘path’])) {
$this->request->get[‘route’] = ‘product/category’;
} elseif (isset($this->request->get[‘manufacturer_id’])) {
$this->request->get[‘route’] = ‘product/manufacturer/info’;
} elseif (isset($this->request->get[‘information_id’])) {
$this->request->get[‘route’] = ‘information/information’;
}
}
if (isset($this->request->get[‘route’])) {
return new Action($this->request->get[‘route’]);
}
}
}
|
Как вы можете видеть, мы выбираем соответствующую запись из таблицы «url_alias». После этого параметр запроса анализируется и возвращается соответствующий внутренний путь.
Так вот, как это работает в ядре. К сожалению, настройка работает только для основных URL-адресов — для пользовательских URL-адресов нам необходимо изменить основной код. Это рецепт нашего следующего раздела.
Основные изменения файла
Откройте файл catalog/controller/common/seo_url.php и замените метод rewrite следующим.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
public function rewrite($link) {
$url_info = parse_url(str_replace(‘&’, ‘&’, $link));
$url = »;
$data = array();
parse_str($url_info[‘query’], $data);
foreach ($data as $key => $value) {
if (isset($data[‘route’])) {
if (($data[‘route’] == ‘product/product’ && $key == ‘product_id’) || (($data[‘route’] == ‘product/manufacturer/info’ || $data[‘route’] == ‘product/product’) && $key == ‘manufacturer_id’) || ($data[‘route’] == ‘information/information’ && $key == ‘information_id’)) {
$query = $this->db->query(«SELECT * FROM » . DB_PREFIX . «url_alias WHERE `query` = ‘» . $this->db->escape($key . ‘=’ . (int)$value) . «‘»);
if ($query->num_rows && $query->row[‘keyword’]) {
$url .= ‘/’ .
unset($data[$key]);
}
} elseif ($key == ‘path’) {
$categories = explode(‘_’, $value);
foreach ($categories as $category) {
$query = $this->db->query(«SELECT * FROM » . DB_PREFIX . «url_alias WHERE `query` = ‘category_id=» . (int)$category . «‘»);
if ($query->num_rows && $query->row[‘keyword’]) {
$url .= ‘/’ .
} else {
$url = »;
break;
}
}
unset($data[$key]);
// OUR CUSTOM CODE
} else {
$query = $this->db->query(«SELECT * FROM » . DB_PREFIX . «url_alias WHERE `query` = ‘» . $data[‘route’] . «‘»);
if ($query->num_rows && $query->row[‘keyword’]) {
$url .= ‘/’ .
} else {
$url = »;
break;
}
}
// OUR CUSTOM CODE
}
}
if ($url) {
unset($data[‘route’]);
$query = »;
if ($data) {
foreach ($data as $key => $value) {
$query .= ‘&’ .
}
if ($query) {
$query = ‘?’
}
}
return $url_info[‘scheme’] .
} else {
return $link;
}
}
|
Метод rewrite используется для преобразования внутреннего URL-адреса в оптимизированный для SEO. Но он делает это только для внутренних URL. Следовательно, нам нужно добавить собственный код, чтобы он работал и для наших пользовательских модулей. В наших изменениях кода мы предоставили последний случай, который загружает отображение для нашего пользовательского модуля. Мы еще не добавили наше пользовательское сопоставление, поэтому давайте сделаем это в следующем разделе.
Хотя мы изменили файл ядра напрямую, это просто ради простоты. Вы должны использовать OCMOD, чтобы изменить файл ядра без его фактического изменения.
Добавить записи MySQL
В этом разделе мы добавим SEO-сопоставление URL для нашего пользовательского модуля. Опять же, это простой SQL для примера — вы можете добиться этого с помощью скриптов установки модуля.
|
1
|
INSERT INTO `url_alias` (`query`, `keyword`) VALUES (‘custom/custom’, ‘custom-rewrite’);
|
Иди вперед и запусти его в своей базе данных OpenCart.
В следующем и последнем разделе мы увидим, как использовать вспомогательную функцию для создания SEO-дружественных ссылок.
Как это устроено
Создайте новый файл catalog/controller/custom/custom.php со следующим содержимым.
|
1
2
3
4
5
6
7
|
<?php
class ControllerCustomCustom extends Controller {
function index() {
$data[‘customlink’] = $this->url->link(‘custom/custom’);
$this->response->setOutput(‘<a href=»‘.$data[‘customlink’].'»>Custom URL Rewrite Link</a>’);
}
}
|
Теперь в интерфейсе откройте URL-адрес http://www.yourstore.com/index.php?route=custom/custom .
Да, это простой белый экран только с одной ссылкой, и это то, что мы намеревались. Здесь важно отметить URL этой ссылки — теперь она оптимизирована для SEO! Нажмите на него, и он загрузит ту же страницу, так как мы добавили отображение для этого в таблицу «url_alias».
Итак, вот и вся концепция, продемонстрированная простым способом. Вы можете расширить его и создать модель для вставки SEO-дружественных ссылок для вашего пользовательского модуля.
Вывод
Сегодня мы обсудили важную тему в OpenCart — настраиваемые оптимизированные для SEO URL-адреса. Мы использовали очень простой подход, чтобы объяснить это, и я надеюсь, что это было полезно для вас.
Если вы ищете дополнительные инструменты OpenCart, утилиты, расширения и т. Д., Которые вы можете использовать в своих собственных проектах или для собственного образования, не забудьте посмотреть, что у нас есть на рынке .
Не стесняйтесь оставлять свои запросы и предложения, используя канал ниже.