в OpenCart

SeoPro OpenCart 1.5.5.1

Продолжаю изучать OpenCart, использую версию 1.5.5.1, под неё не нашёл SeoPro без vQmod, поэтому решил сделать небольшой мануал по установке SeoPro на OpenCart 1.5.5.1 без vQmod.

1. Выполнить запрос через phpmyadmin в базе вашего магазина (если у вас есть приставки в БД, то нужно её добавить перед product_to_category, например oc_product_to_category)

	ALTER TABLE `product_to_category` ADD `main_category` tinyint(1) NOT NULL DEFAULT '0';

2. Копируем файл seo_pro в папку catalog/controller/common
3. Заменяем в файле index.php эту строку

$controller->addPreAction(new Action('common/seo_url'));

на эту

if (!$seo_type = $config->get('config_seo_url_type')) {
$seo_type = 'seo_url';
}
$controller->addPreAction(new Action('common/' . $seo_type));

4. Файл admin/controller/catalog/product.php после строки

$this->data['entry_layout'] = $this->language->get('entry_layout');

добавляем

		$this->data['entry_main_category'] = $this->language->get('entry_main_category');

после строки

$this->data['product_categories'] = array();

добавляем

		if (isset($this->request->post['main_category_id'])) {
			$this->data['main_category_id'] = $this->request->post['main_category_id'];
		} elseif (isset($product_info)) {
			$this->data['main_category_id'] = $this->model_catalog_product->getProductMainCategoryId($this->request->get['product_id']);
		} else {
			$this->data['main_category_id'] = 0;
		}

5. Файл admin/controller/setting/setting.php после строки

$this->data['entry_encryption'] = $this->language->get('entry_encryption');

добавляем

		$this->data['entry_seo_url'] = $this->language->get('entry_seo_url');
		$this->data['entry_seo_url_type'] = $this->language->get('entry_seo_url_type');
		$this->data['entry_seo_url_include_path'] = $this->language->get('entry_seo_url_include_path');
		$this->data['entry_seo_url_postfix'] = $this->language->get('entry_seo_url_postfix');

после строки

$this->data['config_seo_url'] = $this->config->get('config_seo_url');

добавляем

		if (isset($this->request->post['config_seo_url_type'])) {
			$this->data['config_seo_url_type'] = $this->request->post['config_seo_url_type'];
		} elseif ($this->config->get('config_seo_url_type')) {
			$this->data['config_seo_url_type'] = $this->config->get('config_seo_url_type');
		} else {
			$this->data['config_seo_url_type'] = 'seo_url';
		}

		$this->data['seo_types'] = array();
		$this->data['seo_types'][] = array('type' => 'seo_url', 'name' => $this->language->get('text_seo_url'));
		$this->data['seo_types'][] = array('type' => 'seo_pro', 'name' => $this->language->get('text_seo_pro'));

		if (isset($this->request->post['config_seo_url_include_path'])) {
			$this->data['config_seo_url_include_path'] = $this->request->post['config_seo_url_include_path'];
		} else {
			$this->data['config_seo_url_include_path'] = $this->config->get('config_seo_url_include_path');
		}

		if (isset($this->request->post['config_seo_url_postfix'])) {
			$this->data['config_seo_url_postfix'] = $this->request->post['config_seo_url_postfix'];
		} else {
			$this->data['config_seo_url_postfix'] = $this->config->get('config_seo_url_postfix');
		}

6. Файл admin/language/*/setting/setting.php после строки

// Text

добавить

$_['text_seo_url']					= 'Default';
$_['text_seo_pro']					= 'SeoPro';
$_['entry_seo_url_type']			= 'Тип ЧПУ:';
$_['entry_seo_url_include_path']	= 'ЧПУ товаров с категориями:/category/subcategory/product
(только для SeoPro)';
$_['entry_seo_url_postfix']			= 'Окончание ЧПУ:Например .html
(только для SeoPro)';

7. Файл admin/language/*/catalog/product.php после строки

// Text

добавить

$_['entry_main_category']     = "Категория:";

8. Файл admin/model/catalog/product.php перед строкой

