Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

aakazakow

Новачок
  
  • Публікації

    45
  • З нами

  • Відвідування

Повідомлення, опубліковані користувачем aakazakow

  1. после всех переделок, получается максимум такой вид http://сайт.ru/faq/?topic=8

    ,а хотелось бы чтобы отображалось http://сайт.ru/faq/kak-zakazat/html

    <?php
    class ControllerCommonSeoPro extends Controller {
    private $cache_data = null;
    public function __construct($registry) {
     parent::__construct($registry);
     $this->cache_data = $this->cache->get('seo_pro');
     if (!$this->cache_data) {
      $query = $this->db->query("SELECT LOWER(`keyword`) as 'keyword', `query` FROM " . DB_PREFIX . "url_alias");
      $this->cache_data = array();
      foreach ($query->rows as $row) {
       $this->cache_data['keywords'][$row['keyword']] = $row['query'];
       $this->cache_data['queries'][$row['query']] = $row['keyword'];
      }
      $this->cache->set('seo_pro', $this->cache_data);
     }
    }
    public function index() {
     // Add rewrite to url class
     if ($this->config->get('config_seo_url')) {
      $this->url->addRewrite($this);
     } else {
      return;
     }
     // Decode URL
     if (!isset($this->request->get['_route_'])) {
      $this->validate();
     } else {
      $route = $this->request->get['_route_'];
      unset($this->request->get['_route_']);
      $parts = explode('/', trim(utf8_strtolower($route), '/'));
      /* BEGIN Actions */
      if (preg_match('#^(actions/)(.*)#', $route, $matches)) {
       $parts = explode('/', trim(utf8_strtolower($matches[2]), '/'));
       if($parts[0] == '' AND count($parts) == 1) {
     $parts = explode('/', trim(utf8_strtolower($route), '/'));
       }
      }
      /* END Actions */
      /* BEGIN News & Reviews */
      if (preg_match('#^(news/)(.*)#', $route, $matches)) {
       $parts = explode('/', trim(utf8_strtolower($matches[2]), '/'));
       if($parts[0] == '' AND count($parts) == 1) {
     $parts = explode('/', trim(utf8_strtolower($route), '/'));
       }
      }
      /* END News & Reviews */  
      list($last_part) = explode('.', array_pop($parts));
      array_push($parts, $last_part); 
      $rows = array();
      foreach ($parts as $keyword) {
       if (isset($this->cache_data['keywords'][$keyword])) {
     $rows[] = array('keyword' => $keyword, 'query' => $this->cache_data['keywords'][$keyword]);
       }
      }
      if (count($rows) == sizeof($parts)) {
       $queries = array();
       foreach ($rows as $row) {
     $queries[utf8_strtolower($row['keyword'])] = $row['query'];
       }
       reset($parts);
       foreach ($parts as $part) {
     $url = explode('=', $queries[$part], 2);
     if ($url[0] == 'category_id') {
      if (!isset($this->request->get['path'])) {
       $this->request->get['path'] = $url[1];
      } else {
       $this->request->get['path'] .= '_' . $url[1];
      }
     } elseif (count($url) > 1) {
      $this->request->get[$url[0]] = $url[1];
     }
       }
      /* BEGIN Actions */
      } elseif ( (isset($keyword_in[0]) AND $keyword_in[0] == 'actions') OR (isset($parts[0]) AND $parts[0] == 'actions') ) {
       $this->request->get['route'] = 'information/actions';
      /* END Actions */
      /* BEGIN News & Reviews */
      } elseif ( (isset($keyword_in[0]) AND $keyword_in[0] == 'news') OR (isset($parts[0]) AND $parts[0] == 'news') ) {
       $this->request->get['route'] = 'information/news';
      /* END News & Reviews */  
      } else {
       $this->request->get['route'] = 'error/not_found';
      }
      if (isset($this->request->get['product_id'])) {
       $this->request->get['route'] = 'product/product';
       if (!isset($this->request->get['path'])) {
     $path = $this->getPathByProduct($this->request->get['product_id']);
     if ($path) $this->request->get['path'] = $path;
       }
      } 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/product';
      } elseif (isset($this->request->get['information_id'])) {
       $this->request->get['route'] = 'information/information';
      /* BEGIN Actions */
      } elseif (isset($this->request->get['actions_id'])) {
       $this->request->get['route'] = 'information/actions';
      /* END Actions */
      /* BEGIN News & Reviews */
      } elseif (isset($this->request->get['news_id'])) {
       $this->request->get['route'] = 'information/news';
      /* END News & Reviews */
    
      } else {
       if (isset($queries[$parts[0]])) {
     $this->request->get['route'] = $queries[$parts[0]];
       }
      }
    
      $this->validate();
      if (isset($this->request->get['route'])) {
       return $this->forward($this->request->get['route']);
      }
     }
    }
    public function rewrite($link) {
     if (!$this->config->get('config_seo_url')) return $link;
     $seo_url = '';
     $component = parse_url(str_replace('&', '&', $link));
     $data = array();
     parse_str($component['query'], $data);
     $route = $data['route'];
     unset($data['route']);
     switch ($route) {
      /* BEGIN Actions*/
      case 'information/actions':
       if (!isset($data['actions_id'])) {
     $seo_url .= '/actions';
       }
       break;
      /*END Actions*/
      /* BEGIN News & Reviews */
      case 'information/news':
       if (!isset($data['news_id'])) {
     $seo_url .= '/news';
       }
       break;
      /* END News & Reviews */
      case 'product/product':
       if (isset($data['product_id'])) {
     $tmp = $data;
     $data = array();
     if ($this->config->get('config_seo_url_include_path')) {
      $data['path'] = $this->getPathByProduct($tmp['product_id']);
      if (!$data['path']) return $link;
     }
     $data['product_id'] = $tmp['product_id'];
     if (isset($tmp['tracking'])) {
      $data['tracking'] = $tmp['tracking'];
     }
       }
       break;
      case 'product/category':
       if (isset($data['path'])) {
     $category = explode('_', $data['path']);
     $category = end($category);
     $data['path'] = $this->getPathByCategory($category);
     if (!$data['path']) return $link;
       }
       break;
      case 'product/product/review':
      case 'information/information/info':
       return $link;
       break;
      default:
       break;
     }
     if ($component['scheme'] == 'https') {
      $link = $this->config->get('config_ssl');
     } else {
      $link = $this->config->get('config_url');
     }
     $link .= 'index.php?route=' . $route;
     if (count($data)) {
      $link .= '&' . urldecode(http_build_query($data, '', '&'));
     }
     $queries = array();
     foreach ($data as $key => $value) {
      switch ($key) {
       /* BEGIN Actions */
       case 'actions_id':
     $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = '" . $this->db->escape($key . '=' . (int)$value) . "'");
     if ($query->num_rows) {
      $seo_url .= '/actions/' . rawurlencode($query->row['keyword']);
      unset($data[$key]);
      $postfix = 1;
     }
     break;
       /* END Actions */
       /* BEGIN News & Reviews */
       case 'news_id':
     $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = '" . $this->db->escape($key . '=' . (int)$value) . "'");
     if ($query->num_rows) {
      $seo_url .= '/news/' . rawurlencode($query->row['keyword']);
      unset($data[$key]);
      $postfix = 1;
     }
     break;
       /* END News & Reviews */  
       case 'product_id':
       case 'manufacturer_id':
       case 'category_id':
       case 'information_id':
     $queries[] = $key . '=' . $value;
     unset($data[$key]);
     $postfix = 1;
     break;
       case 'path':
     $categories = explode('_', $value);
     foreach ($categories as $category) {
      $queries[] = 'category_id=' . $category;
     }
     unset($data[$key]);
     break;
       default:
     break;
      }
     }
     if(empty($queries)) {
      $queries[] = $route;
     }
     $rows = array();
     foreach($queries as $query) {
      if(isset($this->cache_data['queries'][$query])) {
       $rows[] = array('query' => $query, 'keyword' => $this->cache_data['queries'][$query]);
      }
     }
     if(count($rows) == count($queries)) {
      $aliases = array();
      foreach($rows as $row) {
       $aliases[$row['query']] = $row['keyword'];
      }
      foreach($queries as $query) {
       $seo_url .= '/' . rawurlencode($aliases[$query]);
      }
     }
     if ($seo_url == '') return $link;
     $seo_url = trim($seo_url, '/');
     if ($component['scheme'] == 'https') {
      $seo_url = $this->config->get('config_ssl') . $seo_url;
     } else {
      $seo_url = $this->config->get('config_url') . $seo_url;
     }
     if (isset($postfix)) {
      $seo_url .= trim($this->config->get('config_seo_url_postfix'));
     } else {
      $seo_url .= '/';
     }
     if(substr($seo_url, -2) == '//') {
      $seo_url = substr($seo_url, 0, -1);
     }
     if (count($data)) {
      $seo_url .= '?' . urldecode(http_build_query($data, '', '&'));
     }
     return $seo_url;
    }
    private function getPathByProduct($product_id) {
     $product_id = (int)$product_id;
     if ($product_id < 1) return false;
     static $path = null;
     if (!is_array($path)) {
      $path = $this->cache->get('product.seopath');
      if (!is_array($path)) $path = array();
     }
     if (!isset($path[$product_id])) {
      $query = $this->db->query("SELECT category_id FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . $product_id . "' ORDER BY main_category DESC LIMIT 1");
      $path[$product_id] = $this->getPathByCategory($query->num_rows ? (int)$query->row['category_id'] : 0);
      $this->cache->set('product.seopath', $path);
     }
     return $path[$product_id];
    }
    private function getPathByCategory($category_id) {
     $category_id = (int)$category_id;
     if ($category_id < 1) return false;
     static $path = null;
     if (!is_array($path)) {
      $path = $this->cache->get('category.seopath');
      if (!is_array($path)) $path = array();
     }
     if (!isset($path[$category_id])) {
      $max_level = 10;
      $sql = "SELECT CONCAT_WS('_'";
      for ($i = $max_level-1; $i >= 0; --$i) {
       $sql .= ",t$i.category_id";
      }
      $sql .= ") AS path FROM " . DB_PREFIX . "category t0";
      for ($i = 1; $i < $max_level; ++$i) {
       $sql .= " LEFT JOIN " . DB_PREFIX . "category t$i ON (t$i.category_id = t" . ($i-1) . ".parent_id)";
      }
      $sql .= " WHERE t0.category_id = '" . $category_id . "'";
      $query = $this->db->query($sql);
      $path[$category_id] = $query->num_rows ? $query->row['path'] : false;
      $this->cache->set('category.seopath', $path);
     }
     return $path[$category_id];
    }
    private function validate() {
     if (empty($this->request->get['route']) || $this->request->get['route'] == 'error/not_found') {
      return;
     }
     if (isset($this->request->server['HTTP_X_REQUESTED_WITH']) && strtolower($this->request->server['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
      return;
     }
     if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) {
      $url = str_replace('&', '&', $this->config->get('config_ssl') . ltrim($this->request->server['REQUEST_URI'], '/'));
      $seo = str_replace('&', '&', $this->url->link($this->request->get['route'], $this->getQueryString(array('route')), 'SSL'));
     } else {
      $url = str_replace('&', '&', $this->config->get('config_url') . ltrim($this->request->server['REQUEST_URI'], '/'));
      $seo = str_replace('&', '&', $this->url->link($this->request->get['route'], $this->getQueryString(array('route')), 'NONSSL'));
     }
     if (rawurldecode($url) != rawurldecode($seo)) {
      header($this->request->server['SERVER_PROTOCOL'] . ' 301 Moved Permanently');
      $this->response->redirect($seo);
     }
    }
    private function getQueryString($exclude = array()) {
     if (!is_array($exclude)) {
      $exclude = array();
      }
     return urldecode(http_build_query(array_diff_key($this->request->get, array_flip($exclude))));
     }
    }
    ?>
    

  2. Подскажите, пожалуйста как устранить баг с модулем FAQ (модуль часто задаваемых вопросов).

    Вопросы выглядят так http://сайт.ru/faq.html?topic=6 , сделать по аналогии с модулем новостей не получилось.

  3. Установил на сайт, всё работает. Спасибо большое, за проделанную Вами работу. Очень полезное дополнение !

    Но только есть проблема с правильным отображением "Новостей"

    И QiWi стал ошибку выдавать

    2013-03-19 23:08:29 - qiwi error hash

    Подскажите пожалуйста как решить ?

  4. Доброго времени суток. Мой сайт http://QtiQ.ru

    Приобрел два модуля для категории и для продукта.

    Модуль супер, но возникли некоторые проблемы, а именно:

    1) Модуль к продуктам- У меня на товаре стоит "наличие- на складе" ( в админке кол-во товара указано 0 шт. при отсутствии товара: на складе.)

    Но гугл считывает товар как "нет в наличии" - как поменять значение на "на складе" ?

    2)Модуль к категориям- У меня установлено дополнение для постепенной загрузки изображений и код выглядит так

    <a href="<?php echo $product['href']; ?>"><img src="<?php echo $product['thumb']; ?>" width="<?php echo $product['thumb_w']; ?>" height="<?php echo $product['thumb_h']; ?>" title="<?php echo $product['name']; ?>" alt="<?php echo $product['name']; ?>" /></a></div>
    

    Если добавляю itemprop="image" , постепенная загрузка перестает работать

  5. на картинках стоит padding: 5px;

    если его отключить, то все встает на место , но я бы хотел оставить paging. Поэтому хочу отредактировать сам стикер, но не могу найти место где его редактировать

  6. Вот решил проблему с настройками

    Было:

    Изначально настройки не слетают, слетает их отображение в админке, так как они жестко прописаны в моде.Если задать число и сохранить то в базу оно записывается и на сайте отображается так как настроили, но при заходе в админку мы видим число из мода 30 и 100 что никак не влияет на работу.

    Стало:

    Ниже рабочий код

    строка 63

    <td><input type="text" name="config_newproduct" value="<?php echo $config_newproduct; ?>" size="3" /></td><tr>
    

    строка 80

    <td><input type="text" name="config_popularproduct" value="<?php echo $config_popularproduct; ?>" size="3" /></td><tr>
    

    Спасибо, наконец в админке отображается то что действительно вписал, а не 30 и 100...

    Подскажите как поместить стикер немного левее и выше в категориях ( немножко не в том месте расположен)

    Пример категория- коктейльные платья

  7. Установил LiveZilla,клиентская часть работает исправно (вижу кто заходит на сайт), но после открытия чата пишет ошибку и не коннектится до конца. постоянно пишет "загрузка"

    Кто знает с чем это связано ? (грешу на хостинг, но они говорят, что все исправно)

    http://qtiq.ru/chat/chat.php

    см. скрин

    post-13666-0-16327700-1347783739_thumb.jpg

  8. Создал поддомен для сайта типа moscov.mysite.ru с одной базой (общим каталогом)

    Хостинг Hostland

    Создал поддомен, но возникла проблема с указанием пути на основной магазин !

    Перечитал форум не могу вникнуть каким образом Указать путь на основной магазин ?

  9. ocStore версия 1.5.1.3

    сайт находится на хостинге

    много изменений

    Суть проблеммы- 4 месяца назад удалил 2 строки в регистрации пользователя (Фамилию+ Адрес 2).

    Но сейчас в них возникла необходимость. Были восстановлены данные в controller и view .

    Поля стали отображаться, но после регистрации пользователя они не сохраняются

    (т.е. остаются пустыми и в админке и в личном кабинете пользователя)

    Причем если их вписать в личном кабинете или в админке они сохранятся

    Пользовался поиском- ничего подобного не нашел! (не могу сам разобраться)

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.