Jump to content
Sign in to follow this  
jjoni

PHP Fatal error: Cannot redeclare ModelCatalogProduct

Recommended Posts

Странная ошибка стала появляться... Чищу кэш через админ панель (нажимаю кнопку) и браузер выкидывает ошибку "SERVER ERROR 500". Сайт работает, но при вводе логина и пароля для админ панели, не пускает и опять эта ошибка "SERVER ERROR 500". 

Тех поддержка хостинга показывает вот такую ошибку:

PHP Fatal error: Cannot redeclare ModelCatalogProduct::getProductMainCategoryId() in /****/site/public_html/system/storage/modification/admin/model/catalog/product.php on line 711

Вот те строки в этом файле:


	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);
	}

Тех поддержка там что-то делает и вроде все работает, могу зайти в админ панель... Но после обновления кэш, опять эта ошибка...

 

Подскажите, что это может быть?

 

ocStore 2.1.0.1

Share this post


Link to post
Share on other sites

Это модификатор какой-то хулиганит.

Предположительно модификатор вставляет функцию getProductMainCategoryId в файл 

/admin/model/catalog/product.php

Хотя эта функция там уже есть.

Или модификатор дважды пытается вставить эту функцию, т.к. дважды находит предмет поиска

Share this post


Link to post
Share on other sites
6 минут назад, chick сказал:

Это модификатор какой-то хулиганит.

Предположительно модификатор вставляет функцию getProductMainCategoryId в файл 

/admin/model/catalog/product.php

Хотя эта функция там уже есть.

Или модификатор дважды пытается вставить эту функцию, т.к. дважды находит предмет поиска

Как его можно выловить? Последнее что ставил, это SeoPro с сайта http://www.opencartjazz.com/en/ocj-seopro-oc2

Он был глючный и выдавал такую ошибку... После чего я из бэкапа восстановил сайт и базу... 

Но то ли не все восстановил, то ли не в бабине дело...

Share this post


Link to post
Share on other sites

Нужно просмотреть все модификаторы.

Часть из них может храниться в директории system с расширением xml

Часть из них в базе данных.

Скачать их и посмотреть что внутри можете с помощью этого модификатора:

http://oparin.info/web/modifikator-kotoryj-skachivaet-modifikatory

Качаете все файлы ищите в них getProductMainCategoryId 

Когда находите - либо правите, либо отключаете

Share this post


Link to post
Share on other sites
1 час назад, chick сказал:

Нужно просмотреть все модификаторы.

Часть из них может храниться в директории system с расширением xml

Часть из них в базе данных.

Скачать их и посмотреть что внутри можете с помощью этого модификатора:

http://oparin.info/web/modifikator-kotoryj-skachivaet-modifikatory

Качаете все файлы ищите в них getProductMainCategoryId 

Когда находите - либо правите, либо отключаете

А просто поиск по всем файлам сайте не прокатит?

Share this post


Link to post
Share on other sites
1 час назад, chick сказал:

Нужно просмотреть все модификаторы.

Часть из них может храниться в директории system с расширением xml

Часть из них в базе данных.

Скачать их и посмотреть что внутри можете с помощью этого модификатора:

http://oparin.info/web/modifikator-kotoryj-skachivaet-modifikatory

Качаете все файлы ищите в них getProductMainCategoryId 

Когда находите - либо правите, либо отключаете

Короче нашел в базе sql https://monosnap.com/file/S9LETdqmdoodBL1VWtl0BMDblmFpkR

