Перейти к содержанию

elscept

Новичок
  • Публикаций

    16
  • Зарегистрирован

  • Посещение

Репутация

1 Обычный

1 Подписчик

Информация о elscept

  • Звание
    Пользователь
  • День рождения 19.10.1985

Информация

  • Пол
    Мужчина

Посетители профиля

1 163 просмотра профиля
  1. Модификатор был установлен, кеш тоже несколько раз чистил. Проблема решилась настройкой модуля Simple, а именно установкой зависимостей в блоке "Ограничение видимости вариантов доставки". Спасибо!
  2. "Использую" модуль совместно с последней версией Simple 4.9.4. Не фильтрует способы доставки/оплаты. Скрин настроек прикрепил.
  3. Не похоже. Оплатил модуль, после чего отправил письмо в котором еще раз указал те же данные, что и при покупке и... все. В ответ тишина. Я понимаю, что сейчас ночь, но ведь
  4. elscept

    Gulp + Livereload + Сервер

    Времени конечно прошло не мало и может ответ уже давно найден, но... Если коротко, то так: В корне сайта создаем папку "gulp", устанавливаем в нее Ноду, нужные расширения для Галпа (livereload обязательно, куда ж без него ), ставим Bower и качаем js-css библиотеки т.д. по вкусу. Далее, в gulpfile.js настраиваем таски для Галпа (что откуда брать и куда грузить после обработки) и, наконец, вместо привычного server: { baseDir: 'app' }, пишем proxy: 'myshop.loc', (вместо "myshop.loc" имя вашей папки с сайтом, естественно). Таск "gulp watch" может быть например таким gulp.task('watch', ['browser-sync', 'css-libs', 'scripts'], function() { gulp.watch('app/**/*.scss', ['sass']); gulp.watch('app/js/**/*.js', browserSync.reload); gulp.watch('../catalog/view/theme/**/*.html', browserSync.reload); gulp.watch('../catalog/view/theme/**/*.tpl', browserSync.reload); gulp.watch('../catalog/**/*.php', browserSync.reload); }); Отслеживать изменения прям во всех php файлах конечно не обязательно, это уже дело вкуса.
  5. Все куда проще. В том же файле system/library/url.php Строку public function link($route, $args = '', $connection = '') { меняем на public function link($route, $args = '', $connection = 'SSL') {
  6. Прошу прощения за, возможно, уже задававшийся вопрос, но поиски по теме и PDF-руководству результата не дали. Есть ли возможность через модуль задавать цену в зависимости от количества покупаемых товаров? Например: цена - 100$, от 3 шт - 95$, от 7 шт - 90$.
  7. Небольшая доработка позволяющая добавить возможность не заполняя мета теги Title и Description для товаров выводить их по шаблону определяемому в категории. Делалось для версии 1.5.3.2. Доступные ключи: [title], [price], [category] - название товара, цена и категория, к которой он привязан. Приоритетность вывода тега Title и Description (кроме 4 пункта): 1. Из товара 2. Из категории к которой привязан товар 3. Из родительской категории (т.е. категории более высокого уровня) 4. Использование в качестве Title названия товара Открываем в php MyAdmin БД сайта и выполняем запрос: ALTER TABLE `oc_category_description` ADD `product_seo_title` VARCHAR(256) NOT NULL; ALTER TABLE `oc_category_description` ADD `product_seo_description` VARCHAR(512) NOT NULL В файле admin/view/template/catalog/category_form.tpl Перед: <tr> <td><?php echo $entry_seo_h1; ?></td> <td><input type="text" name="category_description[<?php echo $language['language_id']; ?>][seo_h1]" maxlength="255" size="100" value="<?php echo isset($category_description[$language['language_id']]) ? $category_description[$language['language_id']]['seo_h1'] : ''; ?>" /></td> </tr> Добавляем: <tr> <td><?php echo $entry_product_seo_title; ?></td> <td><input type="text" name="category_description[<?php echo $language['language_id']; ?>][product_seo_title]" maxlength="255" size="100" value="<?php echo isset($category_description[$language['language_id']]) ? $category_description[$language['language_id']]['product_seo_title'] : ''; ?>" /></td> </tr> <tr> <td><?php echo $entry_product_seo_description; ?></td> <td><textarea name="category_description[<?php echo $language['language_id']; ?>][product_seo_description]" cols="97" rows="5"><?php echo isset($category_description[$language['language_id']]) ? $category_description[$language['language_id']]['product_seo_description'] : ''; ?></textarea> </tr> В файле admin/model/catalog.php В двух местах вместо: foreach ($data['category_description'] as $language_id => $value) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_description SET category_id = '" . (int)$category_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', description = '" . $this->db->escape($value['description']) . "', seo_title = '" . $this->db->escape($value['seo_title']) . "', seo_h1 = '" . $this->db->escape($value['seo_h1']) . "'"); } Добавляем: foreach ($data['category_description'] as $language_id => $value) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_description SET category_id = '" . (int)$category_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', description = '" . $this->db->escape($value['description']) . "', seo_title = '" . $this->db->escape($value['seo_title']) . "', product_seo_title = '" . $this->db->escape($value['product_seo_title']) . "', product_seo_description = '" . $this->db->escape($value['product_seo_description']) . "', seo_h1 = '" . $this->db->escape($value['seo_h1']) . "'"); } Или, если этот код у Вас отличается, просто добавляем в него: product_seo_title = '" . $this->db->escape($value['product_seo_title']) . "', product_seo_description = '" . $this->db->escape($value['product_seo_description']). "', Далее, после: foreach ($query->rows as $result) { $category_description_data[$result['language_id']] = array( 'name' => $result['name'], Добавляем: 'product_seo_title' => $result['product_seo_title'], 'product_seo_description' => $result['product_seo_description'], В файле admin/controller/catalog/category.php После: $this->data['entry_seo_h1'] = $this->language->get('entry_seo_h1'); Добавляем: $this->data['entry_product_seo_title'] = $this->language->get('entry_product_seo_title'); $this->data['entry_product_seo_description'] = $this->language->get('entry_product_seo_description'); В файле admin/language/russian/catalog/category.php Добавляем: $_['entry_product_seo_title'] = 'Meta Title товара:'; $_['entry_product_seo_description'] = 'Meta Description товара:'; В файле catalog/model/catalog/category.php После: public function getCategories($parent_id = 0) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id) LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) WHERE c.parent_id = '" . (int)$parent_id . "' AND cd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND c.status = '1' ORDER BY c.sort_order, LCASE(cd.name)"); return $query->rows; } Добавляем: public function getCategoryParent($category_id) { $query = $this->db->query("SELECT DISTINCT * FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.parent_id = cd.category_id) LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) WHERE c.category_id = '" . (int)$category_id . "' AND cd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND c.status = '1'"); return $query->row; } В файле catalog/controller/product/product.php Удаляем: $this->document->setDescription($product_info['meta_description']); Вместо: if ($product_info['seo_title']) { $this->document->setTitle($product_info['seo_title']); } else { $this->document->setTitle($product_info['name']); } Добавляем: $product_title = $product_info['name']; $product_price = $this->currency->format($this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax'))); $product_category = $category_info['name']; $parent_category = $this->model_catalog_category->getCategoryParent($category_id); $p_product_seo_title = $category_info['product_seo_title']; $p_product_seo_title = $parent_category['product_seo_title']; $product_seo_title = $category_info['product_seo_title']; $seo_old = array("[title]", "[price]", "[category]"); $seo_new = array("$product_title", "$product_price", "$product_category"); $p_product_seo_title = str_replace($seo_old, $seo_new, $p_product_seo_title); $product_seo_title = str_replace($seo_old, $seo_new, $product_seo_title); if ($product_info['seo_title']) { $this->document->setTitle($product_info['seo_title']); } else if ($category_info['product_seo_title']) { $this->document->setTitle($product_seo_title); } else if ($parent_category['product_seo_title']) { $this->document->setTitle($p_product_seo_title); } else { $this->document->setTitle($product_info['name']); } if ($product_info['seo_h1']) { $this->data['heading_title'] = $product_info['seo_h1']; } else { $this->data['heading_title'] = $product_info['name']; } if ($product_info['meta_description']) { $this->document->setDescription($product_info['meta_description']); } else if($category_info['product_seo_description']) { $product_seo_description = $category_info['product_seo_description']; $product_seo_description = str_replace($seo_old, $seo_new, $product_seo_description); $this->document->setDescription($product_seo_description); } else if($parent_category['product_seo_description']) { $p_product_seo_description = $parent_category['product_seo_description']; $p_product_seo_description = str_replace($seo_old, $seo_new, $p_product_seo_description); $this->document->setDescription($p_product_seo_description); }
  8. Тема старая, но очень хочется ответить. Вот пример <a></a> и <input> расположенных рядом. CSS-стили задействованы одинаковые. Можно конечно повозиться с CSS, но добиться 100% визуального соответствия ссылок и инпутов все равно вряд ли получится. Кроссбраузерное решение на примере страницы изменения пароля (account/password.tpl) Добавляем к форме id заменив код <form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data"> на <form action="<?php echo $action; ?>" id="<?php echo $action; ?>" method="post" enctype="multipart/form-data"> А инпут <input class="button btn" type="submit" value="<?php echo $button_continue; ?>" /> меняем на ссылку <a class="button btn" onclick="document.getElementById('<?php echo $action; ?>').submit()" ><?php echo $button_continue; ?></a> Результат
  9. Подскажите пожалуйста. На двуязычном сайте (русский + английский) все подписчики получают исключительно письма на русском языке. Непонятно, по какому принципу выполняется рассылка. И как вообще должно быть? Всем по два письма?
  10. Спасибо за пинок и за исправление! Так сложилось, что пришлось воспользоваться еще и чужим ;) Итак, готовое решение. В файле admin/view/template/catalog/product_list.tpl добавляем в ячейку с названием товара (или любую другую) код <br /> <span style="font-size:11px;color:#777;"> <?php echo $product['keyword']; ?> </span> В файле admin/controller/catalog/product.php после $this->data['products'][] = array( 'product_id' => $result['product_id'], 'name' => $result['name'], добавляем 'keyword' => $result['keyword'], В файле admin/model/catalog/product.php вместо $sql = "SELECT p.*, pd.*, m.name as 'm_name' FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id)"; вставляем $sql = "SELECT p.*, pd.*, m.name as 'm_name', ua.keyword FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id)"; $sql .= " LEFT JOIN " . DB_PREFIX . "url_alias ua ON (query = CONCAT('product_id=', p.product_id))"; Результат - очень удобно и можно визуально определять "шероховатые" ссылки наподобие трех последних :-)
  11. Пришла в голову идея реализовать отображение ЧПУ (seo-url, keyword, url_alias) в списке товаров в админке, а то открывать каждый товар чтобы посмотреть его ЧПУ - это просто каменный век какой-то. В файле admin/view/template/catalog/product_list.tpl добавил в ячейку с названием товара код <br /> <span style="font-size:11px;color:#777;"> <?php echo $product['keyword']; ?> </span> В файле admin/controller/catalog/product.php после $this->data['products'][] = array( 'product_id' => $result['product_id'], 'name' => $result['name'], добавил 'keyword' => $result['url_alias'], В файле admin/model/catalog/product.php после $sql = "SELECT p.*, pd.*, m.name as 'm_name' FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id)"; добавил $sql .= " LEFT JOIN " . DB_PREFIX . "url_alias ua ON (query = CONCAT('product_id=', p.product_id))"; Но ничего не получилось. В Opencart привязка ЧПУ к товарам выполняется через сопоставление поля product_id из таблицы product с полем query из таблицы url_alias, в котором данные хранятся не в виде цифры, а в виде строки вида "product_id=XX", а канкотенация в моем запросе, по всей видимости, не работает. Пол дня и почти всю ночь на это убил :ugeek: Люди добрые, помогите написать правильный запрос, думаю, реализация ЧПУ в списке товаров ни для кого не будет лишней.
  12. Если вывести модуль в модальном окне он постоянно выдает ошибку E-mail адрес введен неверно! Вывожу так <a rel="prettyPhoto" id="prettyPhoto" class="btn btn_subscribe" href="#inline-1"><?php echo $text_subscribe?></a> <script type="text/javascript" charset="utf-8"> $(document).ready(function(){ $("a[rel^='prettyPhoto']").prettyPhoto({ show_title: true, default_width: 250, //I have tried playing with these values default_height: 300, //I have tried playing with these values theme: 'pp_default', overlay_gallery: false, social_tools: false }); }); </script> Код в subscribe.tpl обернут в div <div id="inline-1" style="display:none;"> ... </div> Не подскажете в чем может быть причина ошибки?
  13. Так работать не будет. При переходе по ссылке получим ошибку "Неправильная токен-сессия. Авторизуйтесь снова." Чтобы ссылка нормально работала, нужно в файл admin/controller/common/header.php после кода if (!$this->user->isLogged() || !isset($this->request->get['token']) || !isset($this->session->data['token']) || ($this->request->get['token'] != $this->session->data['token'])) { $this->data['logged'] = ''; $this->data['home'] = $this->url->link('common/login', '', 'SSL'); } else { добавить строку вида (на примере модуля featured) $this->data['featured'] = $this->url->link('module/featured', 'token=' . $this->session->data['token'], 'SSL'); а в файл admin/view/template/common/header.tpl <li><a href="<?php echo $featured ?>">Модуль "Рекомендуемые товары"</a></li>
×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.