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

MaJIon

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

    42
  • З нами

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

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

  1. Я еще профан в php, поэтому сразу не понял. Спасибо за подсказку, переделал и все кэширует как надо

    По поводу вашей оптимизации есть ли смысл мне делать, если у меня всего 200 опций, и они на каждый товар почти одинаковые? Я из-за этого и решил закешировать их)

     

    1 час назад, halfhope сказал:

     

    Да он не те переменные кэширует) Нужно кэшировать $product_option_data, а он результат запроса кэширует, еще и отдает этот резалт вместо того что нужно. 

  2. Здравствуйте, пытаюсь закэшировать опции товара, но получаю ошибки, подскажите что я делаю не так? 
    Сам файл кэша появляется, опции в файле кэшируются, но почему-то не выводится

    Ошибки следующие: 

    1. rying to access array offset on value of type int in

    2. : Invalid argument supplied for foreach() in
    3. : Trying to access array offset on value of type int in


    Модель 

    public function getProductOptions($product_id) {
    		
    		$product_option_data = array();
    		
    		$product_option_cache = $this->cache->get('product.option.' . (int)$product_id);
    		 
    		if (!$product_option_cache) {
    			$product_option_cache = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_option po LEFT JOIN `" . DB_PREFIX . "option` o ON (po.option_id = o.option_id) LEFT JOIN " . DB_PREFIX . "option_description od ON (o.option_id = od.option_id) WHERE po.product_id = '" . (int)$product_id . "' AND od.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY o.sort_order");
    
    			foreach ($product_option_cache->row as $product_option_value) {
    				 
    				$product_option_value_data = array();
    				
    				$product_option_value_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_option_value pov LEFT JOIN " . DB_PREFIX . "option_value ov ON (pov.option_value_id = ov.option_value_id) LEFT JOIN " . DB_PREFIX . "option_value_description ovd ON (ov.option_value_id = ovd.option_value_id) WHERE pov.product_id = '" . (int)$product_id . "' AND pov.product_option_id = '" . (int)$product_option['product_option_id'] . "' AND ovd.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY ov.sort_order");
    			 
    				foreach ($product_option_value_query->rows as $product_option_value) {
    				 
    					$product_option_value_data[] = array(
    						'product_option_value_id' => $product_option_value['product_option_value_id'],
    						'option_value_id'         => $product_option_value['option_value_id'],
    						'name'                    => $product_option_value['name'],
    						'image'                   => $product_option_value['image'],
    						'quantity'                => $product_option_value['quantity'],
    						'subtract'                => $product_option_value['subtract'],
    						'price'                   => $product_option_value['price'],
    						'price_prefix'            => $product_option_value['price_prefix'],
    						'weight'                  => $product_option_value['weight'],
    						'weight_prefix'           => $product_option_value['weight_prefix']
    					);
    				}
    
    				$product_option_data[] = array(
    					'product_option_id'    => $product_option['product_option_id'],
    					'product_option_value' => $product_option_value_data,
    					'option_id'            => $product_option['option_id'],
    					'name'                 => $product_option['name'],
    					'type'                 => $product_option['type'],
    					'value'                => $product_option['value'],
    					'required'             => $product_option['required']
    				);
    			}
    			$this->cache->set('product.option.' .  (int)$product_id, $product_option_cache);
    		}
    
    		return $product_option_cache;
    	}

     

  3. Здравствуйте, подскажите пожалуйста, что тут не так, почему возвращает пустой массив  ? 

    Файл настройки темы
     

    $this->load->model('catalog/category');
     
    		if (isset($this->request->post['theme_zaprosto_category'])) {
    			$data['theme_zaprosto_category'] = $this->request->post['theme_zaprosto_category'];
    		} elseif (isset($setting_info['theme_zaprosto_category'])) {
    			$data['theme_zaprosto_category'] = $setting_info['theme_zaprosto_category'];
    		}  else {
    			$data['theme_zaprosto_category'] = array();
    		}
    
    		foreach ($data['theme_zaprosto_category'] as $category_id) {
    			$category_info = $this->model_catalog_category->getcategory($category_id);
     
    			if ($category_info) {
    				$data['theme_zaprosto_category'][] = array(
    					'category_id' => $category_info['category_id'],
    					'name'       => ($category_info['path']) ? $category_info['path'] . ' > ' . $category_info['name'] : $category_info['name']
    				);
    			}
    		}

     

    В виде 
     

    <div class="form-group">
    			<label class="col-sm-2 control-label" for="input-category">{{ entry_category }}</label>
    			<div class="col-sm-10">
    			  <input type="text" name="theme_zaprosto_category" value="" placeholder="{{ entry_category }}" id="input-category" class="form-control" />
    			  <div id="featured_categories-category" class="well well-sm" style="height: 150px; overflow: auto;">
    				{% for category in theme_zaprosto_category %}
    				<div id="featured_categories-category{{ category.category_id }}"><i class="fa fa-minus-circle"></i> {{ category.name }}
    				  <input type="hidden" name="category[]" value="{{ category.category_id }}" />
    				</div>
    				{% endfor %}
    			  </div>
    			</div>
    		  </div>
    		  <script>
     
      $('input[name=\'theme_zaprosto_category\']').autocomplete({
    	source: function(request, response) {
    		$.ajax({
    			url: 'index.php?route=catalog/category/autocomplete&user_token={{ user_token }}&filter_name=' +  encodeURIComponent(request),
    			dataType: 'json',
    			success: function(json) {
    				response($.map(json, function(item) {
    					return {
    						label: item['name'],
    						value: item['category_id']
    					}
    				}));
    			}
    		});
    	},
    	select: function(item) {
    		$('input[name=\'category\']').val('');
    		
    		$('#featured_categories-category' + item['value']).remove();
    		
    		$('#featured_categories-category').append('<div id="featured_categories-category' + item['value'] + '"><i class="fa fa-minus-circle"></i> ' + item['label'] + '<input type="hidden" name="category[]" value="' + item['value'] + '" /></div>');	
    	}
    });
    	
    $('#featured_categories-category').delegate('.fa-minus-circle', 'click', function() {
    	$(this).parent().remove();
    });
     
    </script>

     

  4. 1 час назад, Prooksius сказал:

    не, это жуткий костыль))
    Удалили вы случайно страну одну из этих трех, а потом создали заново - и все, ваш код не работает.

     

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

     

    Согласен, что для множество задач это костыль, но в моем случае есть всего несколько стран, которые будут неизменны. 

    Ваш вариант конечно привлекательней, но мне надо было быстрое решение)

  5. 23 минуты назад, buslikdrev сказал:

    Не делать этого или нанять того, кто сделает.

     

    Спасибо Вам добрый человек! 

    Может кому пригодится: 

     

    if ($this->request->post['code'] =='USD'){ // Код валюты
    	$this->session->data['payment_address']['country_id']  = '260'; // ID нужной страны
    	$this->session->data['shipping_address']['country_id'] = '260';
    } elseif ($this->request->post['code'] =='GBP') {
    	$this->session->data['payment_address']['country_id'] = '259';
    	$this->session->data['shipping_address']['country_id'] = '259';
    } elseif ($this->request->post['code'] =='CAD') {
    	$this->session->data['payment_address']['country_id'] = '258';
    	$this->session->data['shipping_address']['country_id'] = '258';
    }

     

  6. Здравствуйте, нужно сделать автовыбор страны в зависимости от выбора валюты на сайте. То есть если выбирает пользователь руб тогда автоматически передается в сессию страна Россия, при выборе валюты ГРН - Украина и тд. Чтобы в конечном итоге в поле страны при оформлении заказа была выбрана страна в зависимости от валюты. 

    Подскажите как можно это сделать самым простым способом, подкиньте идей) 

  7. 9 часов назад, iglin сказал:

    До удаления получите все товары из корзины

    
    $products = $this->cart->getProducts();

    потом в этом массиве найдите тот у которого key == post[key], получите его product_id

     

    Уже решил, все намного проще чем я думал. Надо было лишь в модель добавить id товара и в доработать скрипт удаления товара из корзины, чтобы скрипт передавал product_id 

  8. Здравствуйте, подскажите как я могу вывести id удалившего товара в функции public function remove() { в файле checkout/cart ?? 

    $this->request->post['product_id'] - не катит

    Вся функция ниже

    public function remove() {
    		$this->load->language('checkout/cart');
    
    		$json = array();
    	 
    		 
    		 
    		// Remove
    		if (isset($this->request->post['key'])) {
    			$this->cart->remove($this->request->post['key']);
      
    			unset($this->session->data['vouchers'][$this->request->post['key']]);
    
    			//$json['success'] = $this->language->get('text_remove');
    		 
    			unset($this->session->data['shipping_method']);
    			unset($this->session->data['shipping_methods']);
    			unset($this->session->data['payment_method']);
    			unset($this->session->data['payment_methods']);
    			unset($this->session->data['reward']);
    
    			// Totals
    			$this->load->model('setting/extension');
    
    			$totals = array();
    			$taxes = $this->cart->getTaxes();
    			$total = 0;
    
    			// Because __call can not keep var references so we put them into an array. 			
    			$total_data = array(
    				'totals' => &$totals,
    				'taxes'  => &$taxes,
    				'total'  => &$total
    			);
    
    			// Display prices
    			if ($this->customer->isLogged() || !$this->config->get('config_customer_price')) {
    				$sort_order = array();
    
    				$results = $this->model_setting_extension->getExtensions('total');
    
    				foreach ($results as $key => $value) {
    					$sort_order[$key] = $this->config->get('total_' . $value['code'] . '_sort_order');
    				}
    
    				array_multisort($sort_order, SORT_ASC, $results);
    
    				foreach ($results as $result) {
    					if ($this->config->get('total_' . $result['code'] . '_status')) {
    						$this->load->model('extension/total/' . $result['code']);
    
    						// We have to put the totals in an array so that they pass by reference.
    						$this->{'model_extension_total_' . $result['code']}->getTotal($total_data);
    					}
    				}
    
    				$sort_order = array();
    
    				foreach ($totals as $key => $value) {
    					$sort_order[$key] = $value['sort_order'];
    				}
    
    				array_multisort($sort_order, SORT_ASC, $totals);
    			}
    
    			$json['total'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total, $this->session->data['currency']));
    		}
    
    		$this->response->addHeader('Content-Type: application/json');
    		$this->response->setOutput(json_encode($json));
    	}

     

  9. Здравствуйте, почему в таблице customer в столбце cart не выводятся никакие данные, если товар у клиента лежит в корзине ? (на скриншоте 1) 
    Кога в таблице cart данные сохраняются в базе. Зачем вообще нужен столбец cart  в таблице customer? 

    download.jpg

    download.jpg

  10. Здравствуйте почему ошибка в запросе? 

     

    (SELECT SUM(mpn) AS mpn FROM " . DB_PREFIX . "order_product WHERE o.order_id = '" . (int)$order_id . "') AS mpn,


    Так тоже не катит 
    (SELECT SUM(mpn) AS mpn FROM " . DB_PREFIX . "order_product WHERE o.order_id) AS mpn

    Полный запрос 

    $sql = "SELECT o.order_id, CONCAT(o.firstname, ' ', o.lastname) AS customer, (SELECT os.name FROM " . DB_PREFIX . "order_status os WHERE os.order_status_id = o.order_status_id AND os.language_id = '" . (int)$this->config->get('config_language_id') . "') AS order_status, o.shipping_code, o.total, (SELECT SUM(mpn) AS mpn FROM " . DB_PREFIX . "order_product WHERE o.order_id = '" . (int)$order_id . "') AS mpn, o.currency_code, o.currency_value, o.date_added, o.date_modified FROM `" . DB_PREFIX . "order` o";

     

  11. Всем привет) 
    Помогите плз, нужно вывести суммарное число полей mpn в таблице order_product конкретного заказа 

    Что то типа этого 

    public function getTotalProductsByMpn($order_id) {
            $query = $this->db->query("SELECT COUNT(*) AS mpn FROM " . DB_PREFIX . "order_product WHERE order_id = '" . (int)$order_id . "'");

            return $query->row['mpn'];
        }

    download.jpg

  12. 9 часов назад, GetWeb сказал:

    Если я правильно понял, заменить везде parseInt на parseFloat и вместо -1  +1 написать -0.25 +0.25 соответственно.

    Спасибо, помогло)) 
    Еще вопрос как сделать, так чтобы округляло 1000 и не пересчитывало как на скриншоте  download.jpg.53761dcafc2b0637357012da59910153.jpg
    У меня шаги у всех товаров разные и поэтому я в скрипте 1 заменил на input.attr('step')) в поле количества товаров, но вот если у меня шаг, к примеру, 0.100, то на увеличении к 0.300 у меня не округляет. Надо чтобы было 0.300 

  13. Здравствуйте, как дописать скрипт таким образом, чтобы при клике добавляло или отнимало от значения в сотых, то есть шаг  0.25 сделать?


     

    <script><!--
    $(function() {
    	$(document).on('click', ".number-spinner a", function(e){
    		e.preventDefault();
    		btn = $(this);
    		input = btn.closest('.number-spinner').find('input');
    		btn.closest('.number-spinner').find('a').prop("disabled", false);
    		if (btn.attr('data-dir') == 'up') {
    			if ( input.attr('max') == undefined || parseInt(input.val()) < parseInt(input.attr('max')) ) {
    				input.val(parseInt(input.val())+1);
    				input.trigger('change');
    			}else{
    				btn.prop("disabled", true);
    			}
    		} else {
    			if ( input.attr('min') == undefined || parseInt(input.val()) > parseInt(input.attr('min')) ) {
    				input.val(parseInt(input.val())-1);
    				input.trigger('change');
    			}else{
    				btn.prop("disabled", true);
    			}
    		}
    	});
    	$(document).on('change', '.dc-quantity-spinner-list', function(){
    		if($(this).parents('.product-thumb').find('[onclick^="cart.add"]').length){
    			var buttonCart = $(this).parents('.product-thumb').find('[onclick^="cart.add"]');
    			var productId = buttonCart.attr('onclick').match(/\d+/);
    			buttonCart.attr('data-product-id', productId).removeAttr('onclick');
    		}
    	});
    	$(document).on('click', '[data-product-id]', function(){
    		cart.add($(this).data('product-id'), $(this).parents('.product-thumb').find('.dc-quantity-spinner-list').val());
    	});
    });
    //--></script> 

     

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

Important Information

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