<?xml version="1.0" encoding="utf-8"?>
<modification>
    <code>seopro-20150125</code>
    <name>SeoPro for Opencart v2.x</name>
    <version>1.0.2016-01-15</version>
    <author>OpencartJazz.com</author>
    <link>http://www.opencartjazz.com/opencart-module/seo/ocj-seopro-oc2</link>
    <file path="admin/controller/catalog/product.php">
        <operation>
            <search trim="true" index="0"><![CDATA[
		$data['entry_recurring'] = $this->language->get('entry_recurring');
            ]]></search>
            <add position="after" trim="false" offset="0"><![CDATA[
		$data['entry_main_category'] = $this->language->get('entry_main_category');
            ]]></add>
        </operation>
        <operation>
            <search trim="true" index="0"><![CDATA[
		$this->load->model('catalog/category');
            ]]></search>
            <add position="after" trim="false" offset="0"><![CDATA[

		$categories = $this->model_catalog_category->getAllCategories();
		$data['categories'] = $this->getAllCategories($categories);

		if (isset($this->request->post['main_category_id'])) {
			$data['main_category_id'] = $this->request->post['main_category_id'];
		} elseif (isset($product_info)) {
			$data['main_category_id'] = $this->model_catalog_product->getProductMainCategoryId($this->request->get['product_id']);
		} else {
			$data['main_category_id'] = 0;
		}
            ]]></add>
        </operation>
	<operation>
            <search regex="true" limit="1" quote="true"><![CDATA[~		$this->response->setOutput(json_encode($json));
	}
~]]></search>
            <add><![CDATA[		$this->response->setOutput(json_encode($json));
	}

	private function getAllCategories($categories, $parent_id = 0, $parent_name = '') {
		$output = array();

		if (array_key_exists($parent_id, $categories)) {
			if ($parent_name != '') {
				$parent_name .= $this->language->get('text_separator');
			}

			foreach ($categories[$parent_id] as $category) {
				$output[$category['category_id']] = array(
					'category_id' => $category['category_id'],
					'name'        => $parent_name . $category['name']
				);

				$output += $this->getAllCategories($categories, $category['category_id'], $parent_name . $category['name']);
			}
		}

		return $output;
	}
]]></add>
        </operation>
    </file>  
    <file path="admin/controller/setting/setting.php">
        <operation>
            <search trim="true" index="0"><![CDATA[$data['entry_seo_url'] = $this->language->get('entry_seo_url');]]></search>
            <add position="after" trim="false" offset="0"><![CDATA[		$data['entry_seo_url_type'] = $this->language->get('entry_seo_url_type');
		$data['entry_seo_url_include_path'] = $this->language->get('entry_seo_url_include_path');
		$data['entry_seo_url_postfix'] = $this->language->get('entry_seo_url_postfix');
]]></add>
        </operation>
        <operation>
            <search trim="true" index="0"><![CDATA[$data['help_seo_url'] = $this->language->get('help_seo_url');]]></search>
            <add position="after" trim="false" offset="0"><![CDATA[		$data['help_seo_url_include_path'] = $this->language->get('help_seo_url_include_path');
		$data['help_seo_url_postfix'] = $this->language->get('help_seo_url_postfix');
]]></add>
        </operation>
        <operation>
            <search trim="true" index="0"><![CDATA[$data['config_seo_url'] = $this->config->get('config_seo_url');]]></search>
            <add position="after" trim="false" offset="0"><![CDATA[		}

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

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

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

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

    <file path="admin/language/english/catalog/product.php">
        <operation>
            <search trim="true" index="0"><![CDATA[$_['entry_recurring']        = 'Recurring Profile';]]></search>
            <add position="after" trim="false" offset="0"><![CDATA[$_['entry_main_category']    = 'Main Category:';]]></add>
        </operation>
    </file>
    <file path="admin/language/russian/catalog/product.php">
        <operation>
            <search trim="true" index="0"><![CDATA[$_['entry_recurring']]]></search>
            <add position="after" trim="false" offset="0"><![CDATA[$_['entry_main_category']    = 'Главная категория:';]]></add>
        </operation>
    </file>
    <file path="admin/language/ukrainian/catalog/product.php">
        <operation>
            <search trim="true" index="0"><![CDATA[$_['entry_recurring']]]></search>
            <add position="after" trim="false" offset="0"><![CDATA[$_['entry_main_category']    = 'Головна категорія:';]]></add>
        </operation>
    </file>
    <file path="admin/language/uk_UA/catalog/product.php">
        <operation>
            <search trim="true" index="0"><![CDATA[$_['entry_recurring']]]></search>
            <add position="after" trim="false" offset="0"><![CDATA[$_['entry_main_category']    = 'Головна категорія:';]]></add>
        </operation>
    </file>

    <file path="admin/language/english/setting/setting.php">
        <operation>
            <search trim="true" index="0"><![CDATA[$_['text_smtp']                        = 'SMTP';]]></search>
            <add position="after" trim="false" offset="0"><![CDATA[$_['text_seo_url']                 = 'Default';
$_['text_seo_pro']                 = 'SeoPro';]]></add>
        </operation>
        <operation>
            <search trim="true" index="0"><![CDATA[$_['entry_seo_url']                    = 'Use SEO URLs';]]></search>
            <add position="after" trim="false" offset="0"><![CDATA[$_['entry_seo_url_type']               = 'SEO URL type';
$_['entry_seo_url_include_path']       = 'SEO URL for product with categories';
$_['entry_seo_url_postfix']            = 'SEO URL ending';]]></add>
        </operation>
        <operation>
            <search trim="true" index="0"><![CDATA[$_['help_seo_url']]]></search>
            <add position="after" trim="false" offset="0"><![CDATA[$_['help_seo_url_include_path']        = 'SEO URL format: <b>/category/subcategory/product</b> (only for SeoPro)';
$_['help_seo_url_postfix']             = 'SEO URL extension, such as <b>.html</b> (only for SeoPro)';]]></add>
        </operation>
    </file>
    <file path="admin/language/russian/setting/setting.php">
        <operation>
            <search trim="true" index="0"><![CDATA[$_['text_smtp']]]></search>
            <add position="after" trim="false" offset="0"><![CDATA[$_['text_seo_url']                 = 'Стандартный Seo_Url';
$_['text_seo_pro']                 = 'SeoPro';]]></add>
        </operation>
        <operation>
            <search trim="true" index="0"><![CDATA[$_['entry_seo_url']]]></search>
            <add position="after" trim="false" offset="0"><![CDATA[$_['entry_seo_url_type']               = 'Тип SEO URL';
$_['entry_seo_url_include_path']       = 'SEO URL для товаров включают категории';
$_['entry_seo_url_postfix']            = 'Окончание SEO URL';]]></add>
        </operation>
        <operation>
            <search trim="true" index="0"><![CDATA[$_['help_seo_url']]]></search>
            <add position="after" trim="false" offset="0"><![CDATA[$_['help_seo_url_include_path']        = 'Формат SEO URL: <b>/category/subcategory/product</b> (только для SeoPro)';
$_['help_seo_url_postfix']             = 'Окончание SEO URL, например <b>.html</b> (только для SeoPro)';]]></add>
        </operation>
    </file>
    <file path="admin/language/ukrainian/setting/setting.php">
        <operation>
            <search trim="true" index="0"><![CDATA[$_['text_smtp']]]></search>
            <add position="after" trim="false" offset="0"><![CDATA[$_['text_seo_url']                 = 'Звичайний Seo_Url з Опенкарт';
$_['text_seo_pro']                 = 'SeoPro';]]></add>
        </operation>
        <operation>
            <search trim="true" index="0"><![CDATA[$_['entry_seo_url']]]></search>
            <add position="after" trim="false" offset="0"><![CDATA[$_['entry_seo_url_type']               = 'Тип SEO URL';
$_['entry_seo_url_include_path']       = 'SEO URL для товарів містить категорії';
$_['entry_seo_url_postfix']            = 'Фінальна частина SEO URL';]]></add>
        </operation>
        <operation>
            <search trim="true" index="0"><![CDATA[$_['help_seo_url']]]></search>
            <add position="after" trim="false" offset="0"><![CDATA[$_['help_seo_url_include_path']        = 'Формат SEO URL: <b>/category/subcategory/product</b> (тільки для SeoPro)';
$_['help_seo_url_postfix']             = 'Фінальна частина SEO URL, наприклад <b>.html</b> (тільки для SeoPro)';]]></add>
        </operation>
    </file>

    <file path="admin/model/catalog/category.php">
        <operation>
            <search trim="true" index="0"><![CDATA[public function getTotalCategoriesByLayoutId($layout_id)]]></search>
            <add position="after" trim="false" offset="4"><![CDATA[	public function getCategoriesByParentId($parent_id = 0) {
		$query = $this->db->query("SELECT *, (SELECT COUNT(parent_id) FROM " . DB_PREFIX . "category WHERE parent_id = c.category_id) AS children FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id) LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) WHERE c.parent_id = '" . (int)$parent_id . "' AND cd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' ORDER BY c.sort_order, cd.name");

		return $query->rows;
	}

	public function getAllCategories() {
		$category_data = $this->cache->get('category.all.' . $this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id'));

		if (!$category_data || !is_array($category_data)) {
			$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id) LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) WHERE cd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "'  AND c.status = '1' ORDER BY c.parent_id, c.sort_order, cd.name");

			$category_data = array();
			foreach ($query->rows as $row) {
				$category_data[$row['parent_id']][$row['category_id']] = $row;
			}

			$this->cache->set('category.all.' . $this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id'), $category_data);
		}

		return $category_data;
	}]]></add>
        </operation>
    </file>  
    <file path="admin/model/catalog/product.php">
        <operation>
            <search trim="true" index="0"><![CDATA[if (isset($data['product_category'])]]></search>
            <add position="after" trim="false" offset="4"><![CDATA[
		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] . "'");
		}]]></add>
        </operation>
        <operation>
            <search trim="true" index="1"><![CDATA[if (isset($data['product_category']))]]></search>
            <add position="after" trim="false" offset="4"><![CDATA[
		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'])) {
			$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] . "'");
		}]]></add>
        </operation>
        <operation>
            <search trim="true" index="0"><![CDATA[return $product_layout_data;]]></search>
            <add position="after" trim="false" offset="1"><![CDATA[
	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);
	}]]></add>
        </operation>
    </file>  
    <file path="admin/model/openbay/openbay.php">
        <operation>
            <search trim="true" index="0"><![CDATA[curl_setopt($curl, CURLOPT_RETURNTRANSFER, true)]]></search>
            <add position="after" trim="false" offset="0"><![CDATA[			// curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
			// curl_setopt($curl, CURLOPT_POSTREDIR, 7);]]></add>
        </operation>
    </file>  
    <file path="admin/view/template/catalog/product_form.tpl">
        <operation>
            <search trim="true" index="0"><![CDATA[<input type="hidden" name="manufacturer_id" value="<?php echo $manufacturer_id; ?>" />]]></search>
            <add position="after" trim="false" offset="2"><![CDATA[              <div class="form-group">
                <label class="col-sm-2 control-label" for="input-main-category-id"><?php echo $entry_main_category; ?></label>
                <div class="col-sm-10">
                  <select name="main_category_id" id="input-main-category-id" class="form-control">
                    <?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>
                </div>
              </div>]]></add>
        </operation>
    </file>  
    <file path="admin/view/template/setting/setting.tpl">
        <operation>
            <search trim="true" index="0"><![CDATA[<input type="radio" name="config_seo_url" value="0" />]]></search>
            <add position="after" trim="false" offset="5"><![CDATA[              <div class="form-group">
                <label class="col-sm-2 control-label" for="input-seo-url-type"><?php echo $entry_seo_url_type; ?></label>
                <div class="col-sm-10">
                  <select name="config_seo_url_type" id="input-seo-url-type" class="form-control">
                    <?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>
                </div>
              </div>

              <div class="form-group">
                <label class="col-sm-2 control-label"><span data-toggle="tooltip" title="<?php echo $help_seo_url_include_path; ?>"><?php echo $entry_seo_url_include_path; ?></span></label>
                <div class="col-sm-10">
                  <label class="radio-inline">
                    <input type="radio" name="config_seo_url_include_path" value="1" <?php echo $config_seo_url_include_path ? 'checked="checked"' : ''; ?>/>
                    <?php echo $text_yes; ?>
                  </label>
                  <label class="radio-inline">
                    <input type="radio" name="config_seo_url_include_path" value="0" <?php echo !$config_seo_url_include_path ? 'checked="checked"' : ''; ?>/>
                    <?php echo $text_no; ?>
                  </label>
                </div>
              </div>
              <div class="form-group">
                <label class="col-sm-2 control-label" for="input-seo-url-postfix"><span data-toggle="tooltip" title="<?php echo $help_seo_url_postfix; ?>"><?php echo $entry_seo_url_postfix; ?></span></label>
                <div class="col-sm-10">
                  <input type="text" name="config_seo_url_postfix" value="<?php echo $config_seo_url_postfix; ?>" placeholder="<?php echo $entry_seo_url_postfix; ?>" id="input-seo-url-postfix" class="form-control" />
                </div>
              </div>]]></add>
        </operation>
    </file>  
    <file path="catalog/controller/common/header.php">
        <operation>
            <search trim="true" index="0"><![CDATA[$data['name'] = $this->config->get('config_name');]]></search>
            <add position="after" trim="false" offset="0"><![CDATA[		$data['alter_lang'] = $this->getAlterLanguageLinks($this->document->getLinks());]]></add>
        </operation>
        <operation>
            <search trim="true" index="0"><![CDATA[return $this->load->view('default/template/common/header.tpl', $data);]]></search>
            <add position="after" trim="false" offset="2"><![CDATA[	
	protected function getAlterLanguageLinks($links) {
		$result = array();
		if ($this->config->get('config_seo_url')) {
			foreach($links as $link) {
				if($link['rel']=='canonical') {
					$url=$link['href'];
					$schema = parse_url($url,PHP_URL_SCHEME);
					$server = strtolower($schema)=='https' ? HTTPS_SERVER : HTTP_SERVER; 
					$cur_lang = substr($url, strlen($server),2);
					$query = substr($url, strlen($server)+2);
					$this->load->model('localisation/language');
					$languages = $this->model_localisation_language->getLanguages();
					$active_langs = array();
					foreach($languages as $lang) {
						if($lang['status']) {
							$active_langs[]=$lang['code'];
						} 
					}
					if(in_array($cur_lang, $active_langs)) {
						foreach($active_langs as $lang) {
							$result[$lang] = $server.$lang.($query ? $query : '');
						}
					}
				}
			}
		}
		return $result;
	}]]></add>
        </operation>
    </file>  
    <file path="catalog/controller/common/home.php">
        <operation>
            <search trim="true" index="0"><![CDATA[$this->document->addLink(HTTP_SERVER, 'canonical');]]></search>
            <add position="replace" trim="false" offset="0"><![CDATA[$this->document->addLink($this->url->link('common/home'), 'canonical');]]></add>
        </operation>
    </file>  
    <file path="catalog/controller/common/language.php">
        <operation>
            <search trim="true" index="0"><![CDATA[$data['redirect'] = $this->url->link('common/home');]]></search>
            <add position="replace" trim="false" offset="0"><![CDATA[			$data['redirect_route'] = 'common/home';
			$data['redirect_query'] = '';
			$data['redirect_ssl']   = '';]]></add>
        </operation>
        <operation>
            <search trim="true" index="0"><![CDATA[$data['redirect'] = $this->url->link($route, $url, $this->request->server['HTTPS']);]]></search>
            <add position="replace" trim="false" offset="0"><![CDATA[	$data['redirect_route']=$route;
			$data['redirect_query']=$url;
			$data['redirect_ssl']=$this->request->server['HTTPS'];]]></add>
        </operation>
	<operation>
            <search regex="true" limit="1" quote="true"><![CDATA[~		if (isset($this->request->post['redirect'])) {
			$this->response->redirect($this->request->post['redirect']);~]]></search>
            <add><![CDATA[		if (isset($this->request->post['redirect_route'])) {
			$url = $this->url->link($this->request->post['redirect_route'],
					isset($this->request->post['redirect_query']) ? html_entity_decode($this->request->post['redirect_query']) : '',
					isset($this->request->post['redirect_ssl']) ? $this->request->post['redirect_ssl'] : '');
			$this->response->redirect($url);]]></add>
        </operation>
    </file>  
    <file path="catalog/view/theme/default/template/common/header.tpl">
        <operation>
            <search trim="true" index="0"><![CDATA[<script src="catalog/view/javascript/jquery/jquery-2.1.1.min.js" type="text/javascript"></script>]]></search>
            <add position="before" trim="false" offset="0"><![CDATA[<?php foreach ($alter_lang as $lang=>$href) { ?>
<link href="<?php echo $href; ?>" hreflang="<?php echo $lang; ?>" rel="alternate" />
<?php } ?>]]></add>
        </operation>
    </file>  
    <file path="catalog/view/theme/default/template/common/language.tpl">
        <operation>
            <search trim="true" index="0"><![CDATA[<input type="hidden" name="redirect" value="<?php echo $redirect; ?>" />]]></search>
            <add position="replace" trim="false" offset="0"><![CDATA[  <input type="hidden" name="redirect_route" value="<?php echo $redirect_route; ?>" />
  <input type="hidden" name="redirect_query" value="<?php echo isset($redirect_query) ? $redirect_query : ''; ?>" />
  <input type="hidden" name="redirect_ssl" value="<?php echo isset($redirect_ssl) ? $redirect_ssl : ''; ?>" />]]></add>
        </operation>
    </file>  
    <file path="catalog/controller/common/home.php">
	<operation>
            <search regex="true" limit="1" quote="true"><![CDATA[~if (isset($this->request->get['route'])) {
			$this->document->addLink($this->url->link('common/home'), 'canonical');
		}~]]></search>
            <add><![CDATA[$this->document->addLink($this->getCanonical(), 'canonical');]]></add>
        </operation>
        <operation>
            <search trim="true" index="0"><![CDATA[$this->response->setOutput($this->load->view('default/template/common/home.tpl', $data));]]></search>
            <add position="after" trim="false" offset="2"><![CDATA[	
	protected function getCanonical() {
		$url = HTTP_SERVER;
		if( $this->config->get('config_seo_url')
			&& $this->config->get('config_seo_url_type') == 'seo_pro') {
			$url = $this->url->link('common/home');
			$query = $this->db->query("SELECT value FROM " . DB_PREFIX . "setting WHERE store_id = '" . (int)$this->config->get('config_store_id') . "' AND `key` ='config_language'");
				
			$code = $this->session->data['language'];
			
			// Do not show language code for home when default language is always shown
			if( !$this->config->get('ocjazz_seopro_hide_default') 
				&& $code == $query->row['value']) 
			{
				$component = parse_url($url);
				if ($component['scheme'] == 'https') {
					$domain = $this->config->get('config_ssl');
				} else {
					$domain = $this->config->get('config_url');
				}
					
				$url = preg_replace('~('.$domain.')('.$code.'/)(.+)~i', '$1$3',$url);
			}
		}
		return $url;
	}
]]></add>
        </operation>
    </file>  
</modification>

Что тут не так?

Share this post


Link to post
Share on other sites

Вот ответ тех поддержки хостинга:

 

Вам нужно отредактировать system/storage/modification/admin/model/catalog/product.php в каталоге сайта site/public_html , и закомментировать строки 711-715, приведя их к такому виду:

/* 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);
}*/

Share this post


Link to post
Share on other sites

Если вырезать из базы эти строки, это поможет? Ничего страшного не будет? Или это не решение проблемы, а костыль?

Edited by jjoni

Share this post


Link to post
Share on other sites
9 минут назад, jjoni сказал:

Если вырезать из базы эти строки, это поможет? Ничего страшного не будет? Или это не решение проблемы, а костыль?

Это даже на костыль с натяжкой тянет.

Самое простое решение для Вас - отключите тот модификатор, который Вы привели выше

  • +1 1

Share this post


Link to post
Share on other sites
13 минут назад, chick сказал:

Это даже на костыль с натяжкой тянет.

Самое простое решение для Вас - отключите тот модификатор, который Вы привели выше

Ну так это ж SeoPro... Как без него??

Share this post


Link to post
Share on other sites

Кстати пытался seopro качать у freelance (он вроде автор), но и он выдавал такую ошибку... 

Share this post


Link to post
Share on other sites

Короче вырезал я из базы sql часть этого кода и вроде все заработало) Обновил кэш, но ошибка не появилась... Потом подумал и удалил этот модуль) Буду искать людей которые смогут помочь и вывести полный путь в хлебных крошках для подкатегорий при коротких URL)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.