if (isset($data['product_related'])) {

добавить

			if (isset($data['main_category_id']) && $data['main_category_id'] > 0) {

			$this->db->query("DELETE FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . (int)$product_id . "' AND category_id = '" . (int)$data['main_category_id'] . "'");
			$this->db->query("INSERT INTO " . DB_PREFIX . "product_to_category SET product_id = '" . (int)$product_id . "', category_id = '" . (int)$data['main_category_id'] . "', main_category = 1");
		} elseif (isset($data['product_category'][0])) {
			$this->db->query("UPDATE " . DB_PREFIX . "product_to_category SET main_category = 1 WHERE product_id = '" . (int)$product_id . "' AND category_id = '" . (int)$data['product_category'][0] . "'");
		}

перед строкой

public function getProductRelated($product_id) {

добавить

	public function getProductMainCategoryId($product_id) {
		$query = $this->db->query("SELECT category_id FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . (int)$product_id . "' AND main_category = '1' LIMIT 1");

		return ($query->num_rows ? (int)$query->row['category_id'] : 0);
	}

9. Файл admin/view/template/catalog/product_form.tpl перед строкой

<tr>
<td><?php echo $entry_category; ?></td>

добавить

            <tr>
	      <td><?php echo $entry_main_category; ?></td>
              <td><select name="main_category_id">
                <option value="0" selected="selected"><?php echo $text_none; ?></option>
                <?php foreach ($product_categories as $category) { ?>
                <?php if ($category['category_id'] == $main_category_id) { ?>
                <option value="<?php echo $category['category_id']; ?>" selected="selected"><?php echo $category['name']; ?></option>
                <?php } else { ?>
                <option value="<?php echo $category['category_id']; ?>"><?php echo $category['name']; ?></option>
                <?php } ?>
                <?php } ?>
              </select></td>
            </tr>

10. Файл admin/view/template/setting/setting.tpl перед строкой

<tr>
<td><?php echo $entry_maintenance; ?></td>

добавить

            <tr>
              <td><?php echo $entry_seo_url_type; ?></td>
              <td><select name="config_seo_url_type">
                <?php foreach ($seo_types as $seo_type) { ?>
                <?php if ($seo_type['type'] == $config_seo_url_type) { ?>
                <option value="<?php echo $seo_type['type']; ?>" selected="selected"><?php echo $seo_type['name']; ?></option>
                <?php } else { ?>
                <option value="<?php echo $seo_type['type']; ?>"><?php echo $seo_type['name']; ?></option>
                <?php } ?>
                <?php } ?>
              </select></td>
            </tr>
            <tr>
              <td><?php echo $entry_seo_url_include_path; ?></td>
              <td><?php if ($config_seo_url_include_path) { ?>
                <input type="radio" name="config_seo_url_include_path" value="1" checked="checked" />
                <?php echo $text_yes; ?>
                <input type="radio" name="config_seo_url_include_path" value="0" />
                <?php echo $text_no; ?>
                <?php } else { ?>
                <input type="radio" name="config_seo_url_include_path" value="1" />
                <?php echo $text_yes; ?>
                <input type="radio" name="config_seo_url_include_path" value="0" checked="checked" />
                <?php echo $text_no; ?>
                <?php } ?></td>
            </tr>
            <tr>
              <td><?php echo $entry_seo_url_postfix; ?></td>
              <td><input type="text" name="config_seo_url_postfix" value="<?php echo $config_seo_url_postfix; ?>" size="3" /></td>
            </tr>

Оставить комментарий

Комментарии

  1. Очень важно, если не открываются производители, то нужно проделать следующее:
    Если в seopro.php у вас есть строчка:
    $this->request->get[‘route’] = ‘product/manufacturer/product’;

    то её нужно поменять на эту:
    $this->request->get[‘route’] = ‘product/manufacturer/info’;

  2. Окончание ЧПУ:Например .html (только для SeoPro)

    Notice: Undefined variable: config_seo_url_postfix in /var/www/vh56652/data/www/site.ru/admin/view/template/setting/setting.tpl on line 951

  3. Здравствуйте. Добавляла чпу на сайт и столкнулась с такой ошибкой:Parse error: syntax error, unexpected T_PROTECTED in /home/host1313899/buttoil.ru/htdocs/www/admin/controller/setting/setting.php on line 1065.

    В файле на этой строке вот что:
    protected function validate() {
    if (!$this->user->hasPermission(‘modify’, ‘setting/setting’)) {
    $this->error[‘warning’] = $this->language->get(‘error_permission’);
    }
    if (!$this->request->post[‘config_name’]) {
    $this->error[‘name’] = $this->language->get(‘error_name’);
    }

    if ((utf8_strlen($this->request->post[‘config_owner’]) request->post[‘config_owner’]) > 64)) {
    $this->error[‘owner’] = $this->language->get(‘error_owner’);
    }
    if ((utf8_strlen($this->request->post[‘config_address’]) request->post[‘config_address’]) > 256)) {
    $this->error[‘address’] = $this->language->get(‘error_address’);
    }

    if ((utf8_strlen($this->request->post[‘config_email’]) > 96) || !preg_match(‘/^[^\@]+@.*\.[a-z]{2,6}$/i’, $this->request->post[‘config_email’])) {
    $this->error[’email’] = $this->language->get(‘error_email’);
    }