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

stebgo

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

    79
  • З нами

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

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

  1. Мультиязычные отзывы для людей, для поисковиков или и то и другое :ph34r: В общем сделал два варианта: Описание, принцип работы, +/ - вариант 1 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 1) phpMyAdmin Открываем вашу базу в phpMyAdmin или в том что вы используете, находим таблицу (префикс вашей таблицы)_review и добавляем в структуру еще одно поле: language не знаю какие параметры более правильно указать, себе сделал int(5) 2) Модель Открываем файл /catalog/model/catalog/review.php находим в начале кода $this->db->query("INSERT INTO " . DB_PREFIX . "review SET author = '" . $this->db->escape($data['name']) . "', customer_id = '" . (int)$this->customer->getId() . "', product_id = '" . (int)$product_id . "', text = '" . $this->db->escape($data['text']) . "', rating = '" . (int)$data['rating'] . "', date_added = NOW()"); и меняем ее на $this->db->query("INSERT INTO " . DB_PREFIX . "review SET author = '" . $this->db->escape($data['name']) . "', customer_id = '" . (int)$this->customer->getId() . "', product_id = '" . (int)$product_id . "', text = '" . $this->db->escape($data['text']) . "', rating = '" . (int)$data['rating'] . "', date_added = NOW()"); тут добавлена запись языка в поле которое добавили в таблицу. ------------------------------------------------------------------------------------------------------------------------------ В конце кода, перед последним закрывающим знаком } вставляем две функции public function getReviewsByProductId2($product_id, $start = 0, $limit = 20) { if ($start < 0) { $start = 0; } if ($limit < 1) { $limit = 20; } $query = $this->db->query("SELECT r.review_id, r.author, r.rating, r.text, p.product_id, pd.name, p.price, p.image, r.date_added FROM " . DB_PREFIX . "review r LEFT JOIN " . DB_PREFIX . "product p ON (r.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) WHERE p.product_id = '" . (int)$product_id . "' AND p.date_available <= NOW() AND p.status = '1' AND r.status = '1' AND r.language = '" . (int)$this->config->get('config_language_id') . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY r.date_added DESC LIMIT " . (int)$start . "," . (int)$limit); return $query->rows; } public function getTotalReviewsByProductId2($product_id) { $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "review r LEFT JOIN " . DB_PREFIX . "product p ON (r.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) WHERE p.product_id = '" . (int)$product_id . "' AND p.date_available <= NOW() AND p.status = '1' AND r.status = '1' AND r.language = '" . (int)$this->config->get('config_language_id') . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "'"); return $query->row['total']; } что это ------------------------------------------------------------------------------------------------------------------------------------------------- 3) controller Открываем файл /catalog/controller/product/product.php и, если вы делали отзывы по моему рецепту, найдите в коде, который вы вставили, следующее $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); и замените его на это $review_total = $this->model_catalog_review->getTotalReviewsByProductId2($this->request->get['product_id']); $results = $this->model_catalog_review->getReviewsByProductId2($this->request->get['product_id'], ($page - 1) * 5, 5); изменились только названия функций на те что мы добавили в модель getTotalReviewsByProductId2 и getReviewsByProductId2 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ На этом первый вариант закончен. он требует доработки проблем описанных в начале поста, но в принципе уже работает. дальше вариант 2 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Возвращаем ajax для отзывов без ajax :ugeek: Открываем шаблон товара (по умолчанию тут /catalog/view/theme/default/template/product/product.tpl) И возвращаем обратно $('#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; ?>'); если вы вставляли мой костыль для перемотки к отзывам, то он больше не нужен. Все, теперь мультиязычные и доступные для поисковиков отзывы с загрузкой через ajax у вас должны работать.... если вы не накосячили и я чего не забыл написать.... PS Знающие люди! гляньте глазом, может такую ересь нельзя на реальный магазин ставить ..... напишите что подправить.
  2. Косяк исправил, добавил в первый пост описание исправлений
  3. есть один косяк - при переходе на вторую и далее страницу отзывов из ссылки на 1 страницу удаляется только page=1 на ссылке остаётся висеть ?review_ помогите с этим разобраться. где происходит удаление page для первой страницы? вроде должно быть в /system/library/pagination.php но сейчас нет времени разбираться, только ночью :) если кто найдет решение, напишите.
  4. Здравствуйте :) Эта тема для тех: 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'); } Что тут, откуда и для чего Находим и удаляем или закомментируем // $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 Открываем файл шаблона ( если по умолчанию то /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 } ?> тут есть мои костыли Удаляем обработку 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) начисление баллов за отзыв Буду благодарен за исправления ошибок и костылей.
  5. Здравствуйте. Подскажите что за интеграция с торговой площадкой etsy.com появилась в OC2 - поиск практически не дал результатов кроме того что интеграция вроде есть. В админке ничего не нашел, но есть два файла в admin/model/openbay/ - etsy.php и etsy_product.php , есть файлы и в папке admin/controller/openbay/ немного больше, а так же в папке шаблона админки. что это, для чего и как использовать? есть какой то https://www.openbaypro.com/ с драконовскими тарифами.
  6. под меня не нужно делать перевод, нужно делать согласно нормам - весь текст в языковом файле в папке нужного языка. та же история и с файлами стилей и кодом. почему текст счетчика - дни, минуты итд для страницы товара находится в php файле, а для страницы категории в файле скрипта? что означает <operation error="skip"> в xml файле? ЗЫ Я просто хочу что бы вы сделали качественный модуль :) который стоит своих денег, наведите порядок и доработайте.
  7. Здравствуйте. Таймер работает но... это нельзя назвать модулем. 1) Зачем он мне меняет настроенные мной стили для кнопки купить на странице товара, заменяет полностью на ваш стиль. 2) у меня магазин на 3-х языках, и то что прописано у вас в коде для англоязычных покупателей - шлак (текст удалил). 3) Зачем в папку catalog/view/javascript пихать css и php файлы думал сэкономить время на создании собственного счетчика, купил...... уже переделал под себя, но другим не советую его покупать в текущем состоянии. ЗЫ в придачу, если страница долго открыта она перестает отвечать, браузеры хром и мазила выдают ошибку. этот модуль нельзя продавать. DEL ...
  8. Здравствуйте. В настройках модуля можно настроить разные поля, способы доставки и оплаты для разных групп покупателей. Но нельзя настроить "Минимальные/максимальные значения" для разных групп покупателей - для обычных покупателей одна сумма или кол-во для оптовых другие значения. Добавьте пожалуйста такую настройку если не сложно.
  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. это небольшое описание способа, которое видно в корзине под названием способа оплаты или доставки. вставил пока используя модуль симпле для карт вот такое описание "Вы можете использовать карту VISA или MasterCard, если для нее включена защита 3-D Secure." без 3d не работает точно, пробовал с белорусских карт виза, недавно делал. когда делал бабулька работающая там говорила мне - зачем тебе это 3d защита у нас же она нигде не используется, а платить в интернете можно с этой карты, она же виза электрон, да и делать с защитой дороже. в общем у большинства беларусов нет 3-D Secure и они не представляют что это такое, так как карты в основном получают при трудоустройстве и естественно карты самые дешевые.
  15. я так понял что принимаются только карты с защитой 3-D Secure ? или в настройках яндекса можно это отключить? и добавте пожалуйста в языковой файл text_description - для описания способо оплаты
  16. здравствуйте. установил в своем магазине комментарии 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 запросы или где то еще косяки?
  17. жду версию с api просьба сделать в этой версии - при оплате не в российских рублях конвертацию в российские рубли по курсу обмена сайта.
  18. для тех у кого не дефолтный шаблон 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 не менял кнопку, вставил нужное значение в карточку и все заработало.
  19. да мне бы просто код записи в базу :), какие то нюансы - пишется купон в одну таблицу или в несколько может еще что то, или хоть где он формируется, в каком файле. попробую сам для начала, если не получится буду спрашивать.
  20. Здравствуйте. помогите пожалуйста с кодом создания купона. код будет находится в кабинете пользователя, пока не решил где точно... купон должен создаваться при первом посещении кабинета. необходимо что бы при запуске кода он проверял наличие в базе купона с определенным кодом и при его отсутствии создавал запись. параметры произвольные, я их потом подгоню под нужные
×
×
  • Створити...

Important Information

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