Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

Leaderboard

Popular Content

Showing content with the highest reputation on 07/25/2011 in all areas

  1. Всем доброго времени суток, очень понравился данный двиг, но хочется немного дополнить описание категорий, для начала попытаюсь описать чего хочу добиться и что для этого уже сделал (ЗЫ если честно в пыхе полный 0 хотя и люблю програмить на delphi))) Задача: добавить дополнительное описание категории, основное описание как и раньше сверху + дополнительное описание под вложеными категориями скрин как должно быть что уже сделал: в файле catalog\controller\product\category.php после строки $this->data['description'] = html_entity_decode($category_info['description'], ENT_QUOTES, 'UTF-8');добавил $this->data['description1'] = html_entity_decode($category_info['description1'], ENT_QUOTES, 'UTF-8'); в файле catalog\view\theme\sancart\template\product\category.tpl в нужном месте добавил <?php if ($description1) { ?> <div style="margin-bottom: 15px;"><?php echo $description1; ?></div> <?php } ?> еще добавил в БД в таблице oc_category_description дополнительное поле description1 если заносить данные в БД в это поле вручную то все отлчно работает НО теперь хочется автоматизировать все это дело и дополнить админку... начал ковярять код админки но это оказалось не так просто... файл admin\view\template\catalog\category_form.tpl после <tr> <td><?php echo $entry_description; ?></td> <td><textarea name="category_description[<?php echo $language['language_id']; ?>][description]" id="description<?php echo $language['language_id']; ?>"><?php echo isset($category_description[$language['language_id']]) ? $category_description[$language['language_id']]['description'] : ''; ?></textarea></td> </tr> добавил <tr> <td><?php echo $entry_description; ?></td> <td><textarea name="category_description[<?php echo $language['language_id']; ?>][description1]" id="description1<?php echo $language['language_id']; ?>"><?php echo isset($category_description[$language['language_id']]) ? $category_description[$language['language_id']]['description1'] : ''; ?></textarea></td> </tr> и еще добавил кусок кода для CKEDITOR CKEDITOR.replace('description1<?php echo $language['language_id']; ?>', { language: '<?php echo $lang; ?>', filebrowserBrowseUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>', filebrowserImageBrowseUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>', filebrowserFlashBrowseUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>', filebrowserUploadUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>', filebrowserImageUploadUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>', filebrowserFlashUploadUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>' }); вот что вышло скрин Решил сегодня на свежую голову еще раз подумать и получилось все доделать для этого нужно: файл admin\model\catalog\category.php в нем: строка 13 было: $this->db->query("INSERT INTO " . DB_PREFIX . "category_description (category_id, language_id, name, meta_keywords, meta_description, description, title, h1) VALUES ('" . (int)$category_id . "', '" . (int)$language_id . "', '" . $this->db->escape($value['name']) . "', '" . $this->db->escape($value['meta_keywords']) . "', '" . $this->db->escape($value['meta_description']) . "', '" . $this->db->escape($value['description']) . "', '" . $this->db->escape($value['title']) . "', '" . $this->db->escape($value['h1']) . "')");стало: $this->db->query("INSERT INTO " . DB_PREFIX . "category_description (category_id, language_id, name, meta_keywords, meta_description, description, title, h1, description1) VALUES ('" . (int)$category_id . "', '" . (int)$language_id . "', '" . $this->db->escape($value['name']) . "', '" . $this->db->escape($value['meta_keywords']) . "', '" . $this->db->escape($value['meta_description']) . "', '" . $this->db->escape($value['description']) . "', '" . $this->db->escape($value['title']) . "', '" . $this->db->escape($value['h1']) . "', '" . $this->db->escape($value['description1']) . "')"); строка 41: было: $this->db->query("INSERT INTO " . DB_PREFIX . "category_description (category_id, language_id, name, meta_keywords, meta_description, description, title, h1) VALUES ('" . (int)$category_id . "', '" . (int)$language_id . "', '" . $this->db->escape($value['name']) . "', '" . $this->db->escape($value['meta_keywords']) . "', '" . $this->db->escape($value['meta_description']) . "', '" . $this->db->escape($value['description']) . "', '" . $this->db->escape($value['title']) . "', '" . $this->db->escape($value['h1']) . "')");стало: $this->db->query("INSERT INTO " . DB_PREFIX . "category_description (category_id, language_id, name, meta_keywords, meta_description, description, title, h1, description1) VALUES ('" . (int)$category_id . "', '" . (int)$language_id . "', '" . $this->db->escape($value['name']) . "', '" . $this->db->escape($value['meta_keywords']) . "', '" . $this->db->escape($value['meta_description']) . "', '" . $this->db->escape($value['description']) . "', '" . $this->db->escape($value['title']) . "', '" . $this->db->escape($value['h1']) . "', '" . $this->db->escape($value['description1']) . "')"); и последнее строка 136-143 в foreach ($query->rows as $result) { после 'h1' => $result['h1'], добавил 'description1' => $result['description1'], вот вроде и все, может быть кому нибудь и пригодится а в идиале конечно было бы неплохо внести это в новую сборку
    1 point
  2. Предупреждение: данный способ влияет на производительность, т.к. добавлены две лишних операции (разделение строки и преобразование её в массив)в файле catalog/controller/product/category.php перед $this->data['products'][] = array( 'product_id' => $result['product_id'], добавить $description = split('NNNN',wordwrap(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 160, "NNNN")); чуть ниже 'description' => substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 100) . '..',заменить на 'description' => $description[0] . '..', 160 - это кол-во знаков после которых идёт обрезка NNNN - это просто разделитель (можете поставить что угодно, но желательно чтонить уникальное, пробелы - точки -запятые и прочие спец символы не допускаются...) Обрзка делается по целому слову. P.S. пример взят из рабочего кода без изменений...
    1 point
  3. модуль Export/Import лучше брать тут: http://www.opencart.com/index.php?route=extension/extension/info&extension_id=17&filter_search=export&filter_license=0&sort=e.date_modified&order=DESC они обновляются и можно выбрать под свою версию магазина opencart-1-4-9-18-export-import - у меня тоже были проблемы с изображениями при Export/Import opencart-1-4-9-x-27-export-import на ocstore_v0.2.2 - делает Export/Import основных изображений и одну дополнительную opencart-1-5-0-x-4-export-import.zip - работает на ocstore_v1.0.0_rc1, но прям сильно не тестил и уже есть ocstore_v1.0.1_rc2 понадобиться OpenOffice Calc для корректной работы с файлом пути к картинкам из файлового менеджера можно брать например в FreeCommander выделить изображения и Правка-копировать полное имя как текст, а потом в Notepad++ вставить и использовать поиск и замену для корректировки. (когда больше 100 фотографий в одной категории, то здорово время экономит) если описание такое красивое нужно, то теги надо вставлять и уже смотри сам, может через админку будет проще работать, чем в файле. (но тогда не забывать после работы в админке делать Export и уже править/работать с этим файлом) если есть варианты проще или что-то можно улучшить, то я бы тоже почитал мнения других:)
    1 point
  4. Пользуюсь Интеркассой: выводят без проблем (во всяком случае у меня) недостаток в использовании для клиента: не присылают реквизиты оплаты на e-mail, т.е. приходиться записывать, к тому же, скажем при оплате через терминалы, выдаст 2 идентификатора платежей первый от самой интеркассы, а второй от W1, который и надо использовать ( а первый то, так, для информации). короче, есть некоторая путаница. пока пройдешь оплату много окошек. Служба поддержки отвечает но не торопиться с ответом. LiqPay - хорошо, достаточно удобно (но минимальную регистрацию телефоном надо пройти), выводят на любую карту. как по мне - удобнная система. Обе системы принадлежат ПриватБанку. Для Юр.лиц у приватбанка есть и эквайринг (прием платежей по картам). Там должно быть все проще (без регистраций) но я не являюсь юр.лицом ни РФ ни Украины. Испытать не могу. Также использую PayPal (платят знающие систему), Robokassу(такая же беда как у интеркассы - много окошек, но кто знает, платит), WebMoney - много денег на кошельке не оставляю, на всякий случай.
    1 point
  5. Очень часто мелькают темы в которых упоминается про категории которые создают большую нагрузку, например в поиске или для drop-down меню. При этом всё что предлагают - отключать такие блоки при большом количестве категорий. Но на самом деле отключать не обязательно... Рекурсивный метод выборки данных самый распространённый, но не единственный. В случаях когда надо извлекать всё дерево категорий можно обойтись одним запросом не зависимо от количества уровней и количества элементов. Себе я делал так: В модель категорий добавил метод public function getAllCategories() { $category_data = $this->cache->get('category.all.' . $this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id')); if (!$category_data || !is_array($category_data)) { $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 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' AND c.sort_order <> '-1' ORDER BY c.sort_order, LCASE(cd.name)"); $category_data = array(); foreach ($query->rows as $row) { $category_data[$row['parent_id'] ][$row['category_id'] ] = $row; } $this->cache->set('category.all.' . $this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id'), $category_data); } return $category_data; } Метод возвращает массив всех узлов. Кадый узел это массив с ключом равным parent_id элементов массива. Все узлы и элементы в узлах отсортированы в соответствии с тем как задано в админке.Для построения многоуровневого списка надо обойти весь массив начиная от корня (узел 0) и при выводе каждой категории проверять наличие узла с ключом равным идентификатору категории. Если узел есть то выводим потомков, нету - выводим следующую категорию. Для drop-down меню я в контроллере модуля категорий добавил свойство protected $categories = array();и метод protected function getAllCategories($parent_id = 0, $current_path = '') { $output = ''; if (array_key_exists($parent_id, $this->categories)) { $results = $this->categories[$parent_id]; $output .= '<ul>'; foreach ($results as $result) { if (!$current_path) { $new_path = $result['category_id']; } else { $new_path = $current_path . '_' . $result['category_id']; } $output .= '<li>'; $children = ''; if (array_key_exists($result['category_id'], $this->categories)) { $children = $this->getAllCategories($result['category_id'], $new_path); } $href = $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&path=' . $new_path); // if ($this->category_id == $result['category_id']) { // будет помечена только активная категория if (in_array($result['category_id'], $this->path)) { // будут помечены активная категория и все категории до корня $output .= '<a class="active" href="' . $href . '">' . $result['name'] . '</a>'; } else { $output .= '<a href="' . $href . '">' . $result['name'] . '</a>'; } $output .= $children; $output .= '</li>'; } $output .= '</ul>'; } return $output; } В методе index такие изменения // $this->data['category'] = $this->getCategories(0); $this->categories = $this->model_catalog_category->getAllCategories(); $this->data['category'] = $this->getAllCategories(); Всё... теперь при холодном старте только 1 запрос к БД, а не сотня как мне доводилось видеть.А если не надо отмечать активные категории, например для superfish, можно смело кешировать результат работы метода getAllCategories и вообще забыть о нагрузке от категорий.
    1 point
  6. Вот, ещё несколько опций, работающих с ColorBox: transition: elastic (Эффект появления. Возможные значения "elastic", "fade" или "none") initialWidth: 300 (Устанавливает начальную ширину окна до загрузки изображения товара) initialHeight: 100 (Устанавливает начальную высоту окна до загрузки изображения товара) width: false (Устанавливает значение внешней ширины окна, включая бордюр и кнопки. К примеру: "100%", "800px", или 800) height: false (Устанавливает значение внешней высоты окна, включая бордюр и кнопки. К примеру: "100%", "800px", или 800) speed: 350 (Скорость появления/масштабирование в миллисекундах, при эффектах "elastic" или "fade") maxWidth: false (Максимальная ширина изображения товара. По умолчанию "false". К примеру: "70%", "1024px", или 1024) maxHeight: false (Максимальная высота изображения товара. По умолчанию "false". К примеру: "70%", "900px", или 900) scalePhotos: true (При значение ‘true’ и установленном параметре maxWidth, maxHeight, width или height, ColorBox произведет масштабирование фото под нужный размер) scrolling: true (При значение "false’ ColorBox скрывает изображение товара, выходящие за пределы окна) overlayClose: true (Позволяет закрыть окно ColorBox по клику за его пределами, иначе - только по нажатию кнопки "Закрыть", или крестика) slideshowAuto: true (Автоматически запускает слайд-шоу при открытии изображения товара) Установка: "параметр" : (двоеточие) значение, (К примеру: speed: 400,)
    1 point
  7. Можно! (даже нужно!) ;) Открываете файл catalog/controller/product/product.php и находите строки: $this->data['popup'] = $this->model_tool_image->resize($image, $this->config->get('config_image_popup_width'), $this->config->get('config_image_popup_height')); Меняете их на эти: $this->data['popup'] = 'image/' . $image; В этом же файле, чуть ниже строки: 'popup' => $this->model_tool_image->resize($result['image'] , $this->config->get('config_image_popup_width'), $this->config->get('config_image_popup_height')), Меняете на: 'popup' => 'image/' . $result['image'] , (долго искал, оказалось всё намного проще) Всё. Сохраняем. Закрываем. Смотрим! :rolleyes: P.S.Что бы увидеть разницу (если у Вас база с товаром OpenCart) откройте страницу с товаром iPhone и кликните на изображение... ПОСМОТРИТЕ РАЗНИЦУ!
    1 point
×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.