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

stebgo

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

    79
  • З нами

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

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

  1. Косяк исправил, добавил в первый пост

    описание исправлений

     
    в файле /system/library/pagination.php
     
    после строки 

    $num_pages = ceil($total / $limit);
    

    вставить

    $pages = array("review_page={page}", "page={page}");
    

    review_page можно заменить на то что вы хотите и изменили в контроллере и шаблоне
     
    далее находим такие строки

    $output .= '<li><a href="' . str_replace('&', '&', rtrim( str_replace('page={page}', '', $tmp_url), '?&')) . '">' . $this->text_first . '</a></li>';
    
    $output .= '<li><a href="' . str_replace('&', '&', rtrim( str_replace('page={page}', '', $tmp_url), '?&')) . '">' . $this->text_prev . '</a></li>';
    
    $output .= '<li><a href="' . str_replace('&', '&', rtrim( str_replace('page={page}', '', $tmp_url), '?&')) . '">' . $i . '</a></li>';
    

    и заменяем в них 

    'page={page}'
    

    на 

    $pages
    

    в итоге получим такой код в файле /system/library/pagination.php
     

    <?php
    class Pagination {
    	public $total = 0;
    	public $page = 1;
    	public $limit = 20;
    	public $num_links = 8;
    	public $url = '';
    	public $text_first = '|<';
    	public $text_last = '>|';
    	public $text_next = '>';
    	public $text_prev = '<';
    
    	public function render() {
    		$total = $this->total;
    
    		if ($this->page < 1) {
    			$page = 1;
    		} else {
    			$page = $this->page;
    		}
    
    		if (!(int)$this->limit) {
    			$limit = 10;
    		} else {
    			$limit = $this->limit;
    		}
    
    		$num_links = $this->num_links;
    		$num_pages = ceil($total / $limit);
                    
                    $pages = array("review_page={page}", "page={page}");
    
    		$this->url = str_replace('%7Bpage%7D', '{page}', $this->url);
    
    		$output = '<ul class="pagination">';
    
    		if ($page > 1) {
    			$tmp_url = str_replace('&', '&', $this->url);
    			$output .= '<li><a href="' . str_replace('&', '&', rtrim( str_replace($pages, '', $tmp_url), '?&')) . '">' . $this->text_first . '</a></li>';
    			if ($page == 2){
    				$output .= '<li><a href="' . str_replace('&', '&', rtrim( str_replace($pages, '', $tmp_url), '?&')) . '">' . $this->text_prev . '</a></li>';
    			}else{
    				$output .= '<li><a href="' . str_replace('{page}', $page - 1, $this->url) . '">' . $this->text_prev . '</a></li>';
    			}
    		}
    
    		if ($num_pages > 1) {
    			if ($num_pages <= $num_links) {
    				$start = 1;
    				$end = $num_pages;
    			} else {
    				$start = $page - floor($num_links / 2);
    				$end = $page + floor($num_links / 2);
    
    				if ($start < 1) {
    					$end += abs($start) + 1;
    					$start = 1;
    				}
    
    				if ($end > $num_pages) {
    					$start -= ($end - $num_pages);
    					$end = $num_pages;
    				}
    			}
    
    			for ($i = $start; $i <= $end; $i++) {
    				if ($page == $i) {
    					$output .= '<li class="active"><span>' . $i . '</span></li>';
    				} else {
    					if ($i == 1){
    						$output .= '<li><a href="' . str_replace('&', '&', rtrim( str_replace($pages, '', $tmp_url), '?&')) . '">' . $i . '</a></li>';
    					}else{
    						$output .= '<li><a href="' . str_replace('{page}', $i, $this->url) . '">' . $i . '</a></li>';
    					}
    				}
    			}
    		}
    
    		if ($page < $num_pages) {
    			$output .= '<li><a href="' . str_replace('{page}', $page + 1, $this->url) . '">' . $this->text_next . '</a></li>';
    			$output .= '<li><a href="' . str_replace('{page}', $num_pages, $this->url) . '">' . $this->text_last . '</a></li>';
    		}
    
    		$output .= '</ul>';
    
    		if ($num_pages > 1) {
    			return $output;
    		} else {
    			return '';
    		}
    	}
    }
    
  2. есть один косяк - при переходе на вторую и далее страницу отзывов из ссылки на 1 страницу удаляется только page=1

    на ссылке остаётся висеть ?review_

     

    помогите с этим разобраться.

    где происходит удаление page для первой страницы? 

     

    вроде должно быть в /system/library/pagination.php но сейчас нет времени разбираться, только ночью :) 

    если кто найдет решение, напишите.

  3. Здравствуйте :)

    Эта тема для тех:
    1) кого не устраивают стандартные отзывы товаров с ajax в opencart 2 и ocStrore 2
    2) кому не подходят, не нравятся, или нет желания покупать готовые решения отзывов для товаров
    3) кто хочет немного погеммороится с кодом, но понять как все это работает и что можно сделать под свои запросы.
    4) для истинных программистов-альтруистов готовых безвозмездно помочь советом и кодом.

    ! Я очень плохо знаю PHP, HTML, CSS, javascript
    ! Любой код написанный мной может содержать ошибки, являться говнокодом, снижать безопасность и т. д.
    ! Комментарии делаю для своего магазина (ocStore 2.1.0.2) на который планирую переходить с версии 1,5 - по этому рассматриваю, тестирую, настраиваю код только для этой версии ocSrore.
    ! Я надеюсь на помощь - для этого и создал тему.
     

    Комментарии без ajax для opencart / ocstore 2.1.0.2


    В файле /catalog/controller/product/product.php

    найти

    $this->model_catalog_product->updateViewed($this->request->get['product_id']);

    и после нее вставить следующее

    $this->load->model('catalog/review');
     
    $data['text_no_reviews'] = $this->language->get('text_no_reviews');
     
    if (isset($this->request->get['review_page'])) {
    $page = $this->request->get['review_page'];
    } else {
    $page = 1;
    }
     
    $data['reviews_array'] = array();
     
    $review_total = $this->model_catalog_review->getTotalReviewsByProductId($this->request->get['product_id']);
     
    $results = $this->model_catalog_review->getReviewsByProductId($this->request->get['product_id'], ($page - 1) * 5, 5);
     
    foreach ($results as $result) {
    $data['reviews_array'][] = array(
    'author'     => $result['author'],
    'text'       => nl2br($result['text']),
    'rating'     => (int)$result['rating'],
    'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added']))
    );
    }
     
    $pagination = new Pagination();
    $pagination->total = $review_total;
    $pagination->page = $page;
    $pagination->limit = 5;
                    $pagination->text = $this->language->get('text_pagination');
    $pagination->url = $this->url->link('product/product', $url . '&product_id=' . $this->request->get['product_id']. '&review_page={page}');
                    
                                                        
                    
    $data['pagination'] = $pagination->render();
     
    $data['results'] = sprintf($this->language->get('text_pagination'), ($review_total) ? (($page - 1) * 5) + 1 : 0, ((($page - 1) * 5) > ($review_total - 5)) ? $review_total : ((($page - 1) * 5) + 5), $review_total, ceil($review_total / 5));
     
                    // http://googlewebmastercentral.blogspot.com/2011/09/pagination-with-relnext-and-relprev.html
    if ($page == 1) {
       $this->document->addLink($this->url->link('product/product', 'product_id=' . $this->request->get['product_id']), 'canonical');
    } elseif ($page == 2) {
       $this->document->addLink($this->url->link('product/product', 'product_id=' . $this->request->get['product_id']), 'prev');
    } else {
       $this->document->addLink($this->url->link('product/product', 'product_id=' . $this->request->get['product_id']) . '&review_page='. ($page - 1), 'prev');
    }
                            $limit = 5;
    if ($limit && ceil($review_total / $limit) > $page) {
       $this->document->addLink($this->url->link('product/product', 'product_id=' . $this->request->get['product_id']) . '&review_page='. ($page + 1), 'next');
                            }

     
    Что тут, откуда и для чего


    кусок кода для вставки взят из функции public function review() и немного отредактирован.
    функция находится чуть ниже в этом же файле. эта функция вызывается из шаблона с помощью ajax. Если код выше не работает в вашей версии opencart можете отредактировать код из функции и вставить его.

    важно заменить код из функции

    $data['reviews'] = array();

    на

    $data['reviews_array'] = array();

    точнее везде в этом коде заменить reviews на reviews_array
    так как переменная reviews уже используется в шаблоне для отображений рейтинг / просмотр и добавления отзыва.
    -----------------------------
    дальше нужно изменить ссылку для пагинации
    это

    $pagination->url = $this->url->link('product/product/review', 'product_id=' . $this->request->get['product_id'] . '&page={page}');

    заменить на это

    $pagination->url = $this->url->link('product/product', $url . '&product_id=' . $this->request->get['product_id']. '&review_page={page}');

    или просто убрать /review - теперь при клике на кнопки навигации вызываться будет на шаблон отзывов а шаблон продукту с review_page=****
    -----------------------------

    Изменить количество отображаемых отзывов можно заменив все 5 на нужное вам число.

    -----------------------------

    Даем поисковикам понять что это одна статья/товар разбитый на страницы

    Этот кусок кода я спер в /catalog/controller/product/category.php строка 362

    // http://googlewebmastercentral.blogspot.com/2011/09/pagination-with-relnext-and-relprev.html
    if ($page == 1) {
       $this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id'], 'SSL'), 'canonical');
    } elseif ($page == 2) {
       $this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id'], 'SSL'), 'prev');
    } else {
       $this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id'] . '&page='. ($page - 1), 'SSL'), 'prev');
    }
     
    if ($limit && ceil($product_total / $limit) > $page) {
       $this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id'] . '&page='. ($page + 1), 'SSL'), 'next');
    }

    заменив
     
    page на review_page
     
    и

    'product/category', 'path=' . $category_info['category_id'],

    на

    'product_id=' . $this->request->get['product_id']),

    эту часть 'SSL'), убрал так как ее нет в /catalog/controller/product/product.php (у меня в 230 строке) то есть в файле который мы редактируем, то есть эта ссылка больше не нужна и в 230 строке я ее закомментировал //
     
    --------------------
    В коде,  в некоторых местах я изменил page на review_page - если оставить page то появляются косяки с хлебными крошками. более простого способа не нашел.  если есть желание можете заменить на свой вариант.
     



    Находим и удаляем или закомментируем //

    $this->document->addLink($this->url->link('product/product', 'product_id=' . $this->request->get['product_id']), 'canonical');

    так как это появилось в наших отзывах и изменяется от условий.
     

    На этом с файлом /catalog/controller/product/product.php закончили

     

    -----------------------------------------------------------------------------------------------

     

     
    в файле /system/library/pagination.php
     
    после строки 

    $num_pages = ceil($total / $limit);
    

    вставить

    $pages = array("review_page={page}", "page={page}");
    

    review_page можно заменить на то что вы хотите и изменили в контроллере и шаблоне
     
    далее находим такие строки

    $output .= '<li><a href="' . str_replace('&', '&', rtrim( str_replace('page={page}', '', $tmp_url), '?&')) . '">' . $this->text_first . '</a></li>';
    
    $output .= '<li><a href="' . str_replace('&', '&', rtrim( str_replace('page={page}', '', $tmp_url), '?&')) . '">' . $this->text_prev . '</a></li>';
    
    $output .= '<li><a href="' . str_replace('&', '&', rtrim( str_replace('page={page}', '', $tmp_url), '?&')) . '">' . $i . '</a></li>';
    

    и заменяем в них 

    'page={page}'
    

    на 

    $pages
    

    в итоге получим такой код в файле /system/library/pagination.php

    <?php
    class Pagination {
    	public $total = 0;
    	public $page = 1;
    	public $limit = 20;
    	public $num_links = 8;
    	public $url = '';
    	public $text_first = '|<';
    	public $text_last = '>|';
    	public $text_next = '>';
    	public $text_prev = '<';
    
    	public function render() {
    		$total = $this->total;
    
    		if ($this->page < 1) {
    			$page = 1;
    		} else {
    			$page = $this->page;
    		}
    
    		if (!(int)$this->limit) {
    			$limit = 10;
    		} else {
    			$limit = $this->limit;
    		}
    
    		$num_links = $this->num_links;
    		$num_pages = ceil($total / $limit);
                    
                    $pages = array("review_page={page}", "page={page}");
    
    		$this->url = str_replace('%7Bpage%7D', '{page}', $this->url);
    
    		$output = '<ul class="pagination">';
    
    		if ($page > 1) {
    			$tmp_url = str_replace('&', '&', $this->url);
    			$output .= '<li><a href="' . str_replace('&', '&', rtrim( str_replace($pages, '', $tmp_url), '?&')) . '">' . $this->text_first . '</a></li>';
    			if ($page == 2){
    				$output .= '<li><a href="' . str_replace('&', '&', rtrim( str_replace($pages, '', $tmp_url), '?&')) . '">' . $this->text_prev . '</a></li>';
    			}else{
    				$output .= '<li><a href="' . str_replace('{page}', $page - 1, $this->url) . '">' . $this->text_prev . '</a></li>';
    			}
    		}
    
    		if ($num_pages > 1) {
    			if ($num_pages <= $num_links) {
    				$start = 1;
    				$end = $num_pages;
    			} else {
    				$start = $page - floor($num_links / 2);
    				$end = $page + floor($num_links / 2);
    
    				if ($start < 1) {
    					$end += abs($start) + 1;
    					$start = 1;
    				}
    
    				if ($end > $num_pages) {
    					$start -= ($end - $num_pages);
    					$end = $num_pages;
    				}
    			}
    
    			for ($i = $start; $i <= $end; $i++) {
    				if ($page == $i) {
    					$output .= '<li class="active"><span>' . $i . '</span></li>';
    				} else {
    					if ($i == 1){
    						$output .= '<li><a href="' . str_replace('&', '&', rtrim( str_replace($pages, '', $tmp_url), '?&')) . '">' . $i . '</a></li>';
    					}else{
    						$output .= '<li><a href="' . str_replace('{page}', $i, $this->url) . '">' . $i . '</a></li>';
    					}
    				}
    			}
    		}
    
    		if ($page < $num_pages) {
    			$output .= '<li><a href="' . str_replace('{page}', $page + 1, $this->url) . '">' . $this->text_next . '</a></li>';
    			$output .= '<li><a href="' . str_replace('{page}', $num_pages, $this->url) . '">' . $this->text_last . '</a></li>';
    		}
    
    		$output .= '</ul>';
    
    		if ($num_pages > 1) {
    			return $output;
    		} else {
    			return '';
    		}
    	}
    }
    

    можете просто заменить содержимое файла на этот код


     
    Открываем файл шаблона ( если по умолчанию то /catalog/view/theme/default/template/product/product.tpl)

    находим 

    <div id="review"></div>
    

    или то место куда ajax вставляет отзывы

    и вставляем в этот div

    <?php if ($reviews_array) { ?>
                    <?php foreach ($reviews_array as $review) { ?>
                    <table class="table table-striped table-bordered">
                      <tr>                  
                        <td style="width: 50%;"><strong><?php echo $review['author']; ?></strong></td>
                        <td class="text-right"><?php echo $review['date_added']; ?></td>
                      </tr>
                      <tr>
                        <td colspan="2"><p><?php echo $review['text']; ?></p>
                          <?php for ($i = 1; $i <= 5; $i++) { ?>
                          <?php if ($review['rating'] < $i) { ?>
                          <span class="fa fa-stack"><i class="fa fa-star-o fa-stack-2x"></i></span>
                          <?php } else { ?>
                          <span class="fa fa-stack"><i class="fa fa-star fa-stack-2x"></i><i class="fa fa-star-o fa-stack-2x"></i></span>
                          <?php } ?>
                          <?php } ?></td>
                      </tr>
                    </table>
                    <div itemprop="review" itemscope itemtype="http://schema.org/Review">
                        <meta itemprop="itemReviewed" content="<?php echo $heading_title; ?>" >
                        <meta itemprop="author" content="<?php echo $review['author']; ?>" >
                        <meta itemprop="datePublished" content="<?php                          
                              $date1 = strtotime($review['date_added']); 
                              $new_date = date('Y-m-d', $date1);
                              echo $new_date; 
                              ?>">
                        <div itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating">
                          <meta itemprop="worstRating" content = "1"/>
                          <meta itemprop="ratingValue" content="<?php echo $review['rating']?>"/>
                          <meta itemprop="bestRating" content = "5"/>
                        </div>
                        <meta itemprop="description" content="<?php echo $review['text']; ?>" />
                    </div>
                    <?php } ?>
                    <div class="text-right"><?php echo $pagination; ?></div>
                    <?php } else { ?>
                    <p><?php echo $text_no_reviews; ?></p>
                    <?php } ?>

    тут есть мои костыли


    валидатор от яндекса ругался на формат даты, ему нужен Y-m-d
     
    использовал такой костыль
     

    <meta itemprop="datePublished" content="<?php                          
                              $date1 = strtotime($review['date_added']); 
                              $new_date = date('Y-m-d', $date1);
                              echo $new_date; 
                              ?>">
    

    теперь гугл и яндекс валидаторы такую дату понимают.

    ---------
    не до конца определился как будет более правильно

    <meta itemprop="itemReviewed" content="<?php echo $heading_title; ?>" > 

    или

    <meta itemprop="name" content="<?php echo $heading_title; ?>" >
    

    на itemprop="name" валидаторы ругались что нет itemReviewed
    может их совместно использовать надо?


    Удаляем обработку ajax, находим почти в самом низу кода:

     $('#review').delegate('.pagination a', 'click', function(e) {
               e.preventDefault();
               $('#review').fadeOut('slow');
               $('#review').load(this.href);
               $('#review').fadeIn('slow');
          });
          $('#review').load('index.php?route=product/product/review&product_id=<?php echo $product_id; ?>'); 

    можно вместо него вставить:
     

    $(document).ready(function() {
    <?php if(isset($_GET['review_page'])){ ?> 
    $('a[href=\'#tab-review\']').trigger('click'); 
    var scrollTop = $('#tab-review').offset().top;
    $(document).scrollTop(scrollTop);
    <?php } ?>
    });
    

    тогда при пагинации будет открываться таб с отзывами и скролл к нему (не работает при переходе обратно на первую страницу)


    ---------------------------------------------------------------------------------------------------------------------
    Вот и все
    --------------

    Большая часть материала взята с сайта http://cmykon.com.ua/opencart/otzyvy-bez-ajax-ili-seo-otzyvy-v-opencart/
    не работает в opencart 2.1.0.2

    В планах:
    1) вывод отзывов в зависимости от текущего языка
    2) начисление баллов за отзыв


    Буду благодарен за исправления ошибок и костылей.

    • +1 3
  4. Здравствуйте.

    Подскажите что за интеграция с торговой площадкой etsy.com появилась в OC2 - поиск практически не дал результатов кроме того что интеграция вроде есть. В админке ничего не нашел, но есть два файла в  admin/model/openbay/ - etsy.php и etsy_product.php , есть файлы и в папке admin/controller/openbay/ немного больше, а так же в папке шаблона админки. что это, для чего и как использовать?

     

    есть какой то https://www.openbaypro.com/ с драконовскими тарифами.

  5. под меня не нужно делать перевод, нужно делать согласно нормам - весь текст в языковом файле в папке нужного языка.

    та же история и с файлами стилей и кодом.

     

    почему текст счетчика - дни, минуты итд для страницы товара находится в php файле, а для страницы категории в файле скрипта?

     

    что означает <operation error="skip"> в xml файле?

     

     

    ЗЫ

     

    Я просто хочу что бы вы сделали качественный модуль :) который стоит своих денег, наведите порядок и доработайте.

  6. Здравствуйте.

    Таймер работает но... это нельзя назвать модулем.

     

    1) Зачем он мне меняет настроенные мной стили для кнопки купить на странице товара, заменяет полностью на ваш стиль.

    2) у меня магазин на 3-х языках, и то что прописано у вас в коде для англоязычных покупателей - шлак (текст удалил).

    3) Зачем в папку catalog/view/javascript   пихать  css и php файлы

     

     

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

     

    уже переделал под себя, но другим не советую его покупать в текущем состоянии.

     

    ЗЫ

     

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

     

    этот модуль нельзя продавать.

     

    DEL ...

  7. Здравствуйте.

    В настройках модуля можно настроить разные поля, способы доставки и оплаты для разных групп покупателей.

    Но нельзя настроить "Минимальные/максимальные значения" для разных групп покупателей - для обычных покупателей одна сумма или кол-во для оптовых другие значения. 

    Добавьте пожалуйста такую настройку если не сложно.

  8. Если у кого-то появится проблема с валидацией email при регистрации или оформлении заказа из-за точки в имени почтового ящика, то вот регулярное выражение которое решает эту проблему: /^[-\w.]+@([A-z0-9][-A-z0-9]+\.)+[A-z]{2,4}$/si

    как сделать валидацию нижнего подчеркивания _ , такое мыло [email protected] не проходит валидацию

  9. вроде работает

     

    оставил только

    // Language Detection
    
    
    $languages = array();
    
    $query = $db->query("SELECT * FROM " . DB_PREFIX . "language WHERE status = '1'"); 
    
    foreach ($query->rows as $result) {
    	$languages[$result['code']] = $result;
    }
    
    $code = $config->get('config_language');
    
    $config->set('config_language_id', $languages[$code]['language_id']);
    $config->set('config_language', $languages[$code]['code']);
    
    // Language
    
    $language = new Language($languages[$code]['directory']);
    $language->load($languages[$code]['filename']);	
    $registry->set('language', $language); 
    
    

    Посмотрите, может это как то плохо я сделал :)

  10. вот нашел кусок кода в index.php

    // Language Detection
    $languages = array();
    
    $query = $db->query("SELECT * FROM " . DB_PREFIX . "language WHERE status = '1'"); 
    
    foreach ($query->rows as $result) {
    	$languages[$result['code']] = $result;
    }
    
    $detect = '';
    
    
    
    if (isset($request->server['HTTP_ACCEPT_LANGUAGE']) && ($request->server['HTTP_ACCEPT_LANGUAGE'])) { 
    	$browser_languages = explode(',', $request->server['HTTP_ACCEPT_LANGUAGE']);
    	
    	foreach ($browser_languages as $browser_language) {
    		foreach ($languages as $key => $value) {
    			if ($value['status']) {
    				$locale = explode(',', $value['locale']);
    
    				if (in_array($browser_language, $locale)) {
    					$detect = $key;
    				}
    			}
    		}
    	}
    }
    
    
    
    if (isset($session->data['language']) && array_key_exists($session->data['language'], $languages) && $languages[$session->data['language']]['status']) {
    	$code = $session->data['language'];
    } elseif (isset($request->cookie['language']) && array_key_exists($request->cookie['language'], $languages) && $languages[$request->cookie['language']]['status']) {
    	$code = $request->cookie['language'];
    } elseif ($detect) {
    	$code = $detect;
    } else {
    	$code = $config->get('config_language');
    }
    
    if (!isset($session->data['language']) || $session->data['language'] != $code) {
    	$session->data['language'] = $code;
    }
    
    if (!isset($request->cookie['language']) || $request->cookie['language'] != $code) {	  
    	setcookie('language', $code, time() + 60 * 60 * 24 * 30, '/', $request->server['HTTP_HOST']);
    }			
    
    $config->set('config_language_id', $languages[$code]['language_id']);
    $config->set('config_language', $languages[$code]['code']);
    
    
    
    // Language	
    $language = new Language($languages[$code]['directory']);
    $language->load($languages[$code]['filename']);	
    $registry->set('language', $language); 
    

    тут, если я правильно понимаю и происходит определение языка.

     

     

    ЗЫ

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

  11. Нужно отключить любой автоматический выбор языка на сайте, так как некоторые поисковики все равно индексируют страницы не на том языке который должен быть по умолчанию и есть проблемы у некоторых покупателей.

    не могу понять где устанавливается язык.

    /catalog/model/localisation/language.php - вывод всех языков но это не то.

    подскажите пожалуйста хоть строчку кода которая установит язык, дальше я сам доделаю в зависимости от id магазина.

  12. удалил

    <?php echo $currency; ?>
    

    вроде получше стало, но все равно автоматом определяет язык.

     

    Подскажите в к каком файле происходит определение языка посетителя и в каком файле происходит запись выбранного языка в куки

  13. Здравствуйте.

    У меня следующая проблема - на сайте установлены три языка, и сделано три магазина стандартным способом. в каждом магазине установлен свой язык по умолчанию. Только сейчас обнаружил что ocStore 1.5.4.1  выдает в любом из трех магазинов не по умолчанию, а в зависимости от кода страны откуда пришел покупатель, языка браузера или еще как то .

     

    Вот собственно хотелось бы убрать эту его функцию + убрать запоминание выбора языка(при переходе между магазинами).

     

    в место переключения языка сделаю потом ссылки на другие магазины.

  14. без 3d тоже работают

    виртуальные карты не работают(но может какието и работают)

     

    про  text_description - для описания способо оплаты не понял что это и для чего и где оно потом будет появляться?

     

    это небольшое описание способа, которое видно в корзине под названием способа оплаты или доставки.

    вставил пока используя модуль симпле для карт вот такое описание "Вы можете использовать карту VISA или MasterCard, если для нее включена защита 3-D Secure."

     

    без 3d не работает точно, пробовал с белорусских карт виза, недавно делал. когда делал бабулька работающая там говорила мне - зачем тебе это 3d защита у нас же она нигде не используется, а платить в интернете можно с этой карты, она же виза электрон, да и делать с защитой дороже.

    в общем у большинства беларусов нет 3-D Secure и они не представляют что это такое, так как карты в основном получают при трудоустройстве и естественно карты самые дешевые.

  15. здравствуйте.

    установил в своем магазине комментарии sv kament, в них есть функция сохранения комментариев на сервере сайта для seo.

    пытаюсь настроить сохранение в базу как написано тут http://svkament.ru/faq#kament_page_name

    так как плохо разбираюсь в php и работой с базой пока решил вставить  код в шаблон

    получился вот такой код

     <?php  
        
     $subdomain = "smold";
     $page_name ='http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
        
     function update_kament_comments($subdomain, $page_name) {
        $plain = '';
        $row = NULL;
        
        // Сначала проверим в БВ
        
        $result = $this->db->query("SELECT data, UNIX_TIMESTAMP(timestamp) as timestamp from kament_raw_comments WHERE page_name=\"$page_name\"");
        if(!$result) {
            error_log('Bad query in update_kament_comments()!');
            return NULL;
        } else {
            $row = mysql_fetch_assoc($result);
            if($row)
                $plain = $row->data;
        }
     
     
        // если данные в БД не найдены или они устарели - обновить с KAMENT сервера
        if(!$row || $row['timestamp'] < (time() - 1800) ) {
            $new_data = kament_download_from_url('http://' . $subdomain . ".svkament.ru/commentswidget/plain/?page_name=$page_name");
            if($new_data != NULL) {
                $plain = $new_data;
                $result = $this->db->query("INSERT INTO $table_name (page_name, timestamp, data) VALUES(\"$page_name\", NOW(), \"$new_data\") ON DUPLICATE KEY UPDATE timestamp=NOW(),data=\"$new_data\"");
                if(!$result) {
                    error_log('Unable to save new data to DB in update_kament_comments()');
                }
            }
        }
     
        return $plain;
    }
     
    // Скачать данные по заданному URL используя CURL
    function kament_download_from_url($url) {
        if(!function_exists('curl_version'))
            return NULL;
     
        $ch = @curl_init ( $url );
        if(!$ch)
            return NULL;
     
        curl_setopt( $ch, CURLOPT_AUTOREFERER, true );
        curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
        curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
        curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, FALSE);   
        curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, FALSE);
     
        $output = curl_exec ( $ch );
        $httpcode = curl_getinfo($ch,CURLINFO_HTTP_CODE);
        if (curl_errno ( $ch ) || $httpcode != 200) {
            return NULL;
        } else {
            curl_close ( $ch );
        }
     
        if( strpos($output, 'kament-plaintext-comments')===false )
            return NULL;
     
        return $output;
    }
        
        
    $plain_comments = update_kament_comments($subdomain, $page_name);
    ?>
        
        
    <div id="kament_comments">    
    <?php echo $plain_comments; ?>
    </div>
                            
    
    <script type="text/javascript">
    	/* * * НАСТРОЙКА * * */
    	var kament_subdomain = 'smold';
            
    	/* * * НЕ МЕНЯЙТЕ НИЧЕГО НИЖЕ ЭТОЙ СТРОКИ * * */
    	(function() {
    		var node = document.createElement('script'); node.type = 'text/javascript'; node.async = true;
    		node.src = 'http://' + kament_subdomain + '.svkament.ru/js/embed.js';
    		(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(node);
    	})();
    </script>
    <noscript>Для отображения комментариев нужно включить Javascript</noscript>
    

    таблицу в базе данных создал используя запрос из faq

    база данных без префикса.

     

    в общем прошу помощи в доработке этого кода под опенкарт (1,5,4,1), в данном виде не работает .

     

    нужно изменить только  sql запросы или где то еще косяки?

  16. для тех у кого не дефолтный шаблон

    1) смотрите куда заливаете файлы, залейте в свой шаблон

    2) в файле vqmod_ocu_waitlist.xml

    заменить все пути типа  <file name="catalog/view/theme/default/template/common/footer.tpl"> на  <file name="catalog/view/theme/*/template/common/footer.tpl">

    то есть - заменить default на *

     

     

    3) у меня он тоже пока не работает.... :-)  рою vqmod, что и вам советую, возможно что то изменено - добавлен класс или еще что то и vqmod не правит файл.

     

    работает в категории - по умолчанию

    в карточке товара vqmod не менял кнопку, вставил нужное значение в карточку и все заработало.

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

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

  18. Здравствуйте.

     

    помогите пожалуйста с кодом создания купона.

     

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

     

    необходимо что бы при запуске кода он проверял наличие в базе купона с определенным кодом и при его отсутствии создавал запись.

     

    параметры произвольные, я их потом подгоню под нужные

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

Important Information

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