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

halfhope

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

    1 750
  • З нами

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

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

  1. Из ряда "Дело было вечером, делать было нечего ". Может быть этот генератор будет кому-нибудь полезен при переносе/создании модулей на OpenCart 2.0. 

     

    Скриншоты:

     

    post-27725-0-90961600-1416401478_thumb.png

    post-27725-0-72760000-1416401485_thumb.png

    post-27725-0-30569600-1416401493_thumb.png

     

    Умеет создавать формы с:

    • select
    • radio
    • text
    • textarea
    • button
    • checkboxlist (опенкартовский список чекбоксов)
    • image(опенкартовский контрол для выбора изображений)
    • fieldset (HTML5 группы контролов)
    • tab(bootstrap tabs)

    Дополнительные возможности:

    • Превью
    • Автодополнение названия языковых переменных
    • Drag & Drop
    • Заточен только под OpenCart

    Описание файлов:

    • language.php (Файл для автодополнения языковых переменных (в формате языкового файла opencart))(Туда нужно вставить содержимое языкового файла своего модуля/раздела)
    • demo_data.php (Демо данные (необходим для генерации превью так же подходит для хранения языковых переменных))
    • generated.php (Файл шаблона для генерации всей страницы, можете все оттуда удалить и оставить {generated})
    • preview.php (Файл шаблона для генерации первью)
    Особенности:
    • Вкладки и Fieldsets(группы контролов), как и html теги, нужно закрывать дополнительным элементом - "Закрытие открытой вкладки" и "Закрыть группу контролов".
    Из соображений безопасности рекомендую запускать сей скрипт только на локальном сервере.
     
    Скачать
    • +1 3
  2. А как мне от этого избавиться то, не подскажите?

     

    Рекомендую сначала найти дыру. Посмотрите логи, если есть другие сайты на аккаунте, то проверьте их. Обновитесь, удалите варезные модули. Используйте скрипт - "айболит". 

  3. Восстановил сайт с бекапа, но версия скриптов 1564. Слышал, что это уязвимая версия и под нее есть паблик эксплоиты. Как пропатчить магазин с данной версий, чтобы залатать дырку?

     

    Для 1.5.6.4 нет эксплоитов и дыр там нет, разве что драйвер кривых рук.

  4. При отключении модуля (использую vqmod_ manager) ошибка пропадает, при активации напротив сразу же появляется, сами можете убедиться, доступ к админке у вас есть.

    Что бы как то повлияло на работоспособность пока не заметил, смущает то что горит это ошибка в любом разделе админки.

    Про то что модуль не тестировался прекрасно понимаю, но не думаю что среди сборок большие отличия.

     

    p.s. залез в ваш xml посмотреть из-за чего может быть.

     

    Имеется строка:

    	<file name="admin/view/template/common/footer.tpl">
    		<operation error="skip">
    			<search position="replace" offset="4"><![CDATA[<script type="text/javascript"><!--]]></search>
    			<add><![CDATA[]]></add>
    		</operation>
    	</file>
    

    Удалил и ошибка пропала, честно говоря вообще не понял а зачем это? Сама подсветка работает как и прежде без нареканий.

     

    P.S. а вы говорите ни как не связано :-)  в любом случаи спасибо за хак, сам думал что надо как то выделить, а тут и делать самому ничего не пришлось :wink:

     

    =) Забыл про этот скрипт. Это для совместимости с OcStore

  5. у меня вот так http://www.alevistyle.com/index.php?route=information/news&news_id=7

    Если сделать так information/news, то будет вставляться в список новостей, но не конкретного материала

     

    information/news&news так тоже не помогло

     

    Согласен с @afwollis. Это уже недоработка модуля. Автор должен был позаботиться о том, чтобы категория и запись имели разные схемы. Например blog/category и blog/record. 

  6.  

    Решил опробовать, заработало, но на каждой странице админки, в самом внизу теперь строчка:

    $('.image').hover(function(){ var link = $(this).find("a:contains('text_browse')"); if (link.length != 0) { $(this).css('cursor', 'pointer'); } }); //--> 
    

     

    Модуль не тестировался с maxystore.

  7.  

    Решил опробовать, заработало, но на каждой странице админки, в самом внизу теперь строчка:

    $('.image').hover(function(){ var link = $(this).find("a:contains('text_browse')"); if (link.length != 0) { $(this).css('cursor', 'pointer'); } }); //--> 
    

     

    Это никак не связано с модулем. Там нет такого кода. Модуль работает только в разделе "Дополнения", в остальных разделах он не работает. 

  8. в файле 

    catalog/controller/product/category.php

    catalog/controller/module/filterpro.php

     

    добавлено 'model'       => $result['model'],

     

    у меня тема не стандартная, aqucart. 

    я и в default теме тоже ковырял, че то не то..

     

    В category.tpl скрипт, который обрабатывает list/grid. null отображается именно после обработки javascript-ом. 

  9. Добрый день, требовалась возможность выставлять категориям разные шаблоны, нашёл и использовал даже костыль для этого, но добрый человек Tom рассказал о вашем модуле.

    Ваш модуль судя по описанию устраивает всем и даже больше и я его сегодня честно приобрёл, поставил и... не работает. :(

     

    Давайте разберёмся в чём может быть проблема.

    Использую я сборку maxystore v1.5.5.1

    vqmod стоит 2.5.0

     

    Загрузил все файлы на ftp, в разделе модули активировал "Персонализованные шаблоны", захожу в них и тыкаю кнопку "добавить модуль" - 0 реакций.

    В чём может быть проблема? что делать?

     

    Добрый вечер. Вероятней всего возникла ошибка в JavaScript. Если используется нестандартная тема админки либо какие-нибудь JS модули для админки. Без доступа ничего сказать не могу. Пришлите данные для доступа в админку в ЛС. 

  10. Чтобы получить подитог корзины, есть переменная $this->cart->getSubTotal()

    Она дает сумму товаров в корзине без учета купонов или сертификатов.

     

    Как можно получить сумму корзины с купонами и сертификатами, если они были применены? Насколько я понимаю, подобное происходит при помощи model/total/coupon, но как именно, я понять не могу - к сожалению, не программист.

     

    Возможно, кто-то уже решал задачу?

     

    А сертификатами и бонусными баллами клиент разве не расплачивается? Если расплачивается, то этого в классе Cart нет. Т.к. нужная Вам сумма становится известна только после применения сертификата или бонусных баллов. А применение происходит при оформлении заказа. 

  11. На скорую руку сделал вывод товаров из подкатегорий в родительской категории. 

    ControllerCatalogCategory:

    Добавлены строки с 199 по 258, изменены 261, 265.

    <?php 
    class ControllerProductCategory extends Controller {  
    	public function index() { 
    		$this->language->load('product/category');
    		
    		$this->load->model('catalog/category');
    		
    		$this->load->model('catalog/product');
    		
    		$this->load->model('tool/image'); 
    
    		if (isset($this->request->get['filter'])) {
    			$filter = $this->request->get['filter'];
    		} else {
    			$filter = '';
    		}
    
    			
    		if (isset($this->request->get['sort'])) {
    			$sort = $this->request->get['sort'];
    		} else {
    			$sort = 'p.sort_order';
    		}
    
    		if (isset($this->request->get['order'])) {
    			$order = $this->request->get['order'];
    		} else {
    			$order = 'ASC';
    		}
    		
    		if (isset($this->request->get['page'])) {
    			$page = $this->request->get['page'];
    		} else { 
    			$page = 1;
    		}	
    							
    		if (isset($this->request->get['limit'])) {
    			$limit = $this->request->get['limit'];
    		} else {
    			$limit = $this->config->get('config_catalog_limit');
    		}
    
    					
    		$this->data['breadcrumbs'] = array();
    
       		$this->data['breadcrumbs'][] = array(
           		'text'      => $this->language->get('text_home'),
    			'href'      => $this->url->link('common/home'),
           		'separator' => false
       		);	
    			
    		if (isset($this->request->get['path'])) {
    			$url = '';
    			
    			if (isset($this->request->get['sort'])) {
    				$url .= '&sort=' . $this->request->get['sort'];
    			}	
    
    			if (isset($this->request->get['order'])) {
    				$url .= '&order=' . $this->request->get['order'];
    			}	
    			
    			if (isset($this->request->get['limit'])) {
    				$url .= '&limit=' . $this->request->get['limit'];
    			}
    
    				
    			$path = '';
    		
    			$parts = explode('_', (string)$this->request->get['path']);
    		
    			$category_id = (int)array_pop($parts);
    
    			foreach ($parts as $path_id) {
    				if (!$path) {
    					$path = (int)$path_id;
    				} else {
    					$path .= '_' . (int)$path_id;
    				}
    									
    				$category_info = $this->model_catalog_category->getCategory($path_id);
    				
    				if ($category_info) {
    	       			$this->data['breadcrumbs'][] = array(
       	    				'text'      => $category_info['name'],
    						'href'      => $this->url->link('product/category', 'path=' . $path . $url),
            				'separator' => $this->language->get('text_separator')
            			);
    				}
    
    			}		
    		
    			
    		} else {
    			$category_id = 0;
    		}
    		
    		$this->data['category_id'] = $category_id;
    
    		$category_info = $this->model_catalog_category->getCategory($category_id);
    	
    		if ($category_info) {
    			if ($category_info['seo_title']) {
    		  		$this->document->setTitle($category_info['seo_title']);
    			} else {
    		  		$this->document->setTitle($category_info['name']);
    			}
    
    			$this->document->setDescription($category_info['meta_description']);
    			$this->document->setKeywords($category_info['meta_keyword']);
    			$this->document->addScript('catalog/view/javascript/jquery/jquery.total-storage.min.js');
    			
    			if ($category_info['seo_h1']) {
    				$this->data['heading_title'] = $category_info['seo_h1'];
    			} else {
    				$this->data['heading_title'] = $category_info['name'];
    			}
    			
    			$this->data['text_refine'] = $this->language->get('text_refine');
    			$this->data['text_empty'] = $this->language->get('text_empty');			
    			$this->data['text_quantity'] = $this->language->get('text_quantity');
    			$this->data['text_manufacturer'] = $this->language->get('text_manufacturer');
    			$this->data['text_model'] = $this->language->get('text_model');
    			$this->data['text_price'] = $this->language->get('text_price');
    			$this->data['text_tax'] = $this->language->get('text_tax');
    			$this->data['text_points'] = $this->language->get('text_points');
    			$this->data['text_compare'] = sprintf($this->language->get('text_compare'), (isset($this->session->data['compare']) ? count($this->session->data['compare']) : 0));
    			$this->data['text_display'] = $this->language->get('text_display');
    			$this->data['text_list'] = $this->language->get('text_list');
    			$this->data['text_grid'] = $this->language->get('text_grid');
    			$this->data['text_sort'] = $this->language->get('text_sort');
    			$this->data['text_limit'] = $this->language->get('text_limit');
    					
    			$this->data['button_cart'] = $this->language->get('button_cart');
    			$this->data['button_wishlist'] = $this->language->get('button_wishlist');
    			$this->data['button_compare'] = $this->language->get('button_compare');
    			$this->data['button_continue'] = $this->language->get('button_continue');
    			
    			// Set the last category breadcrumb		
    			$url = '';
    			
    			if (isset($this->request->get['sort'])) {
    				$url .= '&sort=' . $this->request->get['sort'];
    			}	
    
    			if (isset($this->request->get['order'])) {
    				$url .= '&order=' . $this->request->get['order'];
    			}	
    			
    			if (isset($this->request->get['page'])) {
    				$url .= '&page=' . $this->request->get['page'];
    			}
    			
    			if (isset($this->request->get['limit'])) {
    				$url .= '&limit=' . $this->request->get['limit'];
    			}
    									
    			$this->data['breadcrumbs'][] = array(
    				'text'      => $category_info['name'],
    				'href'      => $this->url->link('product/category', 'path=' . $this->request->get['path']),
    				'separator' => $this->language->get('text_separator')
    			);
    								
    					
    			if ($category_info['image']) {
    				$this->data['thumb'] = $this->model_tool_image->resize($category_info['image'], $this->config->get('config_image_category_width'), $this->config->get('config_image_category_height'));
    				$this->document->setOgImage($this->data['thumb']);
    			} else {
    				$this->data['thumb'] = '';
    			}
    									
    			$this->data['description'] = html_entity_decode($category_info['description'], ENT_QUOTES, 'UTF-8');
    			$this->data['compare'] = $this->url->link('product/compare');
    			
    			$url = '';
    			
    			if (isset($this->request->get['filter'])) {
    				$url .= '&filter=' . $this->request->get['filter'];
    			}	
    
    			if (isset($this->request->get['sort'])) {
    				$url .= '&sort=' . $this->request->get['sort'];
    			}	
    
    			if (isset($this->request->get['order'])) {
    				$url .= '&order=' . $this->request->get['order'];
    			}	
    			
    			if (isset($this->request->get['limit'])) {
    				$url .= '&limit=' . $this->request->get['limit'];
    			}
    								
    			$this->data['categories'] = array();
    			
    			$results = $this->model_catalog_category->getCategories($category_id);
    			
    			
    			foreach ($results as $result) {
    	################################### Начало ######################################
    				$data = array(
    					'filter_category_id'  => $result['category_id'],
    					'filter_sub_category' => true,
    					'filter_filter'      => $filter, 
    					'sort'               => $sort,
    					'order'              => $order,
    					'start'              => ($page - 1) * $limit,
    					'limit'              => $limit
    				);
    				
    				$prod_results = $this->model_catalog_product->getProducts($data);
    				$product_total = $this->model_catalog_product->getFoundProducts(); 		
    
    				$products = array();
    
    				foreach ($prod_results as $prod_result) {
    					if ($prod_result['image']) {
    						$image = $this->model_tool_image->resize($prod_result['image'], $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height'));
    					} else {
    						$image = $this->model_tool_image->resize('no_image.jpg', $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height'));
    					}
    					
    					if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
    						$price = $this->currency->format($this->tax->calculate($prod_result['price'], $prod_result['tax_class_id'], $this->config->get('config_tax')));
    					} else {
    						$price = false;
    					}
    					
    					if ((float)$prod_result['special']) {
    						$special = $this->currency->format($this->tax->calculate($prod_result['special'], $prod_result['tax_class_id'], $this->config->get('config_tax')));
    					} else {
    						$special = false;
    					}	
    					
    					if ($this->config->get('config_tax')) {
    						$tax = $this->currency->format((float)$prod_result['special'] ? $prod_result['special'] : $prod_result['price']);
    					} else {
    						$tax = false;
    					}				
    					
    					if ($this->config->get('config_review_status')) {
    						$rating = (int)$prod_result['rating'];
    					} else {
    						$rating = false;
    					}
    					$products[] = array(
    						'prod_product_id'  => $prod_result['product_id'],
    						'prod_thumb'       => $image,
    						'prod_name'        => $prod_result['name'],
    						'prod_description' => html_entity_decode($prod_result['mini_description'], ENT_QUOTES, 'UTF-8'),
    						'prod_price'       => $price,
    						'prod_special'     => $special,
    						'prod_tax'         => $tax,
    						'prod_rating'      => $prod_result['rating'],
    						'prod_reviews'     => sprintf($this->language->get('text_reviews'), (int)$prod_result['reviews']),
    						'prod_href'        => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $prod_result['product_id'] . $url)
    					);
    				}
    	################################### Конец ######################################
    
    				$this->data['categories'][] = array(
    					'category_id'  => $result['category_id'], //добавляем для создания уникального ID 
    					'name'  => $result['name'] . ($this->config->get('config_product_count') ? ' (' . $product_total . ')' : ''),
    					'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '_' . $result['category_id'] . $url),
    					'thumb' => $this->model_tool_image->resize(($result['image']=='' ? 'no_image.jpg' : $result['image']), $this->config->get('config_image_category_width'), $this->config->get('config_image_category_height')),
    					'products' => $products //Добавляем массив товаров из подкатегорий
    				);
    			}
    			
    			$this->data['products'] = array();
    			
    			$data = array(
    				'filter_category_id' => $category_id,
    				'filter_filter'      => $filter, 
    				'sort'               => $sort,
    				'order'              => $order,
    				'start'              => ($page - 1) * $limit,
    				'limit'              => $limit
    			);
    					
    			$results = $this->model_catalog_product->getProducts($data);
    			//Вызов метода getFoundProducts должен проводится сразу же после getProducts
    			//только тогда он выдает правильное значения количества товаров
    			$product_total = $this->model_catalog_product->getFoundProducts(); 
    			
    			foreach ($results as $result) {
    				if ($result['image']) {
    					$image = $this->model_tool_image->resize($result['image'], $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height'));
    				} else {
    					$image = $this->model_tool_image->resize('no_image.jpg', $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height'));
    				}
    				
    				if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
    					$price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')));
    				} else {
    					$price = false;
    				}
    				
    				if ((float)$result['special']) {
    					$special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')));
    				} else {
    					$special = false;
    				}	
    				
    				if ($this->config->get('config_tax')) {
    					$tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price']);
    				} else {
    					$tax = false;
    				}				
    				
    				if ($this->config->get('config_review_status')) {
    					$rating = (int)$result['rating'];
    				} else {
    					$rating = false;
    				}
    								
    				$this->data['products'][] = array(
    					'product_id'  => $result['product_id'],
    					'thumb'       => $image,
    					'name'        => $result['name'],
    					'description' => html_entity_decode($result['mini_description'], ENT_QUOTES, 'UTF-8'),
    					'price'       => $price,
    					'special'     => $special,
    					'tax'         => $tax,
    					'rating'      => $result['rating'],
    					'reviews'     => sprintf($this->language->get('text_reviews'), (int)$result['reviews']),
    					'href'        => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url)
    				);
    			}
    			
    			$url = '';
    			
    			if (isset($this->request->get['filter'])) {
    				$url .= '&filter=' . $this->request->get['filter'];
    			}
    				
    	
    			if (isset($this->request->get['limit'])) {
    				$url .= '&limit=' . $this->request->get['limit'];
    			}
    										
    			$this->data['sorts'] = array();
    			
    			$this->data['sorts'][] = array(
    				'text'  => $this->language->get('text_default'),
    				'value' => 'p.sort_order-ASC',
    				'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.sort_order&order=ASC' . $url)
    			);
    			
    			$this->data['sorts'][] = array(
    				'text'  => $this->language->get('text_name_asc'),
    				'value' => 'pd.name-ASC',
    				'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=pd.name&order=ASC' . $url)
    			);
    
    			$this->data['sorts'][] = array(
    				'text'  => $this->language->get('text_name_desc'),
    				'value' => 'pd.name-DESC',
    				'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=pd.name&order=DESC' . $url)
    			);
    
    			$this->data['sorts'][] = array(
    				'text'  => $this->language->get('text_price_asc'),
    				'value' => 'p.price-ASC',
    				'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.price&order=ASC' . $url)
    			); 
    
    			$this->data['sorts'][] = array(
    				'text'  => $this->language->get('text_price_desc'),
    				'value' => 'p.price-DESC',
    				'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.price&order=DESC' . $url)
    			); 
    			
    			if ($this->config->get('config_review_status')) {
    				$this->data['sorts'][] = array(
    					'text'  => $this->language->get('text_rating_desc'),
    					'value' => 'rating-DESC',
    					'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=rating&order=DESC' . $url)
    				); 
    				
    				$this->data['sorts'][] = array(
    					'text'  => $this->language->get('text_rating_asc'),
    					'value' => 'rating-ASC',
    					'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=rating&order=ASC' . $url)
    				);
    			}
    			
    			$this->data['sorts'][] = array(
    				'text'  => $this->language->get('text_model_asc'),
    				'value' => 'p.model-ASC',
    				'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.model&order=ASC' . $url)
    			);
    
    			$this->data['sorts'][] = array(
    				'text'  => $this->language->get('text_model_desc'),
    				'value' => 'p.model-DESC',
    				'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.model&order=DESC' . $url)
    			);
    			
    			$url = '';
    			
    			if (isset($this->request->get['filter'])) {
    				$url .= '&filter=' . $this->request->get['filter'];
    			}
    
    			if (isset($this->request->get['sort'])) {
    				$url .= '&sort=' . $this->request->get['sort'];
    			}	
    
    			if (isset($this->request->get['order'])) {
    				$url .= '&order=' . $this->request->get['order'];
    			}
    			
    			$this->data['limits'] = array();
    			
    			$limits = array_unique(array($this->config->get('config_catalog_limit'), 25, 50, 75, 100));
    			
    			sort($limits);
    	
    			foreach($limits as $value){
    				$this->data['limits'][] = array(
    					'text'  => $value,
    					'value' => $value,
    					'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&limit=' . $value)
    				);
    			}
    			
    			$url = '';
    			
    
    			if (isset($this->request->get['filter'])) {
    				$url .= '&filter=' . $this->request->get['filter'];
    			}
    
    			if (isset($this->request->get['sort'])) {
    				$url .= '&sort=' . $this->request->get['sort'];
    			}	
    
    			if (isset($this->request->get['order'])) {
    				$url .= '&order=' . $this->request->get['order'];
    			}
    	
    			if (isset($this->request->get['limit'])) {
    				$url .= '&limit=' . $this->request->get['limit'];
    			}
    					
    			$pagination = new Pagination();
    			$pagination->total = $product_total;
    			$pagination->page = $page;
    			$pagination->limit = $limit;
    			$pagination->text = $this->language->get('text_pagination');
    			$pagination->url = $this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&page={page}');
    		
    			$this->data['pagination'] = $pagination->render();
    		
    			$this->data['sort'] = $sort;
    			$this->data['order'] = $order;
    			$this->data['limit'] = $limit;
    		
    			$this->data['continue'] = $this->url->link('common/home');
    
    			if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/product/category.tpl')) {
    				$this->template = $this->config->get('config_template') . '/template/product/category.tpl';
    			} else {
    				$this->template = 'default/template/product/category.tpl';
    			}
    			
    			$this->children = array(
    				'common/column_left',
    				'common/column_right',
    				'common/content_top',
    				'common/content_bottom',
    				'common/footer',
    				'common/header'
    			);
    				
    			$this->response->setOutput($this->render());										
        	} else {
    			$url = '';
    			
    			if (isset($this->request->get['path'])) {
    				$url .= '&path=' . $this->request->get['path'];
    			}
    			
    			if (isset($this->request->get['filter'])) {
    				$url .= '&filter=' . $this->request->get['filter'];
    			}
    				
    									
    			if (isset($this->request->get['sort'])) {
    				$url .= '&sort=' . $this->request->get['sort'];
    			}	
    
    			if (isset($this->request->get['order'])) {
    				$url .= '&order=' . $this->request->get['order'];
    			}
    				
    			if (isset($this->request->get['page'])) {
    				$url .= '&page=' . $this->request->get['page'];
    			}
    						
    			if (isset($this->request->get['limit'])) {
    				$url .= '&limit=' . $this->request->get['limit'];
    			}
    						
    			$this->data['breadcrumbs'][] = array(
    				'text'      => $this->language->get('text_error'),
    				'href'      => $this->url->link('product/category', $url),
    				'separator' => $this->language->get('text_separator')
    			);
    				
    			$this->document->setTitle($this->language->get('text_error'));
    
          		$this->data['heading_title'] = $this->language->get('text_error');
    
          		$this->data['text_error'] = $this->language->get('text_error');
    
          		$this->data['button_continue'] = $this->language->get('button_continue');
    
          		$this->data['continue'] = $this->url->link('common/home');
    
    			if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/error/not_found.tpl')) {
    				$this->template = $this->config->get('config_template') . '/template/error/not_found.tpl';
    			} else {
    				$this->template = 'default/template/error/not_found.tpl';
    			}
    			
    			$this->children = array(
    				'common/column_left',
    				'common/column_right',
    				'common/content_top',
    				'common/content_bottom',
    				'common/footer',
    				'common/header'
    			);
    					
    			$this->response->setOutput($this->render());
    		}
      	}
    }
    ?>
    

    Шаблон category.tpl

     

    Описание конструкции:

    if($products){
       //Выводим обычный список товаров
    }elseif($categories){
       //Если нет товаров, но есть подкатегории, об обрабатываем подкатегории
       foreach($categories as $category){
          //Обрабатываем товары каждой подкатегорий
          //Здесь вывод название каждой подкатегории <h2><?php echo $category['category_name'] ?></h2> 
          foreach($products as $product){
              //Выводим товары как обычно 
          }
       }
    }else{
       //Товаров вообще нет нет, выводим сообщение о том, что эта категория пуста
    }
    

    Код измененного шаблона:

      <?php if ($products) { ?>
      <div class="product-filter">
        <div class="display"><b><?php echo $text_display; ?></b> <?php echo $text_list; ?> <b>/</b> <a onclick="display('grid');"><?php echo $text_grid; ?></a></div>
        <div class="limit"><b><?php echo $text_limit; ?></b>
          <select onchange="location = this.value;">
            <?php foreach ($limits as $limits) { ?>
            <?php if ($limits['value'] == $limit) { ?>
            <option value="<?php echo $limits['href']; ?>" selected="selected"><?php echo $limits['text']; ?></option>
            <?php } else { ?>
            <option value="<?php echo $limits['href']; ?>"><?php echo $limits['text']; ?></option>
            <?php } ?>
            <?php } ?>
          </select>
        </div>
        <div class="sort"><b><?php echo $text_sort; ?></b>
          <select onchange="location = this.value;">
            <?php foreach ($sorts as $sorts) { ?>
            <?php if ($sorts['value'] == $sort . '-' . $order) { ?>
            <option value="<?php echo $sorts['href']; ?>" selected="selected"><?php echo $sorts['text']; ?></option>
            <?php } else { ?>
            <option value="<?php echo $sorts['href']; ?>"><?php echo $sorts['text']; ?></option>
            <?php } ?>
            <?php } ?>
          </select>
        </div>
      </div>
      <div class="product-list" id="#product_list<?php echo $category_id; ?>">
        <?php foreach ($products as $product) { ?>
          <div>   
            <?php if ($product['rating']) { ?>
            <div class="rating"><img src="catalog/view/theme/ocstore-premium/image/stars-<?php echo $product['rating']; ?>.png" alt="<?php echo $product['reviews']; ?>" /></div>
            <?php } ?>
        
            <?php if ($product['thumb']) { ?>
            <div class="image"><a href="<?php echo $product['href']; ?>"><img src="<?php echo $product['thumb']; ?>" title="<?php echo $product['name']; ?>" alt="<?php echo $product['name']; ?>" /></a></div>
            <?php } ?>  
         
            <div class="name">
        	    <?php if (strlen($product['name']) > 40) { ?>
        	    <a href="<?php echo $product['href']; ?>" title="<?php echo $product['name']; ?>"><?php echo utf8_substr($product['name'], 0, 40) . '...'; ?></a>
        	    <?php } else { ?>
        	    <a href="<?php echo $product['href']; ?>"><?php echo $product['name']; ?></a>
        	    <?php } ?>
            </div>
          <div class="description"><?php echo $product['description']; ?></div>
          <?php if ($product['price']) { ?>
          <div class="pricebox">
            <div class="price">
              <?php if (!$product['special']) { ?>
              <?php echo $product['price']; ?>
              <?php } else { ?>
              <span class="price-old"><?php echo $product['price']; ?></span> <span class="price-new"><?php echo $product['special']; ?></span>
              <?php } ?>
            </div>
          </div>
          <?php } ?>
          <div class="cart">
            <input type="button" value="<?php echo $button_cart; ?>" onclick="addToCart('<?php echo $product['product_id']; ?>');" class="button-product" />
          </div>
        </div>
        <?php } ?>
      </div>
      
      <div class="pagination"><?php echo $pagination; ?></div>
      <?php }elseif ($categories) { ?>
      <!-- Show subcategory products -->
      <div class="product-filter">
        <div class="display"><b><?php echo $text_display; ?></b> <?php echo $text_list; ?> <b>/</b> <a onclick="display('grid');"><?php echo $text_grid; ?></a></div>
        <div class="limit"><b><?php echo $text_limit; ?></b>
          <select onchange="location = this.value;">
            <?php foreach ($limits as $limits) { ?>
            <?php if ($limits['value'] == $limit) { ?>
            <option value="<?php echo $limits['href']; ?>" selected="selected"><?php echo $limits['text']; ?></option>
            <?php } else { ?>
            <option value="<?php echo $limits['href']; ?>"><?php echo $limits['text']; ?></option>
            <?php } ?>
            <?php } ?>
          </select>
        </div>
        <div class="sort"><b><?php echo $text_sort; ?></b>
          <select onchange="location = this.value;">
            <?php foreach ($sorts as $sorts) { ?>
            <?php if ($sorts['value'] == $sort . '-' . $order) { ?>
            <option value="<?php echo $sorts['href']; ?>" selected="selected"><?php echo $sorts['text']; ?></option>
            <?php } else { ?>
            <option value="<?php echo $sorts['href']; ?>"><?php echo $sorts['text']; ?></option>
            <?php } ?>
            <?php } ?>
          </select>
        </div>
      </div>
      <?php foreach ($categories as $category) { ?>
        <a href="<?php echo $category['href']; ?>" class="category-header"><h2><?php echo $category['name']; ?></h2></a>
        <div class="product-list" id="#product_list<?php echo $category['category_id']; ?>">
          <?php foreach ($category['products'] as $product) { ?>
            <div>   
              <?php if ($product['prod_rating']) { ?>
              <div class="rating"><img src="catalog/view/theme/ocstore-premium/image/stars-<?php echo $product['prod_rating']; ?>.png" alt="<?php echo $product['prod_reviews']; ?>" /></div>
              <?php } ?>
          
              <?php if ($product['prod_thumb']) { ?>
              <div class="image"><a href="<?php echo $product['prod_href']; ?>"><img src="<?php echo $product['prod_thumb']; ?>" title="<?php echo $product['prod_name']; ?>" alt="<?php echo $product['prod_name']; ?>" /></a></div>
              <?php } ?>  
              
              <div class="name">
                <?php if (strlen($product['prod_name']) > 40) { ?>
                <a href="<?php echo $product['prod_href']; ?>" title="<?php echo $product['prod_name']; ?>"><?php echo utf8_substr($product['prod_name'], 0, 40) . '...'; ?></a>
                <?php } else { ?>
                <a href="<?php echo $product['prod_href']; ?>"><?php echo $product['prod_name']; ?></a>
                <?php } ?>
              </div>
            <div class="description"><?php echo $product['prod_description']; ?></div>
            <?php if ($product['prod_price']) { ?>
            <div class="pricebox">
              <div class="price">
                <?php if (!$product['prod_special']) { ?>
                <?php echo $product['prod_price']; ?>
                <?php } else { ?>
                <span class="price-old"><?php echo $product['prod_price']; ?></span> <span class="price-new"><?php echo $product['prod_special']; ?></span>
                <?php } ?>
              </div>
            </div>
            <?php } ?>
            <div class="cart">
              <input type="button" value="<?php echo $button_cart; ?>" onclick="addToCart('<?php echo $product['prod_product_id']; ?>');" class="button-product" />
            </div>
          </div>
          <?php } ?>
        </div>
      <?php } ?>
      <!-- Show subcategory products -->
      <?php }else{ ?> 
      <h2>Этот раздел пуст, мы работаем над его наполнением</h2>
      <?php } ?> 

    JavaScript код менять не требуется. Работает фильтр и смена grid/list.

     

     

    Работающий вариант можно посмотреть этом сайте, если сайт не доступен, то вот скриншот.

    • Если есть другие сайты на аккаунте, то стоит в первую очередь посмотреть на них, OpenCart можно взломать только в редких случаях. 
    • Поменяйте пароли для доступа
    • Проверьте сайт ai bolit или PHP-Shell-Detector
    • Раз уж смогли отличить код от оригинала, то интуиция подскажет что дальше делать. 

    Как обезопаситься? Если даете доступ к сайту различным фрилансерам, то никак. Только своевременными бекапами.

  12. исходя из того, что я нашла в поисковиках, идентичные моему случаю проблемы возникают именно по совершении ошибок в бд и в файлах конфигурации. решила сразу предупредить, что там все в порядке)

     

    Если в конфиге в качестве драйвера БД стоит mysqli, то смените на, mysql.

  13. А проблему с объединением ява скриптов он так и не решил- как было 5 блокирующих судя по гугл page speed, так и осталось. (( :mellow:

     

    Обновитесь. В новой версии вместо поля "Вставлять скрипты после body" появились два новых пункта:

    • Вставлять все скрипты перед: 
    • Переместить inline скрипты вместе с остальными:

    Для того, чтобы переместить все скрипты в конец страницы необходима в первом поле написать /<\/body>/ , а во втором поставить значение "Да". Затем сохраните настройки.

     

    Это экспериментальная функция и не факт, что она будет работать у всех. Однако я буду стараться помочь каждому. 

  14. А как тогда избежать повторной генерации массива если данные в кэше уже есть?

    $cached = $this->cache->get('cached');
    if($cached){
        $this->data['products'] = $cached;
    }else{
        //Получение данных
        //Обработка массива
        foreach($results as $result){
            $this->data['products'] = array(
                ...
            );
        }
        $this->cache->set('cached');
    }
    
  15. Решено.

     

    vqmod сам по себе создает конфликты, а vqmod c использованием офсетов вместе с регулярными выражениями это конфликты в геметрической прогрессии.. Даже вроде в официально документации где-то было написано что пользоваться таким крайне не желательно.

    но я не понимаю зачем вам заменять все?
    какая у вас задача? Если добавить свое поле то его можно дабавить после:
    $this->data['products'][] = array(

    Напишите конкретную задачу

     

    Задача была такой: после

    );
    }
    

    добавить:

    $this->cache->set('mcj.product.category.'.md5(json_encode(array($data, $this->config->get('config_store_id'), $this->config->get('config_language_id')))), $this->data['products']);
    } 

    В разных версиях OpenCart этот массив ($this->data['products']) выглядит по разному, но я все-таки нашел способ с применением offset:

    <search position="after" offset="2"><![CDATA[$this->url->link('product/product', 'path=']]></search>
    <add><![CDATA[$this->cache->set('mcj.product.category.блаблабла');}]]></add>
    

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

  16. Нужно обновить движек с версии 1.5 на самую свежую версию. По поводу обновления пишите в аську 442200 или скайп jackes_dok

     

    Рекомендую переезд на последний OcStore, т.к. 2.0 не стабильный и под него еще не заточены модули. 

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

Important Information

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