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

costas

Користувачі
  
  • Публікації

    2 822
  • З нами

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

Усі публікації користувача costas

  1. Прошу прощенья утверждение не верно, забыли про товары...добавить if ($parts[0] == 'category'){ $this->request->get['path'] = $parts[1]; for ( $i = 2 ; $i < count($parts); $i++) { $this->request->get['path'] .= '_' . $parts[$i]; } } оператор else вообще лишний.теперь и категории работают и товары....
  2. перед foreach ($parts as $part) {добавить if ($parts[0] == 'category'){ $this->request->get['path'] = $parts[1]; for ( $i = 2 ; $i < count($parts); $i++) { $this->request->get['path'] .= '_' . $parts[$i]; } } else после else закрывающейся скобки не должно быть, это уберёт лишний цикл с запросом к БД если выбрали категориюВот это foreach ($categories as $category) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = 'category_id=" . (int)$category . "'"); if ($query->num_rows) { $url .= '/' . $query->row['keyword']; } }заменить на $url .= '/category'; foreach ($categories as $category) { $url .= '/'.$category; } У меня работает... тестируйте...
  3. Что то мне подсказывает что напрашивается модуль для редактирования таких ссылок через админку... Если успею и не буду сильно праздновать праздник то сегодня наваяю... :rolleyes:
  4. <?php class ControllerCommonSeoUrl extends Controller { /* SEO Custom URL */ private $url_list = array ( 'common/home' => 'home', 'checkout/cart' => 'cart', 'account/register' => 'account/register' ); /* SEO Custom URL */ 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_']); 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'] .= '_' . $url[1]; } } if ($url[0] == 'manufacturer_id') { $this->request->get['manufacturer_id'] = $url[1]; } if ($url[0] == 'information_id') { $this->request->get['information_id'] = $url[1]; } } else { $this->request->get['route'] = 'error/not_found'; } } /* SEO Custom URL */ if ( $_s = $this->setURL($this->request->get['_route_']) ) { $this->request->get['route'] = $_s; }/* SEO Custom URL */ 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/product'; } elseif (isset($this->request->get['information_id'])) { $this->request->get['route'] = 'information/information'; } if (isset($this->request->get['route'])) { return $this->forward($this->request->get['route']); } } } public function rewrite($link) { if ($this->config->get('config_seo_url')) { $url_data = parse_url(str_replace('&', '&', $link)); $url = ''; $data = array(); parse_str($url_data['query'], $data); foreach ($data as $key => $value) { if (isset($data['route'])) { if (($data['route'] == 'product/product' && $key == 'product_id') || (($data['route'] == 'product/manufacturer/product' || $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) { $url .= '/' . $query->row['keyword']; 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) { $url .= '/' . $query->row['keyword']; } } unset($data[$key]); } /* SEO Custom URL */ if( $_u = $this->getURL($data['route']) ){ $url .= $_u; unset($data[$key]); }/* SEO Custom URL */ } } if ($url) { unset($data['route']); $query = ''; if ($data) { foreach ($data as $key => $value) { $query .= '&' . $key . '=' . $value; } if ($query) { $query = '?' . trim($query, '&'); } } return $url_data['scheme'] . '://' . $url_data['host'] . (isset($url_data['port']) ? ':' . $url_data['port'] : '') . str_replace('/index.php', '', $url_data['path']) . $url . $query; } else { return $link; } } else { return $link; } } /* SEO Custom URL */ public function getURL($route) { if( count($this->url_list) > 0) { foreach ($this->url_list as $key => $value) { if($route == $key) { return '/'.$value; } } } return false; } public function setURL($_route) { if( count($this->url_list) > 0 ){ foreach ($this->url_list as $key => $value) { if($_route == $value) { return $key; } } } return false; }/* SEO Custom URL */ } ?>Это Ваш файл, у меня работает, но немного отличается, проверяйте...Для добавление и изменения правьте массив private $url_list = array ( 'common/home' => 'home', 'checkout/cart' => 'cart', 'account/register' => 'account/register' );Кстати если изменить на 'account/register' => 'register'работать тоже должнотестируйте.... о результатах отпишитесь
  5. Зависит от версии Вашего магазина,в catalog/controller/common/seo_url.php нужно вставить что то вроде этого (версия opencart 1.5.x): в функцию index if ( $this->request->get['_route_'] == 'home') { return $this->forward('common/home'); } в функцию rewrite elseif ($data['route'] == 'common/home') { $url .= '/home'; } ну и всё в таком духе
  6. И на том спасибо, есть хотелка добавить отдельную команду которая бы собирала бы весь модуль в отдельный файл, тоесть после того как модуль дописан - запустить и получить архивный файл с модулем для инсталяции с нуля.З.Ы. а то не удобно по директориям ползать и выгребать составляющие модуля...
  7. Поподробнее можно? Анализ таблицы sql связанной с модулем делает с последующим описанием данных и методов классов?
  8. По поводу тындекса, директории с данными в данном случаее (например те же картинки в opencart) имеют прямой доступ, то же самое можно было сказать и о пользовательских документах, которые можно было получить путём запроса через тындекс, в качестве защиты таких данных нужно хранить их в другом месте (закрытые директории, СУБД и тд) и создавать отдельную модель доступа к данным проверяющую привелегии, данная модель пердпологает проверку доступа, а так же выдачу этих данных прошедшим проверку, иных средств достать или получить даные в обход этой модели не должно быть (исключая взлом самого магазина или сервера)...
  9. Виноваты - да, отвечать - врят ли, если иное не прописанно в соглашении или контракте... Что характерно для Open Source, ответственность за использование возлагается на Вас, разработчики с себя снимают такую ответственность (если иное опять же не задокументированно)...
  10. Директория system в корне - можно закрыть полностью, во всяком случае обращения к ней через http я не увидел в логах, ну и по логике не должно быть..Директорию admin ограничить по IP желательно... Ну и более детально рассмотреть всё, что можно загружать через пользователя, наличие фильтров по расширениям, проверка атрибутов и тд...
  11. Ну как бы очивидно же, свои данные пользователь передал Вам, за сохранность данных отвечаете Вы, магазин (СУБД и всё что прилагается) в данном случаее, это всего лишь место, где Вы храните данные которые доверил Вам пользователь, в случаее утечки данных, ответственность понесёте непосредственно Вы как владелец магазина (хотя если будет присутвовать взлом сервера хостера, возможно вину можно будет переложить на него, что ещё нужно доказать, ИХМО иск против Вас всё равно будет обоснован). Вопрос какие данные Вы храните?! Пароли и ФИО пользователя + e-mail, телефон (в случае с Юр. Лс это БИК, ИНН и тд) - здесь уже нужно читать закон о защите персональных данных, какие конкретно данные таковыми являются. Прямая дорога Вам к юристу...По поводу магазина и его версий, очень осторожно нужно относится к сторонним модулям и их использования, и так же осторожно работать с фрилансерами, ну и следить за новостями на предмет взлома движка магазина, что бы вовремя отреагировать... Если погуглить то найдёте ряд статей по взлому opencart v1.4.x через сторонние модули, что то типа этого http://www.xakep.ru/post/52867/default.asp
  12. Решение зделать не сложно, если у Вас 100% гарантируется что два и более товаров не используют одно изображение...
  13. Тест при выводе 100 позиций на одну страницу (генерация в секундах):0.245680 0.252572 0.243416 0.251621 - оригинал 0.258106 0.253293 0.259983 0.258153 - изменённый код это на моём тестовом сервере кажет, у вас будут другие данные, но в целом картина понятна....
  14. Предупреждение: данный способ влияет на производительность, т.к. добавлены две лишних операции (разделение строки и преобразование её в массив)в файле catalog/controller/product/category.php перед $this->data['products'][] = array( 'product_id' => $result['product_id'], добавить $description = split('NNNN',wordwrap(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 160, "NNNN")); чуть ниже 'description' => substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 100) . '..',заменить на 'description' => $description[0] . '..', 160 - это кол-во знаков после которых идёт обрезка NNNN - это просто разделитель (можете поставить что угодно, но желательно чтонить уникальное, пробелы - точки -запятые и прочие спец символы не допускаются...) Обрзка делается по целому слову. P.S. пример взят из рабочего кода без изменений...
×
×
  • Створити...

Important Information

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