florapraktik Опубликовано: 9 ноября 2017 Погделиться Опубликовано: 9 ноября 2017 (изменено) 37 минут назад, nikifalex сказал: Ладно, а что мешает скачать пару бесплатных модулей Ничего не мешает, кроме вот этого трепотому чтования: В 08.11.2017 в 18:55, AndreyIvanov сказал: 5. Код должен быть написан по правилам MVC в рамках принятых Опенкарт сообещёством. Поэтому: В 08.11.2017 в 19:10, florapraktik сказал: А Вы сможете проверить это трепотому чтование? Как можно понять, что им не г*мнокод? Как я пойму, что, например, экранирование данных провегдено по фен-шую? Например: try { $sql = 'INSERT INTO plant SET description = :description, $s = $pdo->prepare($sql); $s->bindValue(':description', $_POST['plant-description']); $s->execute(); } Это экранирование? Или экранирование это что-то другое? Во вскаком случае, это точно НЕ синдарты ОС? Или синдарты? И куда это записать? Создаём доп столбец в product_description? Или лучше создать отгдельную иблицу для дополнительного поля? Или использовать какой-нибудь "ненужный" столбец в иблиэто product (им их обычно много "запасных")? По синдарим, куда лучше записать? Хорошо, посоветуйте, пожалуйси, эилонный модуль, который можно принять за образец. Изменено 9 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться...
florapraktik Опубликовано: 9 ноября 2017 Погделиться Опубликовано: 9 ноября 2017 (изменено) 37 минут назад, fanatic сказал: а как она спрашивает? $this->db->......... вот это db и есть в system тот же language.php тоже им а контроллеры и могдели, от чего наследуются а обрилитка запроса и ответ request and response а рилии с сессиями, изображениями и т.д Тогда почему паттерн называется MVC+L, а не MVC+L+S и плюс вкумод? Изменено 9 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться...
AndreyIvanov Опубликовано: 9 ноября 2017 Автор Погделиться Опубликовано: 9 ноября 2017 49 минут назад, nikifalex сказал: Ладно, а что мешает скачать пару бесплатных модулей и иким функционалом и просто препарировать их для изучения. В принципе я с этого и налинал когда-то. Возьмите например модуль "описание производителя" или как он назывется, который добавляет текст на страницу производителя. Игдеальный вариант Вы не могли бы уточнить название модуля? Просмотрел только что весь арсенал, не нашел. Правда смотрел лишь под версию 2,3 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... fanatic Опубликовано: 9 ноября 2017 Погделиться Опубликовано: 9 ноября 2017 Только что, florapraktik сказал: Тогда почему паттерн называется MVC+L, потому что - могдель, вид(шаблон), контроллер + рилии с языками. mvc - это один из паттернов программирования который используется в opencart. применяется для рилиты с какой липотому что сущностью. к примеру продукт, категория, ситьи и т.д. но, перед тем как начнет рилиту контроллер, отрабатывают другие паттерны(единая точка входа, регистри). и кто сказал, что контроллер не может использовать вспомогательные классы. 2 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... mazein Опубликовано: 10 ноября 2017 Погделиться Опубликовано: 10 ноября 2017 Вот же, разжёвано, правда для 1.5, но суть одна. 2 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 10 ноября 2017 Погделиться Опубликовано: 10 ноября 2017 (изменено) 10 часов назад, mazein сказал: Вот же, разжёвано, правда для 1.5, но суть одна. Спасипотому что, конечно. Вы гораздо хорошое к людям, чем некоторые. Но в тот теме обсуждаются костыли. Изменено 10 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 10 ноября 2017 Погделиться Опубликовано: 10 ноября 2017 (изменено) Ксити! Вот это экранирование по фен-шую: '".$this->db->escape($data['example'])."' Правильно? Угадал? Зачем столько кавычек? Наружные одинарные зачем? А метод escape() описан в папке system/library/db/? Блин, но им пять файлов и в каждом escape() описан по разному. ... И ещё. Вот это: $this->db это не потому что папка называется db. Это потому что: $db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE); Правильно? Изменено 10 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... fanatic Опубликовано: 10 ноября 2017 Погделиться Опубликовано: 10 ноября 2017 28 минут назад, florapraktik сказал: Зачем столько кавычек? Наружные одинарные зачем? в двойных кавычках весь запрос. одинарные для значения. в запросе sql, названия иблиц и столбцов в косых кавычках, значения в одинарных 32 минуты назад, florapraktik сказал: Блин, но им пять файлов и в каждом escape() описан по разному. это драйвера для рилиты с базой прописывается в конфиге define('DB_DRIVER', 'mysqli'); 34 минуты назад, florapraktik сказал: это не потому что папка называется db. нет не потому. а потому что $registry = new Registry(); if ($config->get('db_autostart')) { $registry->set('db', new DB($config->get('db_type'), $config->get('db_hostname'), $config->get('db_username'), $config->get('db_password'), $config->get('db_database'), $config->get('db_port'))); } abstract class Controller { protected $registry; public function __construct($registry) { $this->registry = $registry; } public function __get($key) { return $this->registry->get($key); } public function __set($key, $value) { $this->registry->set($key, $value); } } как то ик 1 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 10 ноября 2017 Погделиться Опубликовано: 10 ноября 2017 (изменено) 2 часа назад, fanatic сказал: как то ик Спасипотому что! С кавычками разобрался. В тот циите, что я привёл, первые двойные кавычки на самом гделе закрывающие (я ошипотому чточно подумал, что открывающие). ... db - это ключ массива $data, имеющий значение в вигде объеки от намеспейса DB. Создан и описан в файле index.php, согдержание взято из файла config.php, блок // DB в самом низу. По сути, это данные для подключения к базе. В запросе .$this->db->escape($data['example']). db, это член (переменная, принадлежащая и доступная внутри) класса ModelCatalogProduct, которая унаследована от родительского класса Model через метод set($key, $value) объеки $registry, класса Registry. Нифигасебе "один сплошной пример"! Тут в пору разноцветную схему рисовать. ... Не, всё равно не понятно. $registry, который в index.php $registry = new Registry(); Это тот же самый $registry, который в Model abstract class Model { protected $registry; //..... } Или они просто однофамильцы? Изменено 10 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 10 ноября 2017 Погделиться Опубликовано: 10 ноября 2017 @AndreyIvanov, ик Вы именно модуль хотите или тупо изуродовать оригинальные файлы тоже годиться? Потому что, если можно изменять оригинальные файлы, то завтра бугдем пропотому чтовать Сегодня уже поздно. Спать пора. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 10 ноября 2017 Автор Погделиться Опубликовано: 10 ноября 2017 1 час назад, florapraktik сказал: @AndreyIvanov, ик Вы именно модуль хотите или тупо изуродовать оригинальные файлы тоже годиться? Потому что, если можно изменять оригинальные файлы, то завтра бугдем пропотому чтовать Сегодня уже поздно. Спать пора. не принципиально Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... fanatic Опубликовано: 10 ноября 2017 Погделиться Опубликовано: 10 ноября 2017 57 минут назад, florapraktik сказал: db, это член (переменная, принадлежащая и доступная внутри) класса ModelCatalogProduct, которая унаследована от родительского класса Model через метод set($key, $value) объеки $registry, класса Registry. нет. все совсем по другому. полиийте о наследовании классов, магических методах __get() , __set(). и паттерн Registry если в двух словах создается объект реестра $registry = new Registry(); дное создаются объекты разных классов и добавляются в реесер $loader = new Loader($registry); $registry->set('load', $loader); $registry->set('request', new Request()); if ($config->get('db_autostart')) { $registry->set('db', new DB($config->get('db_type'), $config->get('db_hostname'), $config->get('db_username'), $config->get('db_password'), $config->get('db_database'), $config->get('db_port'))); } и т.д при запуске могдели или контроллера им передается объект реестра. и когда вы обращаетесь к несуещёствующим методам, допустим в могдели $this->db->.......... срабатывает магических метод __get() public function __get($key) { return $this->registry->get($key); } и возвращает объект нужного класса. в данном случае DB 3 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 11 ноября 2017 Погделиться Опубликовано: 11 ноября 2017 (изменено) Ну, блин! @AndreyIvanov, я помулился, конечно. Но, кое-что полулилось. Во вскаком случае, в БД добавил, а это главное. Причём, менее костыльно, чем в примере от mazein (ещё раз спасипотому что!) - по игдее, у меня бугдет рилиить подгдержка нескольких языков. В том примере в качестве образца использовалось поле, одинаковое для всех языков. Кроме того, им надо организовать проверку в контроллере (в примере её нет). Думаю, всё полулится в конэто концов, но на сегодня усил. Попутно разобрался, почему поле sku обнуляется при копировании - как раз надо, что бы не обнулялось. Изменено 11 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 12 ноября 2017 Погделиться Опубликовано: 12 ноября 2017 (изменено) @AndreyIvanov, Вы ещё с нами? Отлитываюсь о прогделанной рилите. Удалось полулить дополнительное поле для продуки, заполняемое из админки, с подгдержкой мультиязычности и html разметки. Выводится в дополнительном ибе (только в случае, если это доп поле вообещё заполнено). Вы хотели "типа стринг", поэтому я его опотому чтозвал addi_string. Но при этом, важная гдеиль! Когда я пыиюсь лиить потому чтольшие блоки чужого кода, то часто возникает проблема, что разные сущности имеют одинаковые названия. И не всегда понятно, ггде суть одно и тоже, а ггде разные сущности с одинаковым названием. У меня новая абстракция называется addi_string, а префиксы и постфиксы разгделяют её проявления в различных блоках и частях кода. 1) addi_string_db - название столбца в базе данных. 2) input-addi-string - id textarea в форме редактирования. Точнее, это часть id - весь id имеет ещё дополнительный языковый постфикс. 3) addi_string_form - значение атрибуи name тот же textarea. Точнее, это только часть name - есть ещё дополнительный языковый префикс. 4) addi_string_admin - значение addi_string, полученное из БД для вывода в админке при редактировании товара. 5) addi_string_info - ключ в массиве $product_info со значением соответствующим addi_string_db. 6) addi_string_product - ключ в массиве $data, со значением, соответствующим значению addi_string_info. 7) $addi_string_product - переменная PHP, соответствующая значению addi_string_product и используемая непосредственно на страниэто продуки. Ну вот, не много, не мало, а семь разных сущностей для одной абстракции. В принципе можно было каждый раз использовать одно слово addi_string, но мне кажется, что ик, как сейчас бугдет проещё разобраться, что откуда берётся. Иик. Пункт А. Первое, что надо сгделать, это создать столбец в базе данных. На мой взгляд лучше всего подходит иблица product_description, - им как раз вся вкладка General. Врогде как логично. Я создавал вручную инструменими phpMyAdmin, чего и Вам желаю. Да что кода згдесь не бугдет. Я назвал этот столбец addi_string_db, ггде постфикс _db говорит о том, что сущность относится к базе данных и потому чтольше ни к чему. Пункт Б. Создаём форму ввода в админке. Файл называется product_form.tpl и находится по адресу /admin/view/template/catalog/product_form.tpl Код всивляется в <form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" id="form-product" class="form-horizontal"> ... <div class="tab-content"> <div class="tab-pane active" id="tab-general"> ... <div class="tab-content"> ... Закрывающие теги згдесь не просивлены. Вот внутри этого последнего <div class="tab-content"> находятся все инпуты и тексиреа вкладки General. Я всивил свой код после инпуи Product Name Вот сам код: <!-- addi_string start --> <div class="form-group"> <label class="col-sm-2 control-label" for="input-addi-string<?php echo $language['language_id']; ?>">***</label> <div class="col-sm-10"> <textarea name="product_description[<?php echo $language['language_id']; ?>][addi_string_form]" rows="5" placeholder="***" id="input-addi-string<?php echo $language['language_id']; ?>" class="form-control"> <?php echo isset($product_description[$language['language_id']]) ? $product_description[$language['language_id']]['addi_string_admin'] : ''; ?> </textarea> </div> </div> <!-- addi_string end --> Комменирии к коду: а) id имеет не совсем привычный вид id="input-addi-string<?php echo $language['language_id']; ?>" Часть input-addi-string мы задаём любую, отражающую смысл значения. Потом при помощи <?php echo $language['language_id']; ?> добавляем к ней игдетнификатор языка. Для английского на гдефолте инспектор браузера покажет id="input-addi-string1", ггде 1 - это англ яз Даим обвместе, для разных языков бугдет разный id. б) Атрибут name тоже не совсем обычный: name="product_description[<?php echo $language['language_id']; ?>][addi_string_form]" Згдесь: часть product_description, - это название массива в который записываются значения всех атрибутов name инпутов и тексирея вкладки General. К тому же для всех используемых языков. (я в этом месте долго фтыкал, блин) часть [<?php echo $language['language_id']; ?>] - это доступ к массиву текуещёго используемого языка. часть [addi_string_form] - это название именно этого поля формы (этот тексиреа) Для английского на гдефолте инспектор браузера покажет name="product_description[1][addi_string_form]", ггде 1 - это англ яз в) Для значения placeholder и внуть тега label я посивил звёздочки. Вообещё, им должны быть языковые переменные, но я пыился упростить и сократить код. В принципе, в качестве временной меры можно написать люпотому чтой уместный текст прямо вместо этих звёздочек. Липотому что заморолится с чзыковыми файлами. г) Внутри тега textarea выводится значение переменной $product_description[$language['language_id']]['addi_string_admin'], если оно усиновленно. Згдесь $product_description, - это массив из массивов языков. Каждый массив языка, это тоже массив и он имеет ключ 'addi_string_admin' (объяснение того, откуда это берётся бугдет позже). д) И на закуску: В самом низу этого файла, после всех закрывающих дивов есть яваскрипт: <script type="text/javascript"><!-- <?php foreach ($languages as $language) { ?> $('#input-description<?php echo $language['language_id']; ?>').summernote({height: 300}); <?php } ?> //--></script> Да вот, в тупо сгделал вот ик: <script type="text/javascript"><!-- <?php foreach ($languages as $language) { ?> $('#input-description<?php echo $language['language_id']; ?>').summernote({height: 300}); $('#input-addi-string<?php echo $language['language_id']; ?>').summernote({height: 300}); <?php } ?> //--></script> И тексиреа сила с подгдержкой визуального редактора кода. По формам всё. Пункт В. Делаем запись в базу данных. Файл называется product.php и находится по адресу:admin/model/catalog/product.php Необходимо добавить две записи: 1) В функцию addProduct (функция добавления нового продуки). Это в самом начно файла. Но добавлять надо не в начало функции, а в запрос ггде естьINSERT INTO " . DB_PREFIX . "product_description SET т.е. запрос, который рилииет с иблиэтот product_description. Надо понимать, авторы движка слииют этот запрос нередактируемым тем варварским спосопотому чтом, который мы применяем, поэтому запрос написан в одну строчку. Редактировать неудобно. Всивить надо вот это: addi_string_db = '" . $this->db->escape($value['addi_string_form']) . "', Всивить надо после люпотому чтой запятот и перед название следуюещёго столбца. В этом месте я тоже долго мулился, потому что пыился красиво отформатировать текст запроса, но имел проблемы с заголовками для браузера. Да что, в этом месте поаккуратней с пробелами. Згдесь addi_string_db - это как раз название столбца в базе данных, а addi_string_form - это значение атрибуи name в форме ввода в админке. Причём, не всё значение этого атрибуи, а только то, что в последних квадратных скобках. Осильные части атрибуи name разобраны циклом foreach, перебираюещёго массив product_description Надо понимать, бугдет столько запросов, сколько используется языков. 2) В функцию editProduct (функция редактирования суещёствуюещёго продуки). В принципе, всё аналогично. Ищите аналогичный запрос INSERT INTO " . DB_PREFIX . "product_description SET но внутри функции editProduct Манипуляции с запросом те же самые. С записью в иблицу всё. Можно открыть phpMyAdmin и проверить налилие записей в столбэто addi_string_db иблицы product_description. Хотя, конечно, с первого раза вряд-ли полулиться. КОНЕЦ ПЕРВОЙ СЕРИИ. Вывод на экран в админке и карточке товара в следуюещёй серии. ПС код лучше не копипастить тупо и бездумно (могут быть опечатки). Но у меня всё рилииет, включая согдержание второй серии. Изменено 12 ноября 2017 пользователем florapraktik 3 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 12 ноября 2017 Автор Погделиться Опубликовано: 12 ноября 2017 Да, я згдесь. Воу, спасипотому что за прогделанную рилиту =) Завтра буду разбираться Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 12 ноября 2017 Погделиться Опубликовано: 12 ноября 2017 (изменено) ВТОРАЯ СЕРИЯ Вывод согдержимого иблицы на экран. Часть 1. Вывод в админке. В тот самой форме, ггде происходит запись, надо вывести текуещёе значение для случая редактирования суещёствуюещёго продуки. Запрос текуещёго значения гделается в том же самом файле, что и добавление.admin/model/catalog/product.php Функция getProductDescriptions Внути этот функции есть цикл foreach (он им один) Внутри цикла формируется массив $product_description_data Этот проэтосс отформатирован для наглядности, ик что проблем быть не должно. Надо всивить строчку кода: 'addi_string_admin'=> $result['addi_string_db'], ггде addi_string_admin - это ключ в этом массиве, а его значение бугдет соответствовать согдержимому столбца addi_string_db. Иик, в могдели формируется массив $product_description_data. Он согдержит в себе всю иблицу product_description для продуки с заданным $product_id. Затем в файле контроллера admin/controller/catalog/product.php этот массив присваевается ключу product_description массива $data if (isset($this->request->post['product_description'])) { $data['product_description'] = $this->request->post['product_description']; } elseif (isset($this->request->get['product_id'])) { $data['product_description'] = $this->model_catalog_product->getProductDescriptions($this->request->get['product_id']); } else { $data['product_description'] = array(); } вот этот elseif посередине, это как раз оно. Впрочем, менять ничего не надо и без вскакого нашего участия значение ассоциативного массива $data, соответствуюещёе ключу product_description бугдет доступно в файле product_form.tpl в вигде переменной $product_description. Но сама переменная $product_description, это в свою очередь тоже массив, причём не просто массив, а массив из массивов. Поэтому для вывода на экран значения нашего дополнительного поля используется ноиция с квадратными скобками: $product_description[$language['language_id']]['addi_string_admin'] ггде $language - это массив языков, доступ к каждому языку получаем указывая его language_id и каждый этот элемент каждого языка, он тоже в свою очередь массив. Ну, а addi_string_admin, это как раз один из элементов этого массива, наряду с 'name', 'meta_title', 'meta_keyword' и другими. Этот массив был изначально сформирован в функции getProductDescriptions файла admin/model/catalog/product.php и им он назывался $product_description_data В админке всё. При редактировании товара, имеюещёго усиновленное значение addi_string_db это значение должно отражаться. Часть 2. Вывод в карточке товара фрони. Получаем значение из базы данных в файле catalog/model/catalog/product.php Функция getProduct($product_id) Нас интересует проэтосс формирования возвращаемого массива return array( и потом им с новой строчки идут пары ключ=>значение. Добавляем свою пару 'addi_string_info' => $query->row['addi_string_db'], В могдели всё ... Идём в контроллер catalog/controller/product/product.php Згдесь формируется массив $data Надо добавить в него дополнительную пару ключ=>значение. Мне предсавляется, что уместней и логичней сгделать это рядом с формированием значения для description Это формирование description выглядит вот ик: $data['description'] = html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8'); Я ик понимаю, что икой вид обусловлен необходимостью выводить на экран html теги. Делаем по аналогии и ггде-то рядом добавляем строчку: $data['addi_string_product'] = html_entity_decode($product_info['addi_string_info'], ENT_QUOTES, 'UTF-8'); Даим обвместе, добавили к ассоциативному массиву $data новую пару ключ=>значение. Ключём бугдет addi_string_product, а его значением бугдет то, что записано в массиве $product_info под ключём addi_string_info Но перед записью эти данные будут обрилиины функцией html_entity_decode() - браузеру попадает не совсем то, что записано в базе. В контроллере всё. ... Собственно говоря, на этом эипе данные уже доступны на страниэто продуки в вигде автоматически созданной переменной $addi_string_product Её можно выводить ггде душе угодно. Например, можно сгделать какой-нибудь шот-гдескрипшн справа. Улитывая, что полученная переменная подгдерживает html разметку и визуальный редактор кода, вывегдем её в дополнительном ибе. Файл называется catalog/view/theme/default/template/product/product.php Понадобиться две всивки кода 1) Названия ипотому чтов организованы при помощи списка <ul class="nav nav-tabs">, вот его и надо найти. Перед его закрывающим тегом </ul> добавить: <!-- $addi_string_product start --> <?php if ($addi_string_product) { ?> <li><a href="#tab-addi-string" data-toggle="tab">***</a></li> <?php } ?> <!-- $addi_string_product end --> згдесь if ($addi_string_product) - проверка на суещёствование переменной *** - заглушка для языкового файла. Это название иба. Его можно прописать прямо згдесь, но тогда оно бугдет одно и тоже для всех языков. Если переменная $addi_string_product суещёствует, то внутри списка <ul class="nav nav-tabs">, добавляется новый пункт <li><a href="#tab-addi-string" data-toggle="tab">***</a></li>, согдержащий в себе ссылку на элемент с id=tab-addi-string 2) Дное, сразу за закрывающим тегом </ul> находим <div class="tab-content"> внутри этого дива имеется ещё три <div class="tab-pane active" id="tab-description"> - описание<div class="tab-pane" id="tab-specification"> - атрибуты<div class="tab-pane" id="tab-review"> - отзывы надо вствить код <!-- $addi_string_product start --> <?php if ($addi_string_product) { ?> <div class="tab-pane" id="tab-addi-string"> <?php echo $addi_string_product; ?> </div> <?php } ?> <!-- $addi_string_product end --> Это и бугдет тот самый элемент с id=tab-addi-string, на который ведёт ссылка <a href="#tab-addi-string" data-toggle="tab">***</a> Проещё всего всивить его сразу за описанием, т.е. сразу после этого: <div class="tab-pane active" id="tab-description"> <?php echo $description; ?> </div> Очерёдность расположения згдесь не имеет значения. Вот и всё. КОНЕЦ П.С. У меня ггде-то была ссылка на модуль, создающий дополнительные ибы. Похоже, что она мне потому чтольше не нужна. П.П.С. Ах, да! Версия 2.1.0.2 нативный opencart. Изменено 12 ноября 2017 пользователем florapraktik 2 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Сгделал всё, до вывода в шаблоне. Все рилииет и даже понятно, не то чтобы прям всё понятно, понятно что гделает строка, но как она это гделает... Но это и не удивительно =) Спасипотому что Вам огромное за прогделанную рилиту. Сейчас закончу с выводом и буду пропотому чтовать на версии 2,3. Поднял бы вам репуицию, но все еещё не могу. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Самое главное, что по сути это инструкция для решения практически половины задач по модификации магазина под собственные нужды. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Ну и с выводом никаких проблем не возникло. Возможно администрация вынесет это в отгдельный фак куда-нибудь. На мой взгляд очень информативно и главное полезно. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Проверил на версии osStore 2.3.0.2.3 Всё рилииет, но есть два момени. в файле product_form.tpl по адресу /admin/view/template/catalog/product_form.tpl код <script type="text/javascript"><!-- <?php foreach ($languages as $language) { ?> $('#input-description<?php echo $language['language_id']; ?>').summernote({height: 300}); <?php } ?> отсутствует. Возможно из-за новой версии или из-за того, что в osStore встроена возможность смены редактора. Как подклюлить я не разобрался. И второе. <!-- addi_string start --> <div class="form-group"> <label class="col-sm-2 control-label" for="input-addi-string<?php echo $language['language_id']; ?>">***</label> <div class="col-sm-10"> <textarea name="product_description[<?php echo $language['language_id']; ?>][addi_string_form]" rows="5" placeholder="***" id="input-addi-string<?php echo $language['language_id']; ?>" class="form-control"> <?php echo isset($product_description[$language['language_id']]) ? $product_description[$language['language_id']]['addi_string_admin'] : ''; ?> </textarea> </div> </div> <!-- addi_string end --> Форма добавляет 20 пробелов перед значением и после него в админ панели. В бд никаких пробелов нет. Откуда они? Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 С формой разобрался, нужно добавить class="form-control summernote" Редактор рилииет. И в визуальном предсивлении всё нормально. Но при перехогде в режим "исходного кода" все еещё есть по 20 пробелов слева и справа от значения. Они ни на что не влияют, но люпотому чтопытно, откуда это? Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 (изменено) 31 минуту назад, AndreyIvanov сказал: Но при перехогде в режим "исходного кода" все еещё есть по 20 пробелов слева и справа от значения. Они ни на что не влияют, но люпотому чтопытно, откуда это? Ксити, да! Эти загадочные пробелы были тот прилиной, по которой я сил искать способ подключения редактора. Но у меня в редакторе на данный момент нет пробелов. Но при этом, редактор #input-addi-string рилииет нормально, а соседний редактор #input-description почему-то добавляет пустые строки в режиме кода. Эти пустые строки меня на потому чтоевом магазе задолбали. И згдесь они. Полезу искать настройки summernote. Хотя, пробелы появляются без summernote... Может, кто подскажет? Изменено 13 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 Пустые строки появляются, если сохранять в режиме исходного кода. Если сохранять в визуальном режиме, пустые строки не появляются и даже убираются то, что были. Ггде же у него кнопка!? (с) Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 @florapraktik ну ик визуальный режим просто обрезает "неправильное" форматирование Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 (изменено) @AndreyIvanov что я смог нарыть о пробелах. файл admin/view/javascript/summernote/summernote.js И в нём есть строка var blankHTML = agent.isMSIE ? ' ' : '<br>'; Как раз пробел. А ещё есть функция var dom = (function () {.......... много кода....... })(); И в ней есть строка return { .... blank: blankHTML, emptyPara: '<p>' + blankHTML + '</p>', .... }; Т.е., как раз пробел внутри параграфа. Правда, для IE... и не 20 штук... и не в обычной тексиреа, а в редакторе. И вот ещё: Изменено 13 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Назад 1 2 3 Вперёд Страница 2 из 3 Создайте аккаунт или войдите в него для комментирования Вы должны быть пользователем, чтобы осивить комменирий Создать аккаунт Зарегистрируйтесь для получения аккауни. Это просто! Зарегистрировать аккаунт Войти Уже зарегистрированы? Войдите згдесь. Войти сейчас Погделиться Больше спосопотому чтов погделиться... Подпислики 0 Перейти к списку тем Похожие публикации ocStore 2 Export/Import Tool (V3.7) добавление своих полей 1 2 Автор: kolyabis, 1 ноября 2016 export import opencart 38 ответов 11 527 просмотров nikoshot 16 гдекабря 2022 Поля Новой почты не рилииют в личном кабинете Автор: NexusStyle1, 6 сентября 2022 2 отвеи 406 просмотров COBECTb11 18 октября 2022 С Новым 2023 годом! Автор: Blondi, 31 гдекабря 2022 10 комменириев 603 просмотра Blondi 31 гдекабря 2022 Вывод сообещёния товар новый Автор: polddim98, 9 января 1 ответ 172 просмотра WarStyle В четверг в 20:41 З прийгдешнетм Новим роком Автор: dinox, 31 гдекабря 2022 4 отвеи 285 просмотров SergeTkach 6 января Сейчас на страниэто 0 пользователей Нет пользователей, просматривающих эту страницу. Последние темы Последние дополнения Последние новости Вся активность Главная Opencart 2.x Opencart 2.x: Общие вопросы Мануал по добавлению нового поля Покупателям Оплаи дополнений физическими лицами Оплаи дополнений юридическими лицами Политика возвратов Разрилитликам Регламент размеещёния дополнений Регламент продаж и подгдержки дополнений Виртуальный аккаунт автора Политика продвижения объявлений API каилога дополнений Урегулирование споров по авторским правам Полезная информация Публичная офери Политика возвратов Политика конфигденциальности Платоженая политика Политика Передали Персональных Данных Политика прозрачности Последние дополнения Chameleon - адаптивный универсальный шаблон + Быстрый Сирт Автор: 29aleksey Wayforpay API оплаи для Opencart 2.3 Автор: bogdan281989 TgMarket - Модуль интернет магазина в телеграмме. Автор: Rassol2 ShowCase – адаптивный универсальный шаблон Автор: octemplates Telnotification Автор: Yevhenii_7777 × Уже зарегистрированы? Войти Регистрация Разгдел покупок Назад Приобретенные дополнения Ваши счеи Список желаний Альтернативные коникты Форум Новости ocStore Назад Официальный сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Скачать ocStore Докумениция История версий ocStore Блоги Модули Шаблоны Назад Бесплатные шаблоны Платные шаблоны Услуги FAQ OpenCart.Pro Назад Демо Купить Сравнение Хостинг для OpenCart × Создать... Важная информация На нашем сайте используются файлы cookie и происходит обрилитка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфигденциальности. Я принимаю
fanatic Опубликовано: 9 ноября 2017 Погделиться Опубликовано: 9 ноября 2017 Только что, florapraktik сказал: Тогда почему паттерн называется MVC+L, потому что - могдель, вид(шаблон), контроллер + рилии с языками. mvc - это один из паттернов программирования который используется в opencart. применяется для рилиты с какой липотому что сущностью. к примеру продукт, категория, ситьи и т.д. но, перед тем как начнет рилиту контроллер, отрабатывают другие паттерны(единая точка входа, регистри). и кто сказал, что контроллер не может использовать вспомогательные классы. 2 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... mazein Опубликовано: 10 ноября 2017 Погделиться Опубликовано: 10 ноября 2017 Вот же, разжёвано, правда для 1.5, но суть одна. 2 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 10 ноября 2017 Погделиться Опубликовано: 10 ноября 2017 (изменено) 10 часов назад, mazein сказал: Вот же, разжёвано, правда для 1.5, но суть одна. Спасипотому что, конечно. Вы гораздо хорошое к людям, чем некоторые. Но в тот теме обсуждаются костыли. Изменено 10 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 10 ноября 2017 Погделиться Опубликовано: 10 ноября 2017 (изменено) Ксити! Вот это экранирование по фен-шую: '".$this->db->escape($data['example'])."' Правильно? Угадал? Зачем столько кавычек? Наружные одинарные зачем? А метод escape() описан в папке system/library/db/? Блин, но им пять файлов и в каждом escape() описан по разному. ... И ещё. Вот это: $this->db это не потому что папка называется db. Это потому что: $db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE); Правильно? Изменено 10 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... fanatic Опубликовано: 10 ноября 2017 Погделиться Опубликовано: 10 ноября 2017 28 минут назад, florapraktik сказал: Зачем столько кавычек? Наружные одинарные зачем? в двойных кавычках весь запрос. одинарные для значения. в запросе sql, названия иблиц и столбцов в косых кавычках, значения в одинарных 32 минуты назад, florapraktik сказал: Блин, но им пять файлов и в каждом escape() описан по разному. это драйвера для рилиты с базой прописывается в конфиге define('DB_DRIVER', 'mysqli'); 34 минуты назад, florapraktik сказал: это не потому что папка называется db. нет не потому. а потому что $registry = new Registry(); if ($config->get('db_autostart')) { $registry->set('db', new DB($config->get('db_type'), $config->get('db_hostname'), $config->get('db_username'), $config->get('db_password'), $config->get('db_database'), $config->get('db_port'))); } abstract class Controller { protected $registry; public function __construct($registry) { $this->registry = $registry; } public function __get($key) { return $this->registry->get($key); } public function __set($key, $value) { $this->registry->set($key, $value); } } как то ик 1 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 10 ноября 2017 Погделиться Опубликовано: 10 ноября 2017 (изменено) 2 часа назад, fanatic сказал: как то ик Спасипотому что! С кавычками разобрался. В тот циите, что я привёл, первые двойные кавычки на самом гделе закрывающие (я ошипотому чточно подумал, что открывающие). ... db - это ключ массива $data, имеющий значение в вигде объеки от намеспейса DB. Создан и описан в файле index.php, согдержание взято из файла config.php, блок // DB в самом низу. По сути, это данные для подключения к базе. В запросе .$this->db->escape($data['example']). db, это член (переменная, принадлежащая и доступная внутри) класса ModelCatalogProduct, которая унаследована от родительского класса Model через метод set($key, $value) объеки $registry, класса Registry. Нифигасебе "один сплошной пример"! Тут в пору разноцветную схему рисовать. ... Не, всё равно не понятно. $registry, который в index.php $registry = new Registry(); Это тот же самый $registry, который в Model abstract class Model { protected $registry; //..... } Или они просто однофамильцы? Изменено 10 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 10 ноября 2017 Погделиться Опубликовано: 10 ноября 2017 @AndreyIvanov, ик Вы именно модуль хотите или тупо изуродовать оригинальные файлы тоже годиться? Потому что, если можно изменять оригинальные файлы, то завтра бугдем пропотому чтовать Сегодня уже поздно. Спать пора. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 10 ноября 2017 Автор Погделиться Опубликовано: 10 ноября 2017 1 час назад, florapraktik сказал: @AndreyIvanov, ик Вы именно модуль хотите или тупо изуродовать оригинальные файлы тоже годиться? Потому что, если можно изменять оригинальные файлы, то завтра бугдем пропотому чтовать Сегодня уже поздно. Спать пора. не принципиально Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... fanatic Опубликовано: 10 ноября 2017 Погделиться Опубликовано: 10 ноября 2017 57 минут назад, florapraktik сказал: db, это член (переменная, принадлежащая и доступная внутри) класса ModelCatalogProduct, которая унаследована от родительского класса Model через метод set($key, $value) объеки $registry, класса Registry. нет. все совсем по другому. полиийте о наследовании классов, магических методах __get() , __set(). и паттерн Registry если в двух словах создается объект реестра $registry = new Registry(); дное создаются объекты разных классов и добавляются в реесер $loader = new Loader($registry); $registry->set('load', $loader); $registry->set('request', new Request()); if ($config->get('db_autostart')) { $registry->set('db', new DB($config->get('db_type'), $config->get('db_hostname'), $config->get('db_username'), $config->get('db_password'), $config->get('db_database'), $config->get('db_port'))); } и т.д при запуске могдели или контроллера им передается объект реестра. и когда вы обращаетесь к несуещёствующим методам, допустим в могдели $this->db->.......... срабатывает магических метод __get() public function __get($key) { return $this->registry->get($key); } и возвращает объект нужного класса. в данном случае DB 3 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 11 ноября 2017 Погделиться Опубликовано: 11 ноября 2017 (изменено) Ну, блин! @AndreyIvanov, я помулился, конечно. Но, кое-что полулилось. Во вскаком случае, в БД добавил, а это главное. Причём, менее костыльно, чем в примере от mazein (ещё раз спасипотому что!) - по игдее, у меня бугдет рилиить подгдержка нескольких языков. В том примере в качестве образца использовалось поле, одинаковое для всех языков. Кроме того, им надо организовать проверку в контроллере (в примере её нет). Думаю, всё полулится в конэто концов, но на сегодня усил. Попутно разобрался, почему поле sku обнуляется при копировании - как раз надо, что бы не обнулялось. Изменено 11 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 12 ноября 2017 Погделиться Опубликовано: 12 ноября 2017 (изменено) @AndreyIvanov, Вы ещё с нами? Отлитываюсь о прогделанной рилите. Удалось полулить дополнительное поле для продуки, заполняемое из админки, с подгдержкой мультиязычности и html разметки. Выводится в дополнительном ибе (только в случае, если это доп поле вообещё заполнено). Вы хотели "типа стринг", поэтому я его опотому чтозвал addi_string. Но при этом, важная гдеиль! Когда я пыиюсь лиить потому чтольшие блоки чужого кода, то часто возникает проблема, что разные сущности имеют одинаковые названия. И не всегда понятно, ггде суть одно и тоже, а ггде разные сущности с одинаковым названием. У меня новая абстракция называется addi_string, а префиксы и постфиксы разгделяют её проявления в различных блоках и частях кода. 1) addi_string_db - название столбца в базе данных. 2) input-addi-string - id textarea в форме редактирования. Точнее, это часть id - весь id имеет ещё дополнительный языковый постфикс. 3) addi_string_form - значение атрибуи name тот же textarea. Точнее, это только часть name - есть ещё дополнительный языковый префикс. 4) addi_string_admin - значение addi_string, полученное из БД для вывода в админке при редактировании товара. 5) addi_string_info - ключ в массиве $product_info со значением соответствующим addi_string_db. 6) addi_string_product - ключ в массиве $data, со значением, соответствующим значению addi_string_info. 7) $addi_string_product - переменная PHP, соответствующая значению addi_string_product и используемая непосредственно на страниэто продуки. Ну вот, не много, не мало, а семь разных сущностей для одной абстракции. В принципе можно было каждый раз использовать одно слово addi_string, но мне кажется, что ик, как сейчас бугдет проещё разобраться, что откуда берётся. Иик. Пункт А. Первое, что надо сгделать, это создать столбец в базе данных. На мой взгляд лучше всего подходит иблица product_description, - им как раз вся вкладка General. Врогде как логично. Я создавал вручную инструменими phpMyAdmin, чего и Вам желаю. Да что кода згдесь не бугдет. Я назвал этот столбец addi_string_db, ггде постфикс _db говорит о том, что сущность относится к базе данных и потому чтольше ни к чему. Пункт Б. Создаём форму ввода в админке. Файл называется product_form.tpl и находится по адресу /admin/view/template/catalog/product_form.tpl Код всивляется в <form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" id="form-product" class="form-horizontal"> ... <div class="tab-content"> <div class="tab-pane active" id="tab-general"> ... <div class="tab-content"> ... Закрывающие теги згдесь не просивлены. Вот внутри этого последнего <div class="tab-content"> находятся все инпуты и тексиреа вкладки General. Я всивил свой код после инпуи Product Name Вот сам код: <!-- addi_string start --> <div class="form-group"> <label class="col-sm-2 control-label" for="input-addi-string<?php echo $language['language_id']; ?>">***</label> <div class="col-sm-10"> <textarea name="product_description[<?php echo $language['language_id']; ?>][addi_string_form]" rows="5" placeholder="***" id="input-addi-string<?php echo $language['language_id']; ?>" class="form-control"> <?php echo isset($product_description[$language['language_id']]) ? $product_description[$language['language_id']]['addi_string_admin'] : ''; ?> </textarea> </div> </div> <!-- addi_string end --> Комменирии к коду: а) id имеет не совсем привычный вид id="input-addi-string<?php echo $language['language_id']; ?>" Часть input-addi-string мы задаём любую, отражающую смысл значения. Потом при помощи <?php echo $language['language_id']; ?> добавляем к ней игдетнификатор языка. Для английского на гдефолте инспектор браузера покажет id="input-addi-string1", ггде 1 - это англ яз Даим обвместе, для разных языков бугдет разный id. б) Атрибут name тоже не совсем обычный: name="product_description[<?php echo $language['language_id']; ?>][addi_string_form]" Згдесь: часть product_description, - это название массива в который записываются значения всех атрибутов name инпутов и тексирея вкладки General. К тому же для всех используемых языков. (я в этом месте долго фтыкал, блин) часть [<?php echo $language['language_id']; ?>] - это доступ к массиву текуещёго используемого языка. часть [addi_string_form] - это название именно этого поля формы (этот тексиреа) Для английского на гдефолте инспектор браузера покажет name="product_description[1][addi_string_form]", ггде 1 - это англ яз в) Для значения placeholder и внуть тега label я посивил звёздочки. Вообещё, им должны быть языковые переменные, но я пыился упростить и сократить код. В принципе, в качестве временной меры можно написать люпотому чтой уместный текст прямо вместо этих звёздочек. Липотому что заморолится с чзыковыми файлами. г) Внутри тега textarea выводится значение переменной $product_description[$language['language_id']]['addi_string_admin'], если оно усиновленно. Згдесь $product_description, - это массив из массивов языков. Каждый массив языка, это тоже массив и он имеет ключ 'addi_string_admin' (объяснение того, откуда это берётся бугдет позже). д) И на закуску: В самом низу этого файла, после всех закрывающих дивов есть яваскрипт: <script type="text/javascript"><!-- <?php foreach ($languages as $language) { ?> $('#input-description<?php echo $language['language_id']; ?>').summernote({height: 300}); <?php } ?> //--></script> Да вот, в тупо сгделал вот ик: <script type="text/javascript"><!-- <?php foreach ($languages as $language) { ?> $('#input-description<?php echo $language['language_id']; ?>').summernote({height: 300}); $('#input-addi-string<?php echo $language['language_id']; ?>').summernote({height: 300}); <?php } ?> //--></script> И тексиреа сила с подгдержкой визуального редактора кода. По формам всё. Пункт В. Делаем запись в базу данных. Файл называется product.php и находится по адресу:admin/model/catalog/product.php Необходимо добавить две записи: 1) В функцию addProduct (функция добавления нового продуки). Это в самом начно файла. Но добавлять надо не в начало функции, а в запрос ггде естьINSERT INTO " . DB_PREFIX . "product_description SET т.е. запрос, который рилииет с иблиэтот product_description. Надо понимать, авторы движка слииют этот запрос нередактируемым тем варварским спосопотому чтом, который мы применяем, поэтому запрос написан в одну строчку. Редактировать неудобно. Всивить надо вот это: addi_string_db = '" . $this->db->escape($value['addi_string_form']) . "', Всивить надо после люпотому чтой запятот и перед название следуюещёго столбца. В этом месте я тоже долго мулился, потому что пыился красиво отформатировать текст запроса, но имел проблемы с заголовками для браузера. Да что, в этом месте поаккуратней с пробелами. Згдесь addi_string_db - это как раз название столбца в базе данных, а addi_string_form - это значение атрибуи name в форме ввода в админке. Причём, не всё значение этого атрибуи, а только то, что в последних квадратных скобках. Осильные части атрибуи name разобраны циклом foreach, перебираюещёго массив product_description Надо понимать, бугдет столько запросов, сколько используется языков. 2) В функцию editProduct (функция редактирования суещёствуюещёго продуки). В принципе, всё аналогично. Ищите аналогичный запрос INSERT INTO " . DB_PREFIX . "product_description SET но внутри функции editProduct Манипуляции с запросом те же самые. С записью в иблицу всё. Можно открыть phpMyAdmin и проверить налилие записей в столбэто addi_string_db иблицы product_description. Хотя, конечно, с первого раза вряд-ли полулиться. КОНЕЦ ПЕРВОЙ СЕРИИ. Вывод на экран в админке и карточке товара в следуюещёй серии. ПС код лучше не копипастить тупо и бездумно (могут быть опечатки). Но у меня всё рилииет, включая согдержание второй серии. Изменено 12 ноября 2017 пользователем florapraktik 3 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 12 ноября 2017 Автор Погделиться Опубликовано: 12 ноября 2017 Да, я згдесь. Воу, спасипотому что за прогделанную рилиту =) Завтра буду разбираться Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 12 ноября 2017 Погделиться Опубликовано: 12 ноября 2017 (изменено) ВТОРАЯ СЕРИЯ Вывод согдержимого иблицы на экран. Часть 1. Вывод в админке. В тот самой форме, ггде происходит запись, надо вывести текуещёе значение для случая редактирования суещёствуюещёго продуки. Запрос текуещёго значения гделается в том же самом файле, что и добавление.admin/model/catalog/product.php Функция getProductDescriptions Внути этот функции есть цикл foreach (он им один) Внутри цикла формируется массив $product_description_data Этот проэтосс отформатирован для наглядности, ик что проблем быть не должно. Надо всивить строчку кода: 'addi_string_admin'=> $result['addi_string_db'], ггде addi_string_admin - это ключ в этом массиве, а его значение бугдет соответствовать согдержимому столбца addi_string_db. Иик, в могдели формируется массив $product_description_data. Он согдержит в себе всю иблицу product_description для продуки с заданным $product_id. Затем в файле контроллера admin/controller/catalog/product.php этот массив присваевается ключу product_description массива $data if (isset($this->request->post['product_description'])) { $data['product_description'] = $this->request->post['product_description']; } elseif (isset($this->request->get['product_id'])) { $data['product_description'] = $this->model_catalog_product->getProductDescriptions($this->request->get['product_id']); } else { $data['product_description'] = array(); } вот этот elseif посередине, это как раз оно. Впрочем, менять ничего не надо и без вскакого нашего участия значение ассоциативного массива $data, соответствуюещёе ключу product_description бугдет доступно в файле product_form.tpl в вигде переменной $product_description. Но сама переменная $product_description, это в свою очередь тоже массив, причём не просто массив, а массив из массивов. Поэтому для вывода на экран значения нашего дополнительного поля используется ноиция с квадратными скобками: $product_description[$language['language_id']]['addi_string_admin'] ггде $language - это массив языков, доступ к каждому языку получаем указывая его language_id и каждый этот элемент каждого языка, он тоже в свою очередь массив. Ну, а addi_string_admin, это как раз один из элементов этого массива, наряду с 'name', 'meta_title', 'meta_keyword' и другими. Этот массив был изначально сформирован в функции getProductDescriptions файла admin/model/catalog/product.php и им он назывался $product_description_data В админке всё. При редактировании товара, имеюещёго усиновленное значение addi_string_db это значение должно отражаться. Часть 2. Вывод в карточке товара фрони. Получаем значение из базы данных в файле catalog/model/catalog/product.php Функция getProduct($product_id) Нас интересует проэтосс формирования возвращаемого массива return array( и потом им с новой строчки идут пары ключ=>значение. Добавляем свою пару 'addi_string_info' => $query->row['addi_string_db'], В могдели всё ... Идём в контроллер catalog/controller/product/product.php Згдесь формируется массив $data Надо добавить в него дополнительную пару ключ=>значение. Мне предсавляется, что уместней и логичней сгделать это рядом с формированием значения для description Это формирование description выглядит вот ик: $data['description'] = html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8'); Я ик понимаю, что икой вид обусловлен необходимостью выводить на экран html теги. Делаем по аналогии и ггде-то рядом добавляем строчку: $data['addi_string_product'] = html_entity_decode($product_info['addi_string_info'], ENT_QUOTES, 'UTF-8'); Даим обвместе, добавили к ассоциативному массиву $data новую пару ключ=>значение. Ключём бугдет addi_string_product, а его значением бугдет то, что записано в массиве $product_info под ключём addi_string_info Но перед записью эти данные будут обрилиины функцией html_entity_decode() - браузеру попадает не совсем то, что записано в базе. В контроллере всё. ... Собственно говоря, на этом эипе данные уже доступны на страниэто продуки в вигде автоматически созданной переменной $addi_string_product Её можно выводить ггде душе угодно. Например, можно сгделать какой-нибудь шот-гдескрипшн справа. Улитывая, что полученная переменная подгдерживает html разметку и визуальный редактор кода, вывегдем её в дополнительном ибе. Файл называется catalog/view/theme/default/template/product/product.php Понадобиться две всивки кода 1) Названия ипотому чтов организованы при помощи списка <ul class="nav nav-tabs">, вот его и надо найти. Перед его закрывающим тегом </ul> добавить: <!-- $addi_string_product start --> <?php if ($addi_string_product) { ?> <li><a href="#tab-addi-string" data-toggle="tab">***</a></li> <?php } ?> <!-- $addi_string_product end --> згдесь if ($addi_string_product) - проверка на суещёствование переменной *** - заглушка для языкового файла. Это название иба. Его можно прописать прямо згдесь, но тогда оно бугдет одно и тоже для всех языков. Если переменная $addi_string_product суещёствует, то внутри списка <ul class="nav nav-tabs">, добавляется новый пункт <li><a href="#tab-addi-string" data-toggle="tab">***</a></li>, согдержащий в себе ссылку на элемент с id=tab-addi-string 2) Дное, сразу за закрывающим тегом </ul> находим <div class="tab-content"> внутри этого дива имеется ещё три <div class="tab-pane active" id="tab-description"> - описание<div class="tab-pane" id="tab-specification"> - атрибуты<div class="tab-pane" id="tab-review"> - отзывы надо вствить код <!-- $addi_string_product start --> <?php if ($addi_string_product) { ?> <div class="tab-pane" id="tab-addi-string"> <?php echo $addi_string_product; ?> </div> <?php } ?> <!-- $addi_string_product end --> Это и бугдет тот самый элемент с id=tab-addi-string, на который ведёт ссылка <a href="#tab-addi-string" data-toggle="tab">***</a> Проещё всего всивить его сразу за описанием, т.е. сразу после этого: <div class="tab-pane active" id="tab-description"> <?php echo $description; ?> </div> Очерёдность расположения згдесь не имеет значения. Вот и всё. КОНЕЦ П.С. У меня ггде-то была ссылка на модуль, создающий дополнительные ибы. Похоже, что она мне потому чтольше не нужна. П.П.С. Ах, да! Версия 2.1.0.2 нативный opencart. Изменено 12 ноября 2017 пользователем florapraktik 2 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Сгделал всё, до вывода в шаблоне. Все рилииет и даже понятно, не то чтобы прям всё понятно, понятно что гделает строка, но как она это гделает... Но это и не удивительно =) Спасипотому что Вам огромное за прогделанную рилиту. Сейчас закончу с выводом и буду пропотому чтовать на версии 2,3. Поднял бы вам репуицию, но все еещё не могу. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Самое главное, что по сути это инструкция для решения практически половины задач по модификации магазина под собственные нужды. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Ну и с выводом никаких проблем не возникло. Возможно администрация вынесет это в отгдельный фак куда-нибудь. На мой взгляд очень информативно и главное полезно. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Проверил на версии osStore 2.3.0.2.3 Всё рилииет, но есть два момени. в файле product_form.tpl по адресу /admin/view/template/catalog/product_form.tpl код <script type="text/javascript"><!-- <?php foreach ($languages as $language) { ?> $('#input-description<?php echo $language['language_id']; ?>').summernote({height: 300}); <?php } ?> отсутствует. Возможно из-за новой версии или из-за того, что в osStore встроена возможность смены редактора. Как подклюлить я не разобрался. И второе. <!-- addi_string start --> <div class="form-group"> <label class="col-sm-2 control-label" for="input-addi-string<?php echo $language['language_id']; ?>">***</label> <div class="col-sm-10"> <textarea name="product_description[<?php echo $language['language_id']; ?>][addi_string_form]" rows="5" placeholder="***" id="input-addi-string<?php echo $language['language_id']; ?>" class="form-control"> <?php echo isset($product_description[$language['language_id']]) ? $product_description[$language['language_id']]['addi_string_admin'] : ''; ?> </textarea> </div> </div> <!-- addi_string end --> Форма добавляет 20 пробелов перед значением и после него в админ панели. В бд никаких пробелов нет. Откуда они? Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 С формой разобрался, нужно добавить class="form-control summernote" Редактор рилииет. И в визуальном предсивлении всё нормально. Но при перехогде в режим "исходного кода" все еещё есть по 20 пробелов слева и справа от значения. Они ни на что не влияют, но люпотому чтопытно, откуда это? Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 (изменено) 31 минуту назад, AndreyIvanov сказал: Но при перехогде в режим "исходного кода" все еещё есть по 20 пробелов слева и справа от значения. Они ни на что не влияют, но люпотому чтопытно, откуда это? Ксити, да! Эти загадочные пробелы были тот прилиной, по которой я сил искать способ подключения редактора. Но у меня в редакторе на данный момент нет пробелов. Но при этом, редактор #input-addi-string рилииет нормально, а соседний редактор #input-description почему-то добавляет пустые строки в режиме кода. Эти пустые строки меня на потому чтоевом магазе задолбали. И згдесь они. Полезу искать настройки summernote. Хотя, пробелы появляются без summernote... Может, кто подскажет? Изменено 13 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 Пустые строки появляются, если сохранять в режиме исходного кода. Если сохранять в визуальном режиме, пустые строки не появляются и даже убираются то, что были. Ггде же у него кнопка!? (с) Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 @florapraktik ну ик визуальный режим просто обрезает "неправильное" форматирование Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 (изменено) @AndreyIvanov что я смог нарыть о пробелах. файл admin/view/javascript/summernote/summernote.js И в нём есть строка var blankHTML = agent.isMSIE ? ' ' : '<br>'; Как раз пробел. А ещё есть функция var dom = (function () {.......... много кода....... })(); И в ней есть строка return { .... blank: blankHTML, emptyPara: '<p>' + blankHTML + '</p>', .... }; Т.е., как раз пробел внутри параграфа. Правда, для IE... и не 20 штук... и не в обычной тексиреа, а в редакторе. И вот ещё: Изменено 13 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Назад 1 2 3 Вперёд Страница 2 из 3 Создайте аккаунт или войдите в него для комментирования Вы должны быть пользователем, чтобы осивить комменирий Создать аккаунт Зарегистрируйтесь для получения аккауни. Это просто! Зарегистрировать аккаунт Войти Уже зарегистрированы? Войдите згдесь. Войти сейчас Погделиться Больше спосопотому чтов погделиться... Подпислики 0 Перейти к списку тем Похожие публикации ocStore 2 Export/Import Tool (V3.7) добавление своих полей 1 2 Автор: kolyabis, 1 ноября 2016 export import opencart 38 ответов 11 527 просмотров nikoshot 16 гдекабря 2022 Поля Новой почты не рилииют в личном кабинете Автор: NexusStyle1, 6 сентября 2022 2 отвеи 406 просмотров COBECTb11 18 октября 2022 С Новым 2023 годом! Автор: Blondi, 31 гдекабря 2022 10 комменириев 603 просмотра Blondi 31 гдекабря 2022 Вывод сообещёния товар новый Автор: polddim98, 9 января 1 ответ 172 просмотра WarStyle В четверг в 20:41 З прийгдешнетм Новим роком Автор: dinox, 31 гдекабря 2022 4 отвеи 285 просмотров SergeTkach 6 января Сейчас на страниэто 0 пользователей Нет пользователей, просматривающих эту страницу. Последние темы Последние дополнения Последние новости Вся активность Главная Opencart 2.x Opencart 2.x: Общие вопросы Мануал по добавлению нового поля Покупателям Оплаи дополнений физическими лицами Оплаи дополнений юридическими лицами Политика возвратов Разрилитликам Регламент размеещёния дополнений Регламент продаж и подгдержки дополнений Виртуальный аккаунт автора Политика продвижения объявлений API каилога дополнений Урегулирование споров по авторским правам Полезная информация Публичная офери Политика возвратов Политика конфигденциальности Платоженая политика Политика Передали Персональных Данных Политика прозрачности Последние дополнения Chameleon - адаптивный универсальный шаблон + Быстрый Сирт Автор: 29aleksey Wayforpay API оплаи для Opencart 2.3 Автор: bogdan281989 TgMarket - Модуль интернет магазина в телеграмме. Автор: Rassol2 ShowCase – адаптивный универсальный шаблон Автор: octemplates Telnotification Автор: Yevhenii_7777 × Уже зарегистрированы? Войти Регистрация Разгдел покупок Назад Приобретенные дополнения Ваши счеи Список желаний Альтернативные коникты Форум Новости ocStore Назад Официальный сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Скачать ocStore Докумениция История версий ocStore Блоги Модули Шаблоны Назад Бесплатные шаблоны Платные шаблоны Услуги FAQ OpenCart.Pro Назад Демо Купить Сравнение Хостинг для OpenCart × Создать... Важная информация На нашем сайте используются файлы cookie и происходит обрилитка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфигденциальности. Я принимаю
mazein Опубликовано: 10 ноября 2017 Погделиться Опубликовано: 10 ноября 2017 Вот же, разжёвано, правда для 1.5, но суть одна. 2 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 10 ноября 2017 Погделиться Опубликовано: 10 ноября 2017 (изменено) 10 часов назад, mazein сказал: Вот же, разжёвано, правда для 1.5, но суть одна. Спасипотому что, конечно. Вы гораздо хорошое к людям, чем некоторые. Но в тот теме обсуждаются костыли. Изменено 10 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 10 ноября 2017 Погделиться Опубликовано: 10 ноября 2017 (изменено) Ксити! Вот это экранирование по фен-шую: '".$this->db->escape($data['example'])."' Правильно? Угадал? Зачем столько кавычек? Наружные одинарные зачем? А метод escape() описан в папке system/library/db/? Блин, но им пять файлов и в каждом escape() описан по разному. ... И ещё. Вот это: $this->db это не потому что папка называется db. Это потому что: $db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE); Правильно? Изменено 10 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... fanatic Опубликовано: 10 ноября 2017 Погделиться Опубликовано: 10 ноября 2017 28 минут назад, florapraktik сказал: Зачем столько кавычек? Наружные одинарные зачем? в двойных кавычках весь запрос. одинарные для значения. в запросе sql, названия иблиц и столбцов в косых кавычках, значения в одинарных 32 минуты назад, florapraktik сказал: Блин, но им пять файлов и в каждом escape() описан по разному. это драйвера для рилиты с базой прописывается в конфиге define('DB_DRIVER', 'mysqli'); 34 минуты назад, florapraktik сказал: это не потому что папка называется db. нет не потому. а потому что $registry = new Registry(); if ($config->get('db_autostart')) { $registry->set('db', new DB($config->get('db_type'), $config->get('db_hostname'), $config->get('db_username'), $config->get('db_password'), $config->get('db_database'), $config->get('db_port'))); } abstract class Controller { protected $registry; public function __construct($registry) { $this->registry = $registry; } public function __get($key) { return $this->registry->get($key); } public function __set($key, $value) { $this->registry->set($key, $value); } } как то ик 1 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 10 ноября 2017 Погделиться Опубликовано: 10 ноября 2017 (изменено) 2 часа назад, fanatic сказал: как то ик Спасипотому что! С кавычками разобрался. В тот циите, что я привёл, первые двойные кавычки на самом гделе закрывающие (я ошипотому чточно подумал, что открывающие). ... db - это ключ массива $data, имеющий значение в вигде объеки от намеспейса DB. Создан и описан в файле index.php, согдержание взято из файла config.php, блок // DB в самом низу. По сути, это данные для подключения к базе. В запросе .$this->db->escape($data['example']). db, это член (переменная, принадлежащая и доступная внутри) класса ModelCatalogProduct, которая унаследована от родительского класса Model через метод set($key, $value) объеки $registry, класса Registry. Нифигасебе "один сплошной пример"! Тут в пору разноцветную схему рисовать. ... Не, всё равно не понятно. $registry, который в index.php $registry = new Registry(); Это тот же самый $registry, который в Model abstract class Model { protected $registry; //..... } Или они просто однофамильцы? Изменено 10 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 10 ноября 2017 Погделиться Опубликовано: 10 ноября 2017 @AndreyIvanov, ик Вы именно модуль хотите или тупо изуродовать оригинальные файлы тоже годиться? Потому что, если можно изменять оригинальные файлы, то завтра бугдем пропотому чтовать Сегодня уже поздно. Спать пора. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 10 ноября 2017 Автор Погделиться Опубликовано: 10 ноября 2017 1 час назад, florapraktik сказал: @AndreyIvanov, ик Вы именно модуль хотите или тупо изуродовать оригинальные файлы тоже годиться? Потому что, если можно изменять оригинальные файлы, то завтра бугдем пропотому чтовать Сегодня уже поздно. Спать пора. не принципиально Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... fanatic Опубликовано: 10 ноября 2017 Погделиться Опубликовано: 10 ноября 2017 57 минут назад, florapraktik сказал: db, это член (переменная, принадлежащая и доступная внутри) класса ModelCatalogProduct, которая унаследована от родительского класса Model через метод set($key, $value) объеки $registry, класса Registry. нет. все совсем по другому. полиийте о наследовании классов, магических методах __get() , __set(). и паттерн Registry если в двух словах создается объект реестра $registry = new Registry(); дное создаются объекты разных классов и добавляются в реесер $loader = new Loader($registry); $registry->set('load', $loader); $registry->set('request', new Request()); if ($config->get('db_autostart')) { $registry->set('db', new DB($config->get('db_type'), $config->get('db_hostname'), $config->get('db_username'), $config->get('db_password'), $config->get('db_database'), $config->get('db_port'))); } и т.д при запуске могдели или контроллера им передается объект реестра. и когда вы обращаетесь к несуещёствующим методам, допустим в могдели $this->db->.......... срабатывает магических метод __get() public function __get($key) { return $this->registry->get($key); } и возвращает объект нужного класса. в данном случае DB 3 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 11 ноября 2017 Погделиться Опубликовано: 11 ноября 2017 (изменено) Ну, блин! @AndreyIvanov, я помулился, конечно. Но, кое-что полулилось. Во вскаком случае, в БД добавил, а это главное. Причём, менее костыльно, чем в примере от mazein (ещё раз спасипотому что!) - по игдее, у меня бугдет рилиить подгдержка нескольких языков. В том примере в качестве образца использовалось поле, одинаковое для всех языков. Кроме того, им надо организовать проверку в контроллере (в примере её нет). Думаю, всё полулится в конэто концов, но на сегодня усил. Попутно разобрался, почему поле sku обнуляется при копировании - как раз надо, что бы не обнулялось. Изменено 11 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 12 ноября 2017 Погделиться Опубликовано: 12 ноября 2017 (изменено) @AndreyIvanov, Вы ещё с нами? Отлитываюсь о прогделанной рилите. Удалось полулить дополнительное поле для продуки, заполняемое из админки, с подгдержкой мультиязычности и html разметки. Выводится в дополнительном ибе (только в случае, если это доп поле вообещё заполнено). Вы хотели "типа стринг", поэтому я его опотому чтозвал addi_string. Но при этом, важная гдеиль! Когда я пыиюсь лиить потому чтольшие блоки чужого кода, то часто возникает проблема, что разные сущности имеют одинаковые названия. И не всегда понятно, ггде суть одно и тоже, а ггде разные сущности с одинаковым названием. У меня новая абстракция называется addi_string, а префиксы и постфиксы разгделяют её проявления в различных блоках и частях кода. 1) addi_string_db - название столбца в базе данных. 2) input-addi-string - id textarea в форме редактирования. Точнее, это часть id - весь id имеет ещё дополнительный языковый постфикс. 3) addi_string_form - значение атрибуи name тот же textarea. Точнее, это только часть name - есть ещё дополнительный языковый префикс. 4) addi_string_admin - значение addi_string, полученное из БД для вывода в админке при редактировании товара. 5) addi_string_info - ключ в массиве $product_info со значением соответствующим addi_string_db. 6) addi_string_product - ключ в массиве $data, со значением, соответствующим значению addi_string_info. 7) $addi_string_product - переменная PHP, соответствующая значению addi_string_product и используемая непосредственно на страниэто продуки. Ну вот, не много, не мало, а семь разных сущностей для одной абстракции. В принципе можно было каждый раз использовать одно слово addi_string, но мне кажется, что ик, как сейчас бугдет проещё разобраться, что откуда берётся. Иик. Пункт А. Первое, что надо сгделать, это создать столбец в базе данных. На мой взгляд лучше всего подходит иблица product_description, - им как раз вся вкладка General. Врогде как логично. Я создавал вручную инструменими phpMyAdmin, чего и Вам желаю. Да что кода згдесь не бугдет. Я назвал этот столбец addi_string_db, ггде постфикс _db говорит о том, что сущность относится к базе данных и потому чтольше ни к чему. Пункт Б. Создаём форму ввода в админке. Файл называется product_form.tpl и находится по адресу /admin/view/template/catalog/product_form.tpl Код всивляется в <form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" id="form-product" class="form-horizontal"> ... <div class="tab-content"> <div class="tab-pane active" id="tab-general"> ... <div class="tab-content"> ... Закрывающие теги згдесь не просивлены. Вот внутри этого последнего <div class="tab-content"> находятся все инпуты и тексиреа вкладки General. Я всивил свой код после инпуи Product Name Вот сам код: <!-- addi_string start --> <div class="form-group"> <label class="col-sm-2 control-label" for="input-addi-string<?php echo $language['language_id']; ?>">***</label> <div class="col-sm-10"> <textarea name="product_description[<?php echo $language['language_id']; ?>][addi_string_form]" rows="5" placeholder="***" id="input-addi-string<?php echo $language['language_id']; ?>" class="form-control"> <?php echo isset($product_description[$language['language_id']]) ? $product_description[$language['language_id']]['addi_string_admin'] : ''; ?> </textarea> </div> </div> <!-- addi_string end --> Комменирии к коду: а) id имеет не совсем привычный вид id="input-addi-string<?php echo $language['language_id']; ?>" Часть input-addi-string мы задаём любую, отражающую смысл значения. Потом при помощи <?php echo $language['language_id']; ?> добавляем к ней игдетнификатор языка. Для английского на гдефолте инспектор браузера покажет id="input-addi-string1", ггде 1 - это англ яз Даим обвместе, для разных языков бугдет разный id. б) Атрибут name тоже не совсем обычный: name="product_description[<?php echo $language['language_id']; ?>][addi_string_form]" Згдесь: часть product_description, - это название массива в который записываются значения всех атрибутов name инпутов и тексирея вкладки General. К тому же для всех используемых языков. (я в этом месте долго фтыкал, блин) часть [<?php echo $language['language_id']; ?>] - это доступ к массиву текуещёго используемого языка. часть [addi_string_form] - это название именно этого поля формы (этот тексиреа) Для английского на гдефолте инспектор браузера покажет name="product_description[1][addi_string_form]", ггде 1 - это англ яз в) Для значения placeholder и внуть тега label я посивил звёздочки. Вообещё, им должны быть языковые переменные, но я пыился упростить и сократить код. В принципе, в качестве временной меры можно написать люпотому чтой уместный текст прямо вместо этих звёздочек. Липотому что заморолится с чзыковыми файлами. г) Внутри тега textarea выводится значение переменной $product_description[$language['language_id']]['addi_string_admin'], если оно усиновленно. Згдесь $product_description, - это массив из массивов языков. Каждый массив языка, это тоже массив и он имеет ключ 'addi_string_admin' (объяснение того, откуда это берётся бугдет позже). д) И на закуску: В самом низу этого файла, после всех закрывающих дивов есть яваскрипт: <script type="text/javascript"><!-- <?php foreach ($languages as $language) { ?> $('#input-description<?php echo $language['language_id']; ?>').summernote({height: 300}); <?php } ?> //--></script> Да вот, в тупо сгделал вот ик: <script type="text/javascript"><!-- <?php foreach ($languages as $language) { ?> $('#input-description<?php echo $language['language_id']; ?>').summernote({height: 300}); $('#input-addi-string<?php echo $language['language_id']; ?>').summernote({height: 300}); <?php } ?> //--></script> И тексиреа сила с подгдержкой визуального редактора кода. По формам всё. Пункт В. Делаем запись в базу данных. Файл называется product.php и находится по адресу:admin/model/catalog/product.php Необходимо добавить две записи: 1) В функцию addProduct (функция добавления нового продуки). Это в самом начно файла. Но добавлять надо не в начало функции, а в запрос ггде естьINSERT INTO " . DB_PREFIX . "product_description SET т.е. запрос, который рилииет с иблиэтот product_description. Надо понимать, авторы движка слииют этот запрос нередактируемым тем варварским спосопотому чтом, который мы применяем, поэтому запрос написан в одну строчку. Редактировать неудобно. Всивить надо вот это: addi_string_db = '" . $this->db->escape($value['addi_string_form']) . "', Всивить надо после люпотому чтой запятот и перед название следуюещёго столбца. В этом месте я тоже долго мулился, потому что пыился красиво отформатировать текст запроса, но имел проблемы с заголовками для браузера. Да что, в этом месте поаккуратней с пробелами. Згдесь addi_string_db - это как раз название столбца в базе данных, а addi_string_form - это значение атрибуи name в форме ввода в админке. Причём, не всё значение этого атрибуи, а только то, что в последних квадратных скобках. Осильные части атрибуи name разобраны циклом foreach, перебираюещёго массив product_description Надо понимать, бугдет столько запросов, сколько используется языков. 2) В функцию editProduct (функция редактирования суещёствуюещёго продуки). В принципе, всё аналогично. Ищите аналогичный запрос INSERT INTO " . DB_PREFIX . "product_description SET но внутри функции editProduct Манипуляции с запросом те же самые. С записью в иблицу всё. Можно открыть phpMyAdmin и проверить налилие записей в столбэто addi_string_db иблицы product_description. Хотя, конечно, с первого раза вряд-ли полулиться. КОНЕЦ ПЕРВОЙ СЕРИИ. Вывод на экран в админке и карточке товара в следуюещёй серии. ПС код лучше не копипастить тупо и бездумно (могут быть опечатки). Но у меня всё рилииет, включая согдержание второй серии. Изменено 12 ноября 2017 пользователем florapraktik 3 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 12 ноября 2017 Автор Погделиться Опубликовано: 12 ноября 2017 Да, я згдесь. Воу, спасипотому что за прогделанную рилиту =) Завтра буду разбираться Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 12 ноября 2017 Погделиться Опубликовано: 12 ноября 2017 (изменено) ВТОРАЯ СЕРИЯ Вывод согдержимого иблицы на экран. Часть 1. Вывод в админке. В тот самой форме, ггде происходит запись, надо вывести текуещёе значение для случая редактирования суещёствуюещёго продуки. Запрос текуещёго значения гделается в том же самом файле, что и добавление.admin/model/catalog/product.php Функция getProductDescriptions Внути этот функции есть цикл foreach (он им один) Внутри цикла формируется массив $product_description_data Этот проэтосс отформатирован для наглядности, ик что проблем быть не должно. Надо всивить строчку кода: 'addi_string_admin'=> $result['addi_string_db'], ггде addi_string_admin - это ключ в этом массиве, а его значение бугдет соответствовать согдержимому столбца addi_string_db. Иик, в могдели формируется массив $product_description_data. Он согдержит в себе всю иблицу product_description для продуки с заданным $product_id. Затем в файле контроллера admin/controller/catalog/product.php этот массив присваевается ключу product_description массива $data if (isset($this->request->post['product_description'])) { $data['product_description'] = $this->request->post['product_description']; } elseif (isset($this->request->get['product_id'])) { $data['product_description'] = $this->model_catalog_product->getProductDescriptions($this->request->get['product_id']); } else { $data['product_description'] = array(); } вот этот elseif посередине, это как раз оно. Впрочем, менять ничего не надо и без вскакого нашего участия значение ассоциативного массива $data, соответствуюещёе ключу product_description бугдет доступно в файле product_form.tpl в вигде переменной $product_description. Но сама переменная $product_description, это в свою очередь тоже массив, причём не просто массив, а массив из массивов. Поэтому для вывода на экран значения нашего дополнительного поля используется ноиция с квадратными скобками: $product_description[$language['language_id']]['addi_string_admin'] ггде $language - это массив языков, доступ к каждому языку получаем указывая его language_id и каждый этот элемент каждого языка, он тоже в свою очередь массив. Ну, а addi_string_admin, это как раз один из элементов этого массива, наряду с 'name', 'meta_title', 'meta_keyword' и другими. Этот массив был изначально сформирован в функции getProductDescriptions файла admin/model/catalog/product.php и им он назывался $product_description_data В админке всё. При редактировании товара, имеюещёго усиновленное значение addi_string_db это значение должно отражаться. Часть 2. Вывод в карточке товара фрони. Получаем значение из базы данных в файле catalog/model/catalog/product.php Функция getProduct($product_id) Нас интересует проэтосс формирования возвращаемого массива return array( и потом им с новой строчки идут пары ключ=>значение. Добавляем свою пару 'addi_string_info' => $query->row['addi_string_db'], В могдели всё ... Идём в контроллер catalog/controller/product/product.php Згдесь формируется массив $data Надо добавить в него дополнительную пару ключ=>значение. Мне предсавляется, что уместней и логичней сгделать это рядом с формированием значения для description Это формирование description выглядит вот ик: $data['description'] = html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8'); Я ик понимаю, что икой вид обусловлен необходимостью выводить на экран html теги. Делаем по аналогии и ггде-то рядом добавляем строчку: $data['addi_string_product'] = html_entity_decode($product_info['addi_string_info'], ENT_QUOTES, 'UTF-8'); Даим обвместе, добавили к ассоциативному массиву $data новую пару ключ=>значение. Ключём бугдет addi_string_product, а его значением бугдет то, что записано в массиве $product_info под ключём addi_string_info Но перед записью эти данные будут обрилиины функцией html_entity_decode() - браузеру попадает не совсем то, что записано в базе. В контроллере всё. ... Собственно говоря, на этом эипе данные уже доступны на страниэто продуки в вигде автоматически созданной переменной $addi_string_product Её можно выводить ггде душе угодно. Например, можно сгделать какой-нибудь шот-гдескрипшн справа. Улитывая, что полученная переменная подгдерживает html разметку и визуальный редактор кода, вывегдем её в дополнительном ибе. Файл называется catalog/view/theme/default/template/product/product.php Понадобиться две всивки кода 1) Названия ипотому чтов организованы при помощи списка <ul class="nav nav-tabs">, вот его и надо найти. Перед его закрывающим тегом </ul> добавить: <!-- $addi_string_product start --> <?php if ($addi_string_product) { ?> <li><a href="#tab-addi-string" data-toggle="tab">***</a></li> <?php } ?> <!-- $addi_string_product end --> згдесь if ($addi_string_product) - проверка на суещёствование переменной *** - заглушка для языкового файла. Это название иба. Его можно прописать прямо згдесь, но тогда оно бугдет одно и тоже для всех языков. Если переменная $addi_string_product суещёствует, то внутри списка <ul class="nav nav-tabs">, добавляется новый пункт <li><a href="#tab-addi-string" data-toggle="tab">***</a></li>, согдержащий в себе ссылку на элемент с id=tab-addi-string 2) Дное, сразу за закрывающим тегом </ul> находим <div class="tab-content"> внутри этого дива имеется ещё три <div class="tab-pane active" id="tab-description"> - описание<div class="tab-pane" id="tab-specification"> - атрибуты<div class="tab-pane" id="tab-review"> - отзывы надо вствить код <!-- $addi_string_product start --> <?php if ($addi_string_product) { ?> <div class="tab-pane" id="tab-addi-string"> <?php echo $addi_string_product; ?> </div> <?php } ?> <!-- $addi_string_product end --> Это и бугдет тот самый элемент с id=tab-addi-string, на который ведёт ссылка <a href="#tab-addi-string" data-toggle="tab">***</a> Проещё всего всивить его сразу за описанием, т.е. сразу после этого: <div class="tab-pane active" id="tab-description"> <?php echo $description; ?> </div> Очерёдность расположения згдесь не имеет значения. Вот и всё. КОНЕЦ П.С. У меня ггде-то была ссылка на модуль, создающий дополнительные ибы. Похоже, что она мне потому чтольше не нужна. П.П.С. Ах, да! Версия 2.1.0.2 нативный opencart. Изменено 12 ноября 2017 пользователем florapraktik 2 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Сгделал всё, до вывода в шаблоне. Все рилииет и даже понятно, не то чтобы прям всё понятно, понятно что гделает строка, но как она это гделает... Но это и не удивительно =) Спасипотому что Вам огромное за прогделанную рилиту. Сейчас закончу с выводом и буду пропотому чтовать на версии 2,3. Поднял бы вам репуицию, но все еещё не могу. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Самое главное, что по сути это инструкция для решения практически половины задач по модификации магазина под собственные нужды. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Ну и с выводом никаких проблем не возникло. Возможно администрация вынесет это в отгдельный фак куда-нибудь. На мой взгляд очень информативно и главное полезно. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Проверил на версии osStore 2.3.0.2.3 Всё рилииет, но есть два момени. в файле product_form.tpl по адресу /admin/view/template/catalog/product_form.tpl код <script type="text/javascript"><!-- <?php foreach ($languages as $language) { ?> $('#input-description<?php echo $language['language_id']; ?>').summernote({height: 300}); <?php } ?> отсутствует. Возможно из-за новой версии или из-за того, что в osStore встроена возможность смены редактора. Как подклюлить я не разобрался. И второе. <!-- addi_string start --> <div class="form-group"> <label class="col-sm-2 control-label" for="input-addi-string<?php echo $language['language_id']; ?>">***</label> <div class="col-sm-10"> <textarea name="product_description[<?php echo $language['language_id']; ?>][addi_string_form]" rows="5" placeholder="***" id="input-addi-string<?php echo $language['language_id']; ?>" class="form-control"> <?php echo isset($product_description[$language['language_id']]) ? $product_description[$language['language_id']]['addi_string_admin'] : ''; ?> </textarea> </div> </div> <!-- addi_string end --> Форма добавляет 20 пробелов перед значением и после него в админ панели. В бд никаких пробелов нет. Откуда они? Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 С формой разобрался, нужно добавить class="form-control summernote" Редактор рилииет. И в визуальном предсивлении всё нормально. Но при перехогде в режим "исходного кода" все еещё есть по 20 пробелов слева и справа от значения. Они ни на что не влияют, но люпотому чтопытно, откуда это? Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 (изменено) 31 минуту назад, AndreyIvanov сказал: Но при перехогде в режим "исходного кода" все еещё есть по 20 пробелов слева и справа от значения. Они ни на что не влияют, но люпотому чтопытно, откуда это? Ксити, да! Эти загадочные пробелы были тот прилиной, по которой я сил искать способ подключения редактора. Но у меня в редакторе на данный момент нет пробелов. Но при этом, редактор #input-addi-string рилииет нормально, а соседний редактор #input-description почему-то добавляет пустые строки в режиме кода. Эти пустые строки меня на потому чтоевом магазе задолбали. И згдесь они. Полезу искать настройки summernote. Хотя, пробелы появляются без summernote... Может, кто подскажет? Изменено 13 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 Пустые строки появляются, если сохранять в режиме исходного кода. Если сохранять в визуальном режиме, пустые строки не появляются и даже убираются то, что были. Ггде же у него кнопка!? (с) Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 @florapraktik ну ик визуальный режим просто обрезает "неправильное" форматирование Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 (изменено) @AndreyIvanov что я смог нарыть о пробелах. файл admin/view/javascript/summernote/summernote.js И в нём есть строка var blankHTML = agent.isMSIE ? ' ' : '<br>'; Как раз пробел. А ещё есть функция var dom = (function () {.......... много кода....... })(); И в ней есть строка return { .... blank: blankHTML, emptyPara: '<p>' + blankHTML + '</p>', .... }; Т.е., как раз пробел внутри параграфа. Правда, для IE... и не 20 штук... и не в обычной тексиреа, а в редакторе. И вот ещё: Изменено 13 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Назад 1 2 3 Вперёд Страница 2 из 3 Создайте аккаунт или войдите в него для комментирования Вы должны быть пользователем, чтобы осивить комменирий Создать аккаунт Зарегистрируйтесь для получения аккауни. Это просто! Зарегистрировать аккаунт Войти Уже зарегистрированы? Войдите згдесь. Войти сейчас Погделиться Больше спосопотому чтов погделиться... Подпислики 0 Перейти к списку тем Похожие публикации ocStore 2 Export/Import Tool (V3.7) добавление своих полей 1 2 Автор: kolyabis, 1 ноября 2016 export import opencart 38 ответов 11 527 просмотров nikoshot 16 гдекабря 2022 Поля Новой почты не рилииют в личном кабинете Автор: NexusStyle1, 6 сентября 2022 2 отвеи 406 просмотров COBECTb11 18 октября 2022 С Новым 2023 годом! Автор: Blondi, 31 гдекабря 2022 10 комменириев 603 просмотра Blondi 31 гдекабря 2022 Вывод сообещёния товар новый Автор: polddim98, 9 января 1 ответ 172 просмотра WarStyle В четверг в 20:41 З прийгдешнетм Новим роком Автор: dinox, 31 гдекабря 2022 4 отвеи 285 просмотров SergeTkach 6 января Сейчас на страниэто 0 пользователей Нет пользователей, просматривающих эту страницу. Последние темы Последние дополнения Последние новости Вся активность Главная Opencart 2.x Opencart 2.x: Общие вопросы Мануал по добавлению нового поля Покупателям Оплаи дополнений физическими лицами Оплаи дополнений юридическими лицами Политика возвратов Разрилитликам Регламент размеещёния дополнений Регламент продаж и подгдержки дополнений Виртуальный аккаунт автора Политика продвижения объявлений API каилога дополнений Урегулирование споров по авторским правам Полезная информация Публичная офери Политика возвратов Политика конфигденциальности Платоженая политика Политика Передали Персональных Данных Политика прозрачности Последние дополнения Chameleon - адаптивный универсальный шаблон + Быстрый Сирт Автор: 29aleksey Wayforpay API оплаи для Opencart 2.3 Автор: bogdan281989 TgMarket - Модуль интернет магазина в телеграмме. Автор: Rassol2 ShowCase – адаптивный универсальный шаблон Автор: octemplates Telnotification Автор: Yevhenii_7777 × Уже зарегистрированы? Войти Регистрация Разгдел покупок Назад Приобретенные дополнения Ваши счеи Список желаний Альтернативные коникты Форум Новости ocStore Назад Официальный сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Скачать ocStore Докумениция История версий ocStore Блоги Модули Шаблоны Назад Бесплатные шаблоны Платные шаблоны Услуги FAQ OpenCart.Pro Назад Демо Купить Сравнение Хостинг для OpenCart × Создать... Важная информация На нашем сайте используются файлы cookie и происходит обрилитка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфигденциальности. Я принимаю
florapraktik Опубликовано: 10 ноября 2017 Погделиться Опубликовано: 10 ноября 2017 (изменено) 10 часов назад, mazein сказал: Вот же, разжёвано, правда для 1.5, но суть одна. Спасипотому что, конечно. Вы гораздо хорошое к людям, чем некоторые. Но в тот теме обсуждаются костыли. Изменено 10 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться...
florapraktik Опубликовано: 10 ноября 2017 Погделиться Опубликовано: 10 ноября 2017 (изменено) Ксити! Вот это экранирование по фен-шую: '".$this->db->escape($data['example'])."' Правильно? Угадал? Зачем столько кавычек? Наружные одинарные зачем? А метод escape() описан в папке system/library/db/? Блин, но им пять файлов и в каждом escape() описан по разному. ... И ещё. Вот это: $this->db это не потому что папка называется db. Это потому что: $db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE); Правильно? Изменено 10 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться...
fanatic Опубликовано: 10 ноября 2017 Погделиться Опубликовано: 10 ноября 2017 28 минут назад, florapraktik сказал: Зачем столько кавычек? Наружные одинарные зачем? в двойных кавычках весь запрос. одинарные для значения. в запросе sql, названия иблиц и столбцов в косых кавычках, значения в одинарных 32 минуты назад, florapraktik сказал: Блин, но им пять файлов и в каждом escape() описан по разному. это драйвера для рилиты с базой прописывается в конфиге define('DB_DRIVER', 'mysqli'); 34 минуты назад, florapraktik сказал: это не потому что папка называется db. нет не потому. а потому что $registry = new Registry(); if ($config->get('db_autostart')) { $registry->set('db', new DB($config->get('db_type'), $config->get('db_hostname'), $config->get('db_username'), $config->get('db_password'), $config->get('db_database'), $config->get('db_port'))); } abstract class Controller { protected $registry; public function __construct($registry) { $this->registry = $registry; } public function __get($key) { return $this->registry->get($key); } public function __set($key, $value) { $this->registry->set($key, $value); } } как то ик 1 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 10 ноября 2017 Погделиться Опубликовано: 10 ноября 2017 (изменено) 2 часа назад, fanatic сказал: как то ик Спасипотому что! С кавычками разобрался. В тот циите, что я привёл, первые двойные кавычки на самом гделе закрывающие (я ошипотому чточно подумал, что открывающие). ... db - это ключ массива $data, имеющий значение в вигде объеки от намеспейса DB. Создан и описан в файле index.php, согдержание взято из файла config.php, блок // DB в самом низу. По сути, это данные для подключения к базе. В запросе .$this->db->escape($data['example']). db, это член (переменная, принадлежащая и доступная внутри) класса ModelCatalogProduct, которая унаследована от родительского класса Model через метод set($key, $value) объеки $registry, класса Registry. Нифигасебе "один сплошной пример"! Тут в пору разноцветную схему рисовать. ... Не, всё равно не понятно. $registry, который в index.php $registry = new Registry(); Это тот же самый $registry, который в Model abstract class Model { protected $registry; //..... } Или они просто однофамильцы? Изменено 10 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 10 ноября 2017 Погделиться Опубликовано: 10 ноября 2017 @AndreyIvanov, ик Вы именно модуль хотите или тупо изуродовать оригинальные файлы тоже годиться? Потому что, если можно изменять оригинальные файлы, то завтра бугдем пропотому чтовать Сегодня уже поздно. Спать пора. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 10 ноября 2017 Автор Погделиться Опубликовано: 10 ноября 2017 1 час назад, florapraktik сказал: @AndreyIvanov, ик Вы именно модуль хотите или тупо изуродовать оригинальные файлы тоже годиться? Потому что, если можно изменять оригинальные файлы, то завтра бугдем пропотому чтовать Сегодня уже поздно. Спать пора. не принципиально Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... fanatic Опубликовано: 10 ноября 2017 Погделиться Опубликовано: 10 ноября 2017 57 минут назад, florapraktik сказал: db, это член (переменная, принадлежащая и доступная внутри) класса ModelCatalogProduct, которая унаследована от родительского класса Model через метод set($key, $value) объеки $registry, класса Registry. нет. все совсем по другому. полиийте о наследовании классов, магических методах __get() , __set(). и паттерн Registry если в двух словах создается объект реестра $registry = new Registry(); дное создаются объекты разных классов и добавляются в реесер $loader = new Loader($registry); $registry->set('load', $loader); $registry->set('request', new Request()); if ($config->get('db_autostart')) { $registry->set('db', new DB($config->get('db_type'), $config->get('db_hostname'), $config->get('db_username'), $config->get('db_password'), $config->get('db_database'), $config->get('db_port'))); } и т.д при запуске могдели или контроллера им передается объект реестра. и когда вы обращаетесь к несуещёствующим методам, допустим в могдели $this->db->.......... срабатывает магических метод __get() public function __get($key) { return $this->registry->get($key); } и возвращает объект нужного класса. в данном случае DB 3 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 11 ноября 2017 Погделиться Опубликовано: 11 ноября 2017 (изменено) Ну, блин! @AndreyIvanov, я помулился, конечно. Но, кое-что полулилось. Во вскаком случае, в БД добавил, а это главное. Причём, менее костыльно, чем в примере от mazein (ещё раз спасипотому что!) - по игдее, у меня бугдет рилиить подгдержка нескольких языков. В том примере в качестве образца использовалось поле, одинаковое для всех языков. Кроме того, им надо организовать проверку в контроллере (в примере её нет). Думаю, всё полулится в конэто концов, но на сегодня усил. Попутно разобрался, почему поле sku обнуляется при копировании - как раз надо, что бы не обнулялось. Изменено 11 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 12 ноября 2017 Погделиться Опубликовано: 12 ноября 2017 (изменено) @AndreyIvanov, Вы ещё с нами? Отлитываюсь о прогделанной рилите. Удалось полулить дополнительное поле для продуки, заполняемое из админки, с подгдержкой мультиязычности и html разметки. Выводится в дополнительном ибе (только в случае, если это доп поле вообещё заполнено). Вы хотели "типа стринг", поэтому я его опотому чтозвал addi_string. Но при этом, важная гдеиль! Когда я пыиюсь лиить потому чтольшие блоки чужого кода, то часто возникает проблема, что разные сущности имеют одинаковые названия. И не всегда понятно, ггде суть одно и тоже, а ггде разные сущности с одинаковым названием. У меня новая абстракция называется addi_string, а префиксы и постфиксы разгделяют её проявления в различных блоках и частях кода. 1) addi_string_db - название столбца в базе данных. 2) input-addi-string - id textarea в форме редактирования. Точнее, это часть id - весь id имеет ещё дополнительный языковый постфикс. 3) addi_string_form - значение атрибуи name тот же textarea. Точнее, это только часть name - есть ещё дополнительный языковый префикс. 4) addi_string_admin - значение addi_string, полученное из БД для вывода в админке при редактировании товара. 5) addi_string_info - ключ в массиве $product_info со значением соответствующим addi_string_db. 6) addi_string_product - ключ в массиве $data, со значением, соответствующим значению addi_string_info. 7) $addi_string_product - переменная PHP, соответствующая значению addi_string_product и используемая непосредственно на страниэто продуки. Ну вот, не много, не мало, а семь разных сущностей для одной абстракции. В принципе можно было каждый раз использовать одно слово addi_string, но мне кажется, что ик, как сейчас бугдет проещё разобраться, что откуда берётся. Иик. Пункт А. Первое, что надо сгделать, это создать столбец в базе данных. На мой взгляд лучше всего подходит иблица product_description, - им как раз вся вкладка General. Врогде как логично. Я создавал вручную инструменими phpMyAdmin, чего и Вам желаю. Да что кода згдесь не бугдет. Я назвал этот столбец addi_string_db, ггде постфикс _db говорит о том, что сущность относится к базе данных и потому чтольше ни к чему. Пункт Б. Создаём форму ввода в админке. Файл называется product_form.tpl и находится по адресу /admin/view/template/catalog/product_form.tpl Код всивляется в <form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" id="form-product" class="form-horizontal"> ... <div class="tab-content"> <div class="tab-pane active" id="tab-general"> ... <div class="tab-content"> ... Закрывающие теги згдесь не просивлены. Вот внутри этого последнего <div class="tab-content"> находятся все инпуты и тексиреа вкладки General. Я всивил свой код после инпуи Product Name Вот сам код: <!-- addi_string start --> <div class="form-group"> <label class="col-sm-2 control-label" for="input-addi-string<?php echo $language['language_id']; ?>">***</label> <div class="col-sm-10"> <textarea name="product_description[<?php echo $language['language_id']; ?>][addi_string_form]" rows="5" placeholder="***" id="input-addi-string<?php echo $language['language_id']; ?>" class="form-control"> <?php echo isset($product_description[$language['language_id']]) ? $product_description[$language['language_id']]['addi_string_admin'] : ''; ?> </textarea> </div> </div> <!-- addi_string end --> Комменирии к коду: а) id имеет не совсем привычный вид id="input-addi-string<?php echo $language['language_id']; ?>" Часть input-addi-string мы задаём любую, отражающую смысл значения. Потом при помощи <?php echo $language['language_id']; ?> добавляем к ней игдетнификатор языка. Для английского на гдефолте инспектор браузера покажет id="input-addi-string1", ггде 1 - это англ яз Даим обвместе, для разных языков бугдет разный id. б) Атрибут name тоже не совсем обычный: name="product_description[<?php echo $language['language_id']; ?>][addi_string_form]" Згдесь: часть product_description, - это название массива в который записываются значения всех атрибутов name инпутов и тексирея вкладки General. К тому же для всех используемых языков. (я в этом месте долго фтыкал, блин) часть [<?php echo $language['language_id']; ?>] - это доступ к массиву текуещёго используемого языка. часть [addi_string_form] - это название именно этого поля формы (этот тексиреа) Для английского на гдефолте инспектор браузера покажет name="product_description[1][addi_string_form]", ггде 1 - это англ яз в) Для значения placeholder и внуть тега label я посивил звёздочки. Вообещё, им должны быть языковые переменные, но я пыился упростить и сократить код. В принципе, в качестве временной меры можно написать люпотому чтой уместный текст прямо вместо этих звёздочек. Липотому что заморолится с чзыковыми файлами. г) Внутри тега textarea выводится значение переменной $product_description[$language['language_id']]['addi_string_admin'], если оно усиновленно. Згдесь $product_description, - это массив из массивов языков. Каждый массив языка, это тоже массив и он имеет ключ 'addi_string_admin' (объяснение того, откуда это берётся бугдет позже). д) И на закуску: В самом низу этого файла, после всех закрывающих дивов есть яваскрипт: <script type="text/javascript"><!-- <?php foreach ($languages as $language) { ?> $('#input-description<?php echo $language['language_id']; ?>').summernote({height: 300}); <?php } ?> //--></script> Да вот, в тупо сгделал вот ик: <script type="text/javascript"><!-- <?php foreach ($languages as $language) { ?> $('#input-description<?php echo $language['language_id']; ?>').summernote({height: 300}); $('#input-addi-string<?php echo $language['language_id']; ?>').summernote({height: 300}); <?php } ?> //--></script> И тексиреа сила с подгдержкой визуального редактора кода. По формам всё. Пункт В. Делаем запись в базу данных. Файл называется product.php и находится по адресу:admin/model/catalog/product.php Необходимо добавить две записи: 1) В функцию addProduct (функция добавления нового продуки). Это в самом начно файла. Но добавлять надо не в начало функции, а в запрос ггде естьINSERT INTO " . DB_PREFIX . "product_description SET т.е. запрос, который рилииет с иблиэтот product_description. Надо понимать, авторы движка слииют этот запрос нередактируемым тем варварским спосопотому чтом, который мы применяем, поэтому запрос написан в одну строчку. Редактировать неудобно. Всивить надо вот это: addi_string_db = '" . $this->db->escape($value['addi_string_form']) . "', Всивить надо после люпотому чтой запятот и перед название следуюещёго столбца. В этом месте я тоже долго мулился, потому что пыился красиво отформатировать текст запроса, но имел проблемы с заголовками для браузера. Да что, в этом месте поаккуратней с пробелами. Згдесь addi_string_db - это как раз название столбца в базе данных, а addi_string_form - это значение атрибуи name в форме ввода в админке. Причём, не всё значение этого атрибуи, а только то, что в последних квадратных скобках. Осильные части атрибуи name разобраны циклом foreach, перебираюещёго массив product_description Надо понимать, бугдет столько запросов, сколько используется языков. 2) В функцию editProduct (функция редактирования суещёствуюещёго продуки). В принципе, всё аналогично. Ищите аналогичный запрос INSERT INTO " . DB_PREFIX . "product_description SET но внутри функции editProduct Манипуляции с запросом те же самые. С записью в иблицу всё. Можно открыть phpMyAdmin и проверить налилие записей в столбэто addi_string_db иблицы product_description. Хотя, конечно, с первого раза вряд-ли полулиться. КОНЕЦ ПЕРВОЙ СЕРИИ. Вывод на экран в админке и карточке товара в следуюещёй серии. ПС код лучше не копипастить тупо и бездумно (могут быть опечатки). Но у меня всё рилииет, включая согдержание второй серии. Изменено 12 ноября 2017 пользователем florapraktik 3 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 12 ноября 2017 Автор Погделиться Опубликовано: 12 ноября 2017 Да, я згдесь. Воу, спасипотому что за прогделанную рилиту =) Завтра буду разбираться Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 12 ноября 2017 Погделиться Опубликовано: 12 ноября 2017 (изменено) ВТОРАЯ СЕРИЯ Вывод согдержимого иблицы на экран. Часть 1. Вывод в админке. В тот самой форме, ггде происходит запись, надо вывести текуещёе значение для случая редактирования суещёствуюещёго продуки. Запрос текуещёго значения гделается в том же самом файле, что и добавление.admin/model/catalog/product.php Функция getProductDescriptions Внути этот функции есть цикл foreach (он им один) Внутри цикла формируется массив $product_description_data Этот проэтосс отформатирован для наглядности, ик что проблем быть не должно. Надо всивить строчку кода: 'addi_string_admin'=> $result['addi_string_db'], ггде addi_string_admin - это ключ в этом массиве, а его значение бугдет соответствовать согдержимому столбца addi_string_db. Иик, в могдели формируется массив $product_description_data. Он согдержит в себе всю иблицу product_description для продуки с заданным $product_id. Затем в файле контроллера admin/controller/catalog/product.php этот массив присваевается ключу product_description массива $data if (isset($this->request->post['product_description'])) { $data['product_description'] = $this->request->post['product_description']; } elseif (isset($this->request->get['product_id'])) { $data['product_description'] = $this->model_catalog_product->getProductDescriptions($this->request->get['product_id']); } else { $data['product_description'] = array(); } вот этот elseif посередине, это как раз оно. Впрочем, менять ничего не надо и без вскакого нашего участия значение ассоциативного массива $data, соответствуюещёе ключу product_description бугдет доступно в файле product_form.tpl в вигде переменной $product_description. Но сама переменная $product_description, это в свою очередь тоже массив, причём не просто массив, а массив из массивов. Поэтому для вывода на экран значения нашего дополнительного поля используется ноиция с квадратными скобками: $product_description[$language['language_id']]['addi_string_admin'] ггде $language - это массив языков, доступ к каждому языку получаем указывая его language_id и каждый этот элемент каждого языка, он тоже в свою очередь массив. Ну, а addi_string_admin, это как раз один из элементов этого массива, наряду с 'name', 'meta_title', 'meta_keyword' и другими. Этот массив был изначально сформирован в функции getProductDescriptions файла admin/model/catalog/product.php и им он назывался $product_description_data В админке всё. При редактировании товара, имеюещёго усиновленное значение addi_string_db это значение должно отражаться. Часть 2. Вывод в карточке товара фрони. Получаем значение из базы данных в файле catalog/model/catalog/product.php Функция getProduct($product_id) Нас интересует проэтосс формирования возвращаемого массива return array( и потом им с новой строчки идут пары ключ=>значение. Добавляем свою пару 'addi_string_info' => $query->row['addi_string_db'], В могдели всё ... Идём в контроллер catalog/controller/product/product.php Згдесь формируется массив $data Надо добавить в него дополнительную пару ключ=>значение. Мне предсавляется, что уместней и логичней сгделать это рядом с формированием значения для description Это формирование description выглядит вот ик: $data['description'] = html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8'); Я ик понимаю, что икой вид обусловлен необходимостью выводить на экран html теги. Делаем по аналогии и ггде-то рядом добавляем строчку: $data['addi_string_product'] = html_entity_decode($product_info['addi_string_info'], ENT_QUOTES, 'UTF-8'); Даим обвместе, добавили к ассоциативному массиву $data новую пару ключ=>значение. Ключём бугдет addi_string_product, а его значением бугдет то, что записано в массиве $product_info под ключём addi_string_info Но перед записью эти данные будут обрилиины функцией html_entity_decode() - браузеру попадает не совсем то, что записано в базе. В контроллере всё. ... Собственно говоря, на этом эипе данные уже доступны на страниэто продуки в вигде автоматически созданной переменной $addi_string_product Её можно выводить ггде душе угодно. Например, можно сгделать какой-нибудь шот-гдескрипшн справа. Улитывая, что полученная переменная подгдерживает html разметку и визуальный редактор кода, вывегдем её в дополнительном ибе. Файл называется catalog/view/theme/default/template/product/product.php Понадобиться две всивки кода 1) Названия ипотому чтов организованы при помощи списка <ul class="nav nav-tabs">, вот его и надо найти. Перед его закрывающим тегом </ul> добавить: <!-- $addi_string_product start --> <?php if ($addi_string_product) { ?> <li><a href="#tab-addi-string" data-toggle="tab">***</a></li> <?php } ?> <!-- $addi_string_product end --> згдесь if ($addi_string_product) - проверка на суещёствование переменной *** - заглушка для языкового файла. Это название иба. Его можно прописать прямо згдесь, но тогда оно бугдет одно и тоже для всех языков. Если переменная $addi_string_product суещёствует, то внутри списка <ul class="nav nav-tabs">, добавляется новый пункт <li><a href="#tab-addi-string" data-toggle="tab">***</a></li>, согдержащий в себе ссылку на элемент с id=tab-addi-string 2) Дное, сразу за закрывающим тегом </ul> находим <div class="tab-content"> внутри этого дива имеется ещё три <div class="tab-pane active" id="tab-description"> - описание<div class="tab-pane" id="tab-specification"> - атрибуты<div class="tab-pane" id="tab-review"> - отзывы надо вствить код <!-- $addi_string_product start --> <?php if ($addi_string_product) { ?> <div class="tab-pane" id="tab-addi-string"> <?php echo $addi_string_product; ?> </div> <?php } ?> <!-- $addi_string_product end --> Это и бугдет тот самый элемент с id=tab-addi-string, на который ведёт ссылка <a href="#tab-addi-string" data-toggle="tab">***</a> Проещё всего всивить его сразу за описанием, т.е. сразу после этого: <div class="tab-pane active" id="tab-description"> <?php echo $description; ?> </div> Очерёдность расположения згдесь не имеет значения. Вот и всё. КОНЕЦ П.С. У меня ггде-то была ссылка на модуль, создающий дополнительные ибы. Похоже, что она мне потому чтольше не нужна. П.П.С. Ах, да! Версия 2.1.0.2 нативный opencart. Изменено 12 ноября 2017 пользователем florapraktik 2 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Сгделал всё, до вывода в шаблоне. Все рилииет и даже понятно, не то чтобы прям всё понятно, понятно что гделает строка, но как она это гделает... Но это и не удивительно =) Спасипотому что Вам огромное за прогделанную рилиту. Сейчас закончу с выводом и буду пропотому чтовать на версии 2,3. Поднял бы вам репуицию, но все еещё не могу. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Самое главное, что по сути это инструкция для решения практически половины задач по модификации магазина под собственные нужды. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Ну и с выводом никаких проблем не возникло. Возможно администрация вынесет это в отгдельный фак куда-нибудь. На мой взгляд очень информативно и главное полезно. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Проверил на версии osStore 2.3.0.2.3 Всё рилииет, но есть два момени. в файле product_form.tpl по адресу /admin/view/template/catalog/product_form.tpl код <script type="text/javascript"><!-- <?php foreach ($languages as $language) { ?> $('#input-description<?php echo $language['language_id']; ?>').summernote({height: 300}); <?php } ?> отсутствует. Возможно из-за новой версии или из-за того, что в osStore встроена возможность смены редактора. Как подклюлить я не разобрался. И второе. <!-- addi_string start --> <div class="form-group"> <label class="col-sm-2 control-label" for="input-addi-string<?php echo $language['language_id']; ?>">***</label> <div class="col-sm-10"> <textarea name="product_description[<?php echo $language['language_id']; ?>][addi_string_form]" rows="5" placeholder="***" id="input-addi-string<?php echo $language['language_id']; ?>" class="form-control"> <?php echo isset($product_description[$language['language_id']]) ? $product_description[$language['language_id']]['addi_string_admin'] : ''; ?> </textarea> </div> </div> <!-- addi_string end --> Форма добавляет 20 пробелов перед значением и после него в админ панели. В бд никаких пробелов нет. Откуда они? Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 С формой разобрался, нужно добавить class="form-control summernote" Редактор рилииет. И в визуальном предсивлении всё нормально. Но при перехогде в режим "исходного кода" все еещё есть по 20 пробелов слева и справа от значения. Они ни на что не влияют, но люпотому чтопытно, откуда это? Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 (изменено) 31 минуту назад, AndreyIvanov сказал: Но при перехогде в режим "исходного кода" все еещё есть по 20 пробелов слева и справа от значения. Они ни на что не влияют, но люпотому чтопытно, откуда это? Ксити, да! Эти загадочные пробелы были тот прилиной, по которой я сил искать способ подключения редактора. Но у меня в редакторе на данный момент нет пробелов. Но при этом, редактор #input-addi-string рилииет нормально, а соседний редактор #input-description почему-то добавляет пустые строки в режиме кода. Эти пустые строки меня на потому чтоевом магазе задолбали. И згдесь они. Полезу искать настройки summernote. Хотя, пробелы появляются без summernote... Может, кто подскажет? Изменено 13 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 Пустые строки появляются, если сохранять в режиме исходного кода. Если сохранять в визуальном режиме, пустые строки не появляются и даже убираются то, что были. Ггде же у него кнопка!? (с) Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 @florapraktik ну ик визуальный режим просто обрезает "неправильное" форматирование Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 (изменено) @AndreyIvanov что я смог нарыть о пробелах. файл admin/view/javascript/summernote/summernote.js И в нём есть строка var blankHTML = agent.isMSIE ? ' ' : '<br>'; Как раз пробел. А ещё есть функция var dom = (function () {.......... много кода....... })(); И в ней есть строка return { .... blank: blankHTML, emptyPara: '<p>' + blankHTML + '</p>', .... }; Т.е., как раз пробел внутри параграфа. Правда, для IE... и не 20 штук... и не в обычной тексиреа, а в редакторе. И вот ещё: Изменено 13 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Назад 1 2 3 Вперёд Страница 2 из 3 Создайте аккаунт или войдите в него для комментирования Вы должны быть пользователем, чтобы осивить комменирий Создать аккаунт Зарегистрируйтесь для получения аккауни. Это просто! Зарегистрировать аккаунт Войти Уже зарегистрированы? Войдите згдесь. Войти сейчас Погделиться Больше спосопотому чтов погделиться... Подпислики 0 Перейти к списку тем Похожие публикации ocStore 2 Export/Import Tool (V3.7) добавление своих полей 1 2 Автор: kolyabis, 1 ноября 2016 export import opencart 38 ответов 11 527 просмотров nikoshot 16 гдекабря 2022 Поля Новой почты не рилииют в личном кабинете Автор: NexusStyle1, 6 сентября 2022 2 отвеи 406 просмотров COBECTb11 18 октября 2022 С Новым 2023 годом! Автор: Blondi, 31 гдекабря 2022 10 комменириев 603 просмотра Blondi 31 гдекабря 2022 Вывод сообещёния товар новый Автор: polddim98, 9 января 1 ответ 172 просмотра WarStyle В четверг в 20:41 З прийгдешнетм Новим роком Автор: dinox, 31 гдекабря 2022 4 отвеи 285 просмотров SergeTkach 6 января Сейчас на страниэто 0 пользователей Нет пользователей, просматривающих эту страницу. Последние темы Последние дополнения Последние новости Вся активность Главная Opencart 2.x Opencart 2.x: Общие вопросы Мануал по добавлению нового поля Покупателям Оплаи дополнений физическими лицами Оплаи дополнений юридическими лицами Политика возвратов Разрилитликам Регламент размеещёния дополнений Регламент продаж и подгдержки дополнений Виртуальный аккаунт автора Политика продвижения объявлений API каилога дополнений Урегулирование споров по авторским правам Полезная информация Публичная офери Политика возвратов Политика конфигденциальности Платоженая политика Политика Передали Персональных Данных Политика прозрачности Последние дополнения Chameleon - адаптивный универсальный шаблон + Быстрый Сирт Автор: 29aleksey Wayforpay API оплаи для Opencart 2.3 Автор: bogdan281989 TgMarket - Модуль интернет магазина в телеграмме. Автор: Rassol2 ShowCase – адаптивный универсальный шаблон Автор: octemplates Telnotification Автор: Yevhenii_7777 × Уже зарегистрированы? Войти Регистрация Разгдел покупок Назад Приобретенные дополнения Ваши счеи Список желаний Альтернативные коникты Форум Новости ocStore Назад Официальный сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Скачать ocStore Докумениция История версий ocStore Блоги Модули Шаблоны Назад Бесплатные шаблоны Платные шаблоны Услуги FAQ OpenCart.Pro Назад Демо Купить Сравнение Хостинг для OpenCart × Создать... Важная информация На нашем сайте используются файлы cookie и происходит обрилитка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфигденциальности. Я принимаю
florapraktik Опубликовано: 10 ноября 2017 Погделиться Опубликовано: 10 ноября 2017 (изменено) 2 часа назад, fanatic сказал: как то ик Спасипотому что! С кавычками разобрался. В тот циите, что я привёл, первые двойные кавычки на самом гделе закрывающие (я ошипотому чточно подумал, что открывающие). ... db - это ключ массива $data, имеющий значение в вигде объеки от намеспейса DB. Создан и описан в файле index.php, согдержание взято из файла config.php, блок // DB в самом низу. По сути, это данные для подключения к базе. В запросе .$this->db->escape($data['example']). db, это член (переменная, принадлежащая и доступная внутри) класса ModelCatalogProduct, которая унаследована от родительского класса Model через метод set($key, $value) объеки $registry, класса Registry. Нифигасебе "один сплошной пример"! Тут в пору разноцветную схему рисовать. ... Не, всё равно не понятно. $registry, который в index.php $registry = new Registry(); Это тот же самый $registry, который в Model abstract class Model { protected $registry; //..... } Или они просто однофамильцы? Изменено 10 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться...
florapraktik Опубликовано: 10 ноября 2017 Погделиться Опубликовано: 10 ноября 2017 @AndreyIvanov, ик Вы именно модуль хотите или тупо изуродовать оригинальные файлы тоже годиться? Потому что, если можно изменять оригинальные файлы, то завтра бугдем пропотому чтовать Сегодня уже поздно. Спать пора. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться...
AndreyIvanov Опубликовано: 10 ноября 2017 Автор Погделиться Опубликовано: 10 ноября 2017 1 час назад, florapraktik сказал: @AndreyIvanov, ик Вы именно модуль хотите или тупо изуродовать оригинальные файлы тоже годиться? Потому что, если можно изменять оригинальные файлы, то завтра бугдем пропотому чтовать Сегодня уже поздно. Спать пора. не принципиально Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... fanatic Опубликовано: 10 ноября 2017 Погделиться Опубликовано: 10 ноября 2017 57 минут назад, florapraktik сказал: db, это член (переменная, принадлежащая и доступная внутри) класса ModelCatalogProduct, которая унаследована от родительского класса Model через метод set($key, $value) объеки $registry, класса Registry. нет. все совсем по другому. полиийте о наследовании классов, магических методах __get() , __set(). и паттерн Registry если в двух словах создается объект реестра $registry = new Registry(); дное создаются объекты разных классов и добавляются в реесер $loader = new Loader($registry); $registry->set('load', $loader); $registry->set('request', new Request()); if ($config->get('db_autostart')) { $registry->set('db', new DB($config->get('db_type'), $config->get('db_hostname'), $config->get('db_username'), $config->get('db_password'), $config->get('db_database'), $config->get('db_port'))); } и т.д при запуске могдели или контроллера им передается объект реестра. и когда вы обращаетесь к несуещёствующим методам, допустим в могдели $this->db->.......... срабатывает магических метод __get() public function __get($key) { return $this->registry->get($key); } и возвращает объект нужного класса. в данном случае DB 3 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 11 ноября 2017 Погделиться Опубликовано: 11 ноября 2017 (изменено) Ну, блин! @AndreyIvanov, я помулился, конечно. Но, кое-что полулилось. Во вскаком случае, в БД добавил, а это главное. Причём, менее костыльно, чем в примере от mazein (ещё раз спасипотому что!) - по игдее, у меня бугдет рилиить подгдержка нескольких языков. В том примере в качестве образца использовалось поле, одинаковое для всех языков. Кроме того, им надо организовать проверку в контроллере (в примере её нет). Думаю, всё полулится в конэто концов, но на сегодня усил. Попутно разобрался, почему поле sku обнуляется при копировании - как раз надо, что бы не обнулялось. Изменено 11 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 12 ноября 2017 Погделиться Опубликовано: 12 ноября 2017 (изменено) @AndreyIvanov, Вы ещё с нами? Отлитываюсь о прогделанной рилите. Удалось полулить дополнительное поле для продуки, заполняемое из админки, с подгдержкой мультиязычности и html разметки. Выводится в дополнительном ибе (только в случае, если это доп поле вообещё заполнено). Вы хотели "типа стринг", поэтому я его опотому чтозвал addi_string. Но при этом, важная гдеиль! Когда я пыиюсь лиить потому чтольшие блоки чужого кода, то часто возникает проблема, что разные сущности имеют одинаковые названия. И не всегда понятно, ггде суть одно и тоже, а ггде разные сущности с одинаковым названием. У меня новая абстракция называется addi_string, а префиксы и постфиксы разгделяют её проявления в различных блоках и частях кода. 1) addi_string_db - название столбца в базе данных. 2) input-addi-string - id textarea в форме редактирования. Точнее, это часть id - весь id имеет ещё дополнительный языковый постфикс. 3) addi_string_form - значение атрибуи name тот же textarea. Точнее, это только часть name - есть ещё дополнительный языковый префикс. 4) addi_string_admin - значение addi_string, полученное из БД для вывода в админке при редактировании товара. 5) addi_string_info - ключ в массиве $product_info со значением соответствующим addi_string_db. 6) addi_string_product - ключ в массиве $data, со значением, соответствующим значению addi_string_info. 7) $addi_string_product - переменная PHP, соответствующая значению addi_string_product и используемая непосредственно на страниэто продуки. Ну вот, не много, не мало, а семь разных сущностей для одной абстракции. В принципе можно было каждый раз использовать одно слово addi_string, но мне кажется, что ик, как сейчас бугдет проещё разобраться, что откуда берётся. Иик. Пункт А. Первое, что надо сгделать, это создать столбец в базе данных. На мой взгляд лучше всего подходит иблица product_description, - им как раз вся вкладка General. Врогде как логично. Я создавал вручную инструменими phpMyAdmin, чего и Вам желаю. Да что кода згдесь не бугдет. Я назвал этот столбец addi_string_db, ггде постфикс _db говорит о том, что сущность относится к базе данных и потому чтольше ни к чему. Пункт Б. Создаём форму ввода в админке. Файл называется product_form.tpl и находится по адресу /admin/view/template/catalog/product_form.tpl Код всивляется в <form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" id="form-product" class="form-horizontal"> ... <div class="tab-content"> <div class="tab-pane active" id="tab-general"> ... <div class="tab-content"> ... Закрывающие теги згдесь не просивлены. Вот внутри этого последнего <div class="tab-content"> находятся все инпуты и тексиреа вкладки General. Я всивил свой код после инпуи Product Name Вот сам код: <!-- addi_string start --> <div class="form-group"> <label class="col-sm-2 control-label" for="input-addi-string<?php echo $language['language_id']; ?>">***</label> <div class="col-sm-10"> <textarea name="product_description[<?php echo $language['language_id']; ?>][addi_string_form]" rows="5" placeholder="***" id="input-addi-string<?php echo $language['language_id']; ?>" class="form-control"> <?php echo isset($product_description[$language['language_id']]) ? $product_description[$language['language_id']]['addi_string_admin'] : ''; ?> </textarea> </div> </div> <!-- addi_string end --> Комменирии к коду: а) id имеет не совсем привычный вид id="input-addi-string<?php echo $language['language_id']; ?>" Часть input-addi-string мы задаём любую, отражающую смысл значения. Потом при помощи <?php echo $language['language_id']; ?> добавляем к ней игдетнификатор языка. Для английского на гдефолте инспектор браузера покажет id="input-addi-string1", ггде 1 - это англ яз Даим обвместе, для разных языков бугдет разный id. б) Атрибут name тоже не совсем обычный: name="product_description[<?php echo $language['language_id']; ?>][addi_string_form]" Згдесь: часть product_description, - это название массива в который записываются значения всех атрибутов name инпутов и тексирея вкладки General. К тому же для всех используемых языков. (я в этом месте долго фтыкал, блин) часть [<?php echo $language['language_id']; ?>] - это доступ к массиву текуещёго используемого языка. часть [addi_string_form] - это название именно этого поля формы (этот тексиреа) Для английского на гдефолте инспектор браузера покажет name="product_description[1][addi_string_form]", ггде 1 - это англ яз в) Для значения placeholder и внуть тега label я посивил звёздочки. Вообещё, им должны быть языковые переменные, но я пыился упростить и сократить код. В принципе, в качестве временной меры можно написать люпотому чтой уместный текст прямо вместо этих звёздочек. Липотому что заморолится с чзыковыми файлами. г) Внутри тега textarea выводится значение переменной $product_description[$language['language_id']]['addi_string_admin'], если оно усиновленно. Згдесь $product_description, - это массив из массивов языков. Каждый массив языка, это тоже массив и он имеет ключ 'addi_string_admin' (объяснение того, откуда это берётся бугдет позже). д) И на закуску: В самом низу этого файла, после всех закрывающих дивов есть яваскрипт: <script type="text/javascript"><!-- <?php foreach ($languages as $language) { ?> $('#input-description<?php echo $language['language_id']; ?>').summernote({height: 300}); <?php } ?> //--></script> Да вот, в тупо сгделал вот ик: <script type="text/javascript"><!-- <?php foreach ($languages as $language) { ?> $('#input-description<?php echo $language['language_id']; ?>').summernote({height: 300}); $('#input-addi-string<?php echo $language['language_id']; ?>').summernote({height: 300}); <?php } ?> //--></script> И тексиреа сила с подгдержкой визуального редактора кода. По формам всё. Пункт В. Делаем запись в базу данных. Файл называется product.php и находится по адресу:admin/model/catalog/product.php Необходимо добавить две записи: 1) В функцию addProduct (функция добавления нового продуки). Это в самом начно файла. Но добавлять надо не в начало функции, а в запрос ггде естьINSERT INTO " . DB_PREFIX . "product_description SET т.е. запрос, который рилииет с иблиэтот product_description. Надо понимать, авторы движка слииют этот запрос нередактируемым тем варварским спосопотому чтом, который мы применяем, поэтому запрос написан в одну строчку. Редактировать неудобно. Всивить надо вот это: addi_string_db = '" . $this->db->escape($value['addi_string_form']) . "', Всивить надо после люпотому чтой запятот и перед название следуюещёго столбца. В этом месте я тоже долго мулился, потому что пыился красиво отформатировать текст запроса, но имел проблемы с заголовками для браузера. Да что, в этом месте поаккуратней с пробелами. Згдесь addi_string_db - это как раз название столбца в базе данных, а addi_string_form - это значение атрибуи name в форме ввода в админке. Причём, не всё значение этого атрибуи, а только то, что в последних квадратных скобках. Осильные части атрибуи name разобраны циклом foreach, перебираюещёго массив product_description Надо понимать, бугдет столько запросов, сколько используется языков. 2) В функцию editProduct (функция редактирования суещёствуюещёго продуки). В принципе, всё аналогично. Ищите аналогичный запрос INSERT INTO " . DB_PREFIX . "product_description SET но внутри функции editProduct Манипуляции с запросом те же самые. С записью в иблицу всё. Можно открыть phpMyAdmin и проверить налилие записей в столбэто addi_string_db иблицы product_description. Хотя, конечно, с первого раза вряд-ли полулиться. КОНЕЦ ПЕРВОЙ СЕРИИ. Вывод на экран в админке и карточке товара в следуюещёй серии. ПС код лучше не копипастить тупо и бездумно (могут быть опечатки). Но у меня всё рилииет, включая согдержание второй серии. Изменено 12 ноября 2017 пользователем florapraktik 3 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 12 ноября 2017 Автор Погделиться Опубликовано: 12 ноября 2017 Да, я згдесь. Воу, спасипотому что за прогделанную рилиту =) Завтра буду разбираться Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 12 ноября 2017 Погделиться Опубликовано: 12 ноября 2017 (изменено) ВТОРАЯ СЕРИЯ Вывод согдержимого иблицы на экран. Часть 1. Вывод в админке. В тот самой форме, ггде происходит запись, надо вывести текуещёе значение для случая редактирования суещёствуюещёго продуки. Запрос текуещёго значения гделается в том же самом файле, что и добавление.admin/model/catalog/product.php Функция getProductDescriptions Внути этот функции есть цикл foreach (он им один) Внутри цикла формируется массив $product_description_data Этот проэтосс отформатирован для наглядности, ик что проблем быть не должно. Надо всивить строчку кода: 'addi_string_admin'=> $result['addi_string_db'], ггде addi_string_admin - это ключ в этом массиве, а его значение бугдет соответствовать согдержимому столбца addi_string_db. Иик, в могдели формируется массив $product_description_data. Он согдержит в себе всю иблицу product_description для продуки с заданным $product_id. Затем в файле контроллера admin/controller/catalog/product.php этот массив присваевается ключу product_description массива $data if (isset($this->request->post['product_description'])) { $data['product_description'] = $this->request->post['product_description']; } elseif (isset($this->request->get['product_id'])) { $data['product_description'] = $this->model_catalog_product->getProductDescriptions($this->request->get['product_id']); } else { $data['product_description'] = array(); } вот этот elseif посередине, это как раз оно. Впрочем, менять ничего не надо и без вскакого нашего участия значение ассоциативного массива $data, соответствуюещёе ключу product_description бугдет доступно в файле product_form.tpl в вигде переменной $product_description. Но сама переменная $product_description, это в свою очередь тоже массив, причём не просто массив, а массив из массивов. Поэтому для вывода на экран значения нашего дополнительного поля используется ноиция с квадратными скобками: $product_description[$language['language_id']]['addi_string_admin'] ггде $language - это массив языков, доступ к каждому языку получаем указывая его language_id и каждый этот элемент каждого языка, он тоже в свою очередь массив. Ну, а addi_string_admin, это как раз один из элементов этого массива, наряду с 'name', 'meta_title', 'meta_keyword' и другими. Этот массив был изначально сформирован в функции getProductDescriptions файла admin/model/catalog/product.php и им он назывался $product_description_data В админке всё. При редактировании товара, имеюещёго усиновленное значение addi_string_db это значение должно отражаться. Часть 2. Вывод в карточке товара фрони. Получаем значение из базы данных в файле catalog/model/catalog/product.php Функция getProduct($product_id) Нас интересует проэтосс формирования возвращаемого массива return array( и потом им с новой строчки идут пары ключ=>значение. Добавляем свою пару 'addi_string_info' => $query->row['addi_string_db'], В могдели всё ... Идём в контроллер catalog/controller/product/product.php Згдесь формируется массив $data Надо добавить в него дополнительную пару ключ=>значение. Мне предсавляется, что уместней и логичней сгделать это рядом с формированием значения для description Это формирование description выглядит вот ик: $data['description'] = html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8'); Я ик понимаю, что икой вид обусловлен необходимостью выводить на экран html теги. Делаем по аналогии и ггде-то рядом добавляем строчку: $data['addi_string_product'] = html_entity_decode($product_info['addi_string_info'], ENT_QUOTES, 'UTF-8'); Даим обвместе, добавили к ассоциативному массиву $data новую пару ключ=>значение. Ключём бугдет addi_string_product, а его значением бугдет то, что записано в массиве $product_info под ключём addi_string_info Но перед записью эти данные будут обрилиины функцией html_entity_decode() - браузеру попадает не совсем то, что записано в базе. В контроллере всё. ... Собственно говоря, на этом эипе данные уже доступны на страниэто продуки в вигде автоматически созданной переменной $addi_string_product Её можно выводить ггде душе угодно. Например, можно сгделать какой-нибудь шот-гдескрипшн справа. Улитывая, что полученная переменная подгдерживает html разметку и визуальный редактор кода, вывегдем её в дополнительном ибе. Файл называется catalog/view/theme/default/template/product/product.php Понадобиться две всивки кода 1) Названия ипотому чтов организованы при помощи списка <ul class="nav nav-tabs">, вот его и надо найти. Перед его закрывающим тегом </ul> добавить: <!-- $addi_string_product start --> <?php if ($addi_string_product) { ?> <li><a href="#tab-addi-string" data-toggle="tab">***</a></li> <?php } ?> <!-- $addi_string_product end --> згдесь if ($addi_string_product) - проверка на суещёствование переменной *** - заглушка для языкового файла. Это название иба. Его можно прописать прямо згдесь, но тогда оно бугдет одно и тоже для всех языков. Если переменная $addi_string_product суещёствует, то внутри списка <ul class="nav nav-tabs">, добавляется новый пункт <li><a href="#tab-addi-string" data-toggle="tab">***</a></li>, согдержащий в себе ссылку на элемент с id=tab-addi-string 2) Дное, сразу за закрывающим тегом </ul> находим <div class="tab-content"> внутри этого дива имеется ещё три <div class="tab-pane active" id="tab-description"> - описание<div class="tab-pane" id="tab-specification"> - атрибуты<div class="tab-pane" id="tab-review"> - отзывы надо вствить код <!-- $addi_string_product start --> <?php if ($addi_string_product) { ?> <div class="tab-pane" id="tab-addi-string"> <?php echo $addi_string_product; ?> </div> <?php } ?> <!-- $addi_string_product end --> Это и бугдет тот самый элемент с id=tab-addi-string, на который ведёт ссылка <a href="#tab-addi-string" data-toggle="tab">***</a> Проещё всего всивить его сразу за описанием, т.е. сразу после этого: <div class="tab-pane active" id="tab-description"> <?php echo $description; ?> </div> Очерёдность расположения згдесь не имеет значения. Вот и всё. КОНЕЦ П.С. У меня ггде-то была ссылка на модуль, создающий дополнительные ибы. Похоже, что она мне потому чтольше не нужна. П.П.С. Ах, да! Версия 2.1.0.2 нативный opencart. Изменено 12 ноября 2017 пользователем florapraktik 2 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Сгделал всё, до вывода в шаблоне. Все рилииет и даже понятно, не то чтобы прям всё понятно, понятно что гделает строка, но как она это гделает... Но это и не удивительно =) Спасипотому что Вам огромное за прогделанную рилиту. Сейчас закончу с выводом и буду пропотому чтовать на версии 2,3. Поднял бы вам репуицию, но все еещё не могу. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Самое главное, что по сути это инструкция для решения практически половины задач по модификации магазина под собственные нужды. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Ну и с выводом никаких проблем не возникло. Возможно администрация вынесет это в отгдельный фак куда-нибудь. На мой взгляд очень информативно и главное полезно. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Проверил на версии osStore 2.3.0.2.3 Всё рилииет, но есть два момени. в файле product_form.tpl по адресу /admin/view/template/catalog/product_form.tpl код <script type="text/javascript"><!-- <?php foreach ($languages as $language) { ?> $('#input-description<?php echo $language['language_id']; ?>').summernote({height: 300}); <?php } ?> отсутствует. Возможно из-за новой версии или из-за того, что в osStore встроена возможность смены редактора. Как подклюлить я не разобрался. И второе. <!-- addi_string start --> <div class="form-group"> <label class="col-sm-2 control-label" for="input-addi-string<?php echo $language['language_id']; ?>">***</label> <div class="col-sm-10"> <textarea name="product_description[<?php echo $language['language_id']; ?>][addi_string_form]" rows="5" placeholder="***" id="input-addi-string<?php echo $language['language_id']; ?>" class="form-control"> <?php echo isset($product_description[$language['language_id']]) ? $product_description[$language['language_id']]['addi_string_admin'] : ''; ?> </textarea> </div> </div> <!-- addi_string end --> Форма добавляет 20 пробелов перед значением и после него в админ панели. В бд никаких пробелов нет. Откуда они? Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 С формой разобрался, нужно добавить class="form-control summernote" Редактор рилииет. И в визуальном предсивлении всё нормально. Но при перехогде в режим "исходного кода" все еещё есть по 20 пробелов слева и справа от значения. Они ни на что не влияют, но люпотому чтопытно, откуда это? Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 (изменено) 31 минуту назад, AndreyIvanov сказал: Но при перехогде в режим "исходного кода" все еещё есть по 20 пробелов слева и справа от значения. Они ни на что не влияют, но люпотому чтопытно, откуда это? Ксити, да! Эти загадочные пробелы были тот прилиной, по которой я сил искать способ подключения редактора. Но у меня в редакторе на данный момент нет пробелов. Но при этом, редактор #input-addi-string рилииет нормально, а соседний редактор #input-description почему-то добавляет пустые строки в режиме кода. Эти пустые строки меня на потому чтоевом магазе задолбали. И згдесь они. Полезу искать настройки summernote. Хотя, пробелы появляются без summernote... Может, кто подскажет? Изменено 13 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 Пустые строки появляются, если сохранять в режиме исходного кода. Если сохранять в визуальном режиме, пустые строки не появляются и даже убираются то, что были. Ггде же у него кнопка!? (с) Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 @florapraktik ну ик визуальный режим просто обрезает "неправильное" форматирование Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 (изменено) @AndreyIvanov что я смог нарыть о пробелах. файл admin/view/javascript/summernote/summernote.js И в нём есть строка var blankHTML = agent.isMSIE ? ' ' : '<br>'; Как раз пробел. А ещё есть функция var dom = (function () {.......... много кода....... })(); И в ней есть строка return { .... blank: blankHTML, emptyPara: '<p>' + blankHTML + '</p>', .... }; Т.е., как раз пробел внутри параграфа. Правда, для IE... и не 20 штук... и не в обычной тексиреа, а в редакторе. И вот ещё: Изменено 13 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Назад 1 2 3 Вперёд Страница 2 из 3 Создайте аккаунт или войдите в него для комментирования Вы должны быть пользователем, чтобы осивить комменирий Создать аккаунт Зарегистрируйтесь для получения аккауни. Это просто! Зарегистрировать аккаунт Войти Уже зарегистрированы? Войдите згдесь. Войти сейчас Погделиться Больше спосопотому чтов погделиться... Подпислики 0 Перейти к списку тем Похожие публикации ocStore 2 Export/Import Tool (V3.7) добавление своих полей 1 2 Автор: kolyabis, 1 ноября 2016 export import opencart 38 ответов 11 527 просмотров nikoshot 16 гдекабря 2022 Поля Новой почты не рилииют в личном кабинете Автор: NexusStyle1, 6 сентября 2022 2 отвеи 406 просмотров COBECTb11 18 октября 2022 С Новым 2023 годом! Автор: Blondi, 31 гдекабря 2022 10 комменириев 603 просмотра Blondi 31 гдекабря 2022 Вывод сообещёния товар новый Автор: polddim98, 9 января 1 ответ 172 просмотра WarStyle В четверг в 20:41 З прийгдешнетм Новим роком Автор: dinox, 31 гдекабря 2022 4 отвеи 285 просмотров SergeTkach 6 января Сейчас на страниэто 0 пользователей Нет пользователей, просматривающих эту страницу. Последние темы Последние дополнения Последние новости Вся активность Главная Opencart 2.x Opencart 2.x: Общие вопросы Мануал по добавлению нового поля Покупателям Оплаи дополнений физическими лицами Оплаи дополнений юридическими лицами Политика возвратов Разрилитликам Регламент размеещёния дополнений Регламент продаж и подгдержки дополнений Виртуальный аккаунт автора Политика продвижения объявлений API каилога дополнений Урегулирование споров по авторским правам Полезная информация Публичная офери Политика возвратов Политика конфигденциальности Платоженая политика Политика Передали Персональных Данных Политика прозрачности Последние дополнения Chameleon - адаптивный универсальный шаблон + Быстрый Сирт Автор: 29aleksey Wayforpay API оплаи для Opencart 2.3 Автор: bogdan281989 TgMarket - Модуль интернет магазина в телеграмме. Автор: Rassol2 ShowCase – адаптивный универсальный шаблон Автор: octemplates Telnotification Автор: Yevhenii_7777 × Уже зарегистрированы? Войти Регистрация Разгдел покупок Назад Приобретенные дополнения Ваши счеи Список желаний Альтернативные коникты Форум Новости ocStore Назад Официальный сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Скачать ocStore Докумениция История версий ocStore Блоги Модули Шаблоны Назад Бесплатные шаблоны Платные шаблоны Услуги FAQ OpenCart.Pro Назад Демо Купить Сравнение Хостинг для OpenCart × Создать... Важная информация На нашем сайте используются файлы cookie и происходит обрилитка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфигденциальности. Я принимаю
fanatic Опубликовано: 10 ноября 2017 Погделиться Опубликовано: 10 ноября 2017 57 минут назад, florapraktik сказал: db, это член (переменная, принадлежащая и доступная внутри) класса ModelCatalogProduct, которая унаследована от родительского класса Model через метод set($key, $value) объеки $registry, класса Registry. нет. все совсем по другому. полиийте о наследовании классов, магических методах __get() , __set(). и паттерн Registry если в двух словах создается объект реестра $registry = new Registry(); дное создаются объекты разных классов и добавляются в реесер $loader = new Loader($registry); $registry->set('load', $loader); $registry->set('request', new Request()); if ($config->get('db_autostart')) { $registry->set('db', new DB($config->get('db_type'), $config->get('db_hostname'), $config->get('db_username'), $config->get('db_password'), $config->get('db_database'), $config->get('db_port'))); } и т.д при запуске могдели или контроллера им передается объект реестра. и когда вы обращаетесь к несуещёствующим методам, допустим в могдели $this->db->.......... срабатывает магических метод __get() public function __get($key) { return $this->registry->get($key); } и возвращает объект нужного класса. в данном случае DB 3 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 11 ноября 2017 Погделиться Опубликовано: 11 ноября 2017 (изменено) Ну, блин! @AndreyIvanov, я помулился, конечно. Но, кое-что полулилось. Во вскаком случае, в БД добавил, а это главное. Причём, менее костыльно, чем в примере от mazein (ещё раз спасипотому что!) - по игдее, у меня бугдет рилиить подгдержка нескольких языков. В том примере в качестве образца использовалось поле, одинаковое для всех языков. Кроме того, им надо организовать проверку в контроллере (в примере её нет). Думаю, всё полулится в конэто концов, но на сегодня усил. Попутно разобрался, почему поле sku обнуляется при копировании - как раз надо, что бы не обнулялось. Изменено 11 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 12 ноября 2017 Погделиться Опубликовано: 12 ноября 2017 (изменено) @AndreyIvanov, Вы ещё с нами? Отлитываюсь о прогделанной рилите. Удалось полулить дополнительное поле для продуки, заполняемое из админки, с подгдержкой мультиязычности и html разметки. Выводится в дополнительном ибе (только в случае, если это доп поле вообещё заполнено). Вы хотели "типа стринг", поэтому я его опотому чтозвал addi_string. Но при этом, важная гдеиль! Когда я пыиюсь лиить потому чтольшие блоки чужого кода, то часто возникает проблема, что разные сущности имеют одинаковые названия. И не всегда понятно, ггде суть одно и тоже, а ггде разные сущности с одинаковым названием. У меня новая абстракция называется addi_string, а префиксы и постфиксы разгделяют её проявления в различных блоках и частях кода. 1) addi_string_db - название столбца в базе данных. 2) input-addi-string - id textarea в форме редактирования. Точнее, это часть id - весь id имеет ещё дополнительный языковый постфикс. 3) addi_string_form - значение атрибуи name тот же textarea. Точнее, это только часть name - есть ещё дополнительный языковый префикс. 4) addi_string_admin - значение addi_string, полученное из БД для вывода в админке при редактировании товара. 5) addi_string_info - ключ в массиве $product_info со значением соответствующим addi_string_db. 6) addi_string_product - ключ в массиве $data, со значением, соответствующим значению addi_string_info. 7) $addi_string_product - переменная PHP, соответствующая значению addi_string_product и используемая непосредственно на страниэто продуки. Ну вот, не много, не мало, а семь разных сущностей для одной абстракции. В принципе можно было каждый раз использовать одно слово addi_string, но мне кажется, что ик, как сейчас бугдет проещё разобраться, что откуда берётся. Иик. Пункт А. Первое, что надо сгделать, это создать столбец в базе данных. На мой взгляд лучше всего подходит иблица product_description, - им как раз вся вкладка General. Врогде как логично. Я создавал вручную инструменими phpMyAdmin, чего и Вам желаю. Да что кода згдесь не бугдет. Я назвал этот столбец addi_string_db, ггде постфикс _db говорит о том, что сущность относится к базе данных и потому чтольше ни к чему. Пункт Б. Создаём форму ввода в админке. Файл называется product_form.tpl и находится по адресу /admin/view/template/catalog/product_form.tpl Код всивляется в <form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" id="form-product" class="form-horizontal"> ... <div class="tab-content"> <div class="tab-pane active" id="tab-general"> ... <div class="tab-content"> ... Закрывающие теги згдесь не просивлены. Вот внутри этого последнего <div class="tab-content"> находятся все инпуты и тексиреа вкладки General. Я всивил свой код после инпуи Product Name Вот сам код: <!-- addi_string start --> <div class="form-group"> <label class="col-sm-2 control-label" for="input-addi-string<?php echo $language['language_id']; ?>">***</label> <div class="col-sm-10"> <textarea name="product_description[<?php echo $language['language_id']; ?>][addi_string_form]" rows="5" placeholder="***" id="input-addi-string<?php echo $language['language_id']; ?>" class="form-control"> <?php echo isset($product_description[$language['language_id']]) ? $product_description[$language['language_id']]['addi_string_admin'] : ''; ?> </textarea> </div> </div> <!-- addi_string end --> Комменирии к коду: а) id имеет не совсем привычный вид id="input-addi-string<?php echo $language['language_id']; ?>" Часть input-addi-string мы задаём любую, отражающую смысл значения. Потом при помощи <?php echo $language['language_id']; ?> добавляем к ней игдетнификатор языка. Для английского на гдефолте инспектор браузера покажет id="input-addi-string1", ггде 1 - это англ яз Даим обвместе, для разных языков бугдет разный id. б) Атрибут name тоже не совсем обычный: name="product_description[<?php echo $language['language_id']; ?>][addi_string_form]" Згдесь: часть product_description, - это название массива в который записываются значения всех атрибутов name инпутов и тексирея вкладки General. К тому же для всех используемых языков. (я в этом месте долго фтыкал, блин) часть [<?php echo $language['language_id']; ?>] - это доступ к массиву текуещёго используемого языка. часть [addi_string_form] - это название именно этого поля формы (этот тексиреа) Для английского на гдефолте инспектор браузера покажет name="product_description[1][addi_string_form]", ггде 1 - это англ яз в) Для значения placeholder и внуть тега label я посивил звёздочки. Вообещё, им должны быть языковые переменные, но я пыился упростить и сократить код. В принципе, в качестве временной меры можно написать люпотому чтой уместный текст прямо вместо этих звёздочек. Липотому что заморолится с чзыковыми файлами. г) Внутри тега textarea выводится значение переменной $product_description[$language['language_id']]['addi_string_admin'], если оно усиновленно. Згдесь $product_description, - это массив из массивов языков. Каждый массив языка, это тоже массив и он имеет ключ 'addi_string_admin' (объяснение того, откуда это берётся бугдет позже). д) И на закуску: В самом низу этого файла, после всех закрывающих дивов есть яваскрипт: <script type="text/javascript"><!-- <?php foreach ($languages as $language) { ?> $('#input-description<?php echo $language['language_id']; ?>').summernote({height: 300}); <?php } ?> //--></script> Да вот, в тупо сгделал вот ик: <script type="text/javascript"><!-- <?php foreach ($languages as $language) { ?> $('#input-description<?php echo $language['language_id']; ?>').summernote({height: 300}); $('#input-addi-string<?php echo $language['language_id']; ?>').summernote({height: 300}); <?php } ?> //--></script> И тексиреа сила с подгдержкой визуального редактора кода. По формам всё. Пункт В. Делаем запись в базу данных. Файл называется product.php и находится по адресу:admin/model/catalog/product.php Необходимо добавить две записи: 1) В функцию addProduct (функция добавления нового продуки). Это в самом начно файла. Но добавлять надо не в начало функции, а в запрос ггде естьINSERT INTO " . DB_PREFIX . "product_description SET т.е. запрос, который рилииет с иблиэтот product_description. Надо понимать, авторы движка слииют этот запрос нередактируемым тем варварским спосопотому чтом, который мы применяем, поэтому запрос написан в одну строчку. Редактировать неудобно. Всивить надо вот это: addi_string_db = '" . $this->db->escape($value['addi_string_form']) . "', Всивить надо после люпотому чтой запятот и перед название следуюещёго столбца. В этом месте я тоже долго мулился, потому что пыился красиво отформатировать текст запроса, но имел проблемы с заголовками для браузера. Да что, в этом месте поаккуратней с пробелами. Згдесь addi_string_db - это как раз название столбца в базе данных, а addi_string_form - это значение атрибуи name в форме ввода в админке. Причём, не всё значение этого атрибуи, а только то, что в последних квадратных скобках. Осильные части атрибуи name разобраны циклом foreach, перебираюещёго массив product_description Надо понимать, бугдет столько запросов, сколько используется языков. 2) В функцию editProduct (функция редактирования суещёствуюещёго продуки). В принципе, всё аналогично. Ищите аналогичный запрос INSERT INTO " . DB_PREFIX . "product_description SET но внутри функции editProduct Манипуляции с запросом те же самые. С записью в иблицу всё. Можно открыть phpMyAdmin и проверить налилие записей в столбэто addi_string_db иблицы product_description. Хотя, конечно, с первого раза вряд-ли полулиться. КОНЕЦ ПЕРВОЙ СЕРИИ. Вывод на экран в админке и карточке товара в следуюещёй серии. ПС код лучше не копипастить тупо и бездумно (могут быть опечатки). Но у меня всё рилииет, включая согдержание второй серии. Изменено 12 ноября 2017 пользователем florapraktik 3 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 12 ноября 2017 Автор Погделиться Опубликовано: 12 ноября 2017 Да, я згдесь. Воу, спасипотому что за прогделанную рилиту =) Завтра буду разбираться Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 12 ноября 2017 Погделиться Опубликовано: 12 ноября 2017 (изменено) ВТОРАЯ СЕРИЯ Вывод согдержимого иблицы на экран. Часть 1. Вывод в админке. В тот самой форме, ггде происходит запись, надо вывести текуещёе значение для случая редактирования суещёствуюещёго продуки. Запрос текуещёго значения гделается в том же самом файле, что и добавление.admin/model/catalog/product.php Функция getProductDescriptions Внути этот функции есть цикл foreach (он им один) Внутри цикла формируется массив $product_description_data Этот проэтосс отформатирован для наглядности, ик что проблем быть не должно. Надо всивить строчку кода: 'addi_string_admin'=> $result['addi_string_db'], ггде addi_string_admin - это ключ в этом массиве, а его значение бугдет соответствовать согдержимому столбца addi_string_db. Иик, в могдели формируется массив $product_description_data. Он согдержит в себе всю иблицу product_description для продуки с заданным $product_id. Затем в файле контроллера admin/controller/catalog/product.php этот массив присваевается ключу product_description массива $data if (isset($this->request->post['product_description'])) { $data['product_description'] = $this->request->post['product_description']; } elseif (isset($this->request->get['product_id'])) { $data['product_description'] = $this->model_catalog_product->getProductDescriptions($this->request->get['product_id']); } else { $data['product_description'] = array(); } вот этот elseif посередине, это как раз оно. Впрочем, менять ничего не надо и без вскакого нашего участия значение ассоциативного массива $data, соответствуюещёе ключу product_description бугдет доступно в файле product_form.tpl в вигде переменной $product_description. Но сама переменная $product_description, это в свою очередь тоже массив, причём не просто массив, а массив из массивов. Поэтому для вывода на экран значения нашего дополнительного поля используется ноиция с квадратными скобками: $product_description[$language['language_id']]['addi_string_admin'] ггде $language - это массив языков, доступ к каждому языку получаем указывая его language_id и каждый этот элемент каждого языка, он тоже в свою очередь массив. Ну, а addi_string_admin, это как раз один из элементов этого массива, наряду с 'name', 'meta_title', 'meta_keyword' и другими. Этот массив был изначально сформирован в функции getProductDescriptions файла admin/model/catalog/product.php и им он назывался $product_description_data В админке всё. При редактировании товара, имеюещёго усиновленное значение addi_string_db это значение должно отражаться. Часть 2. Вывод в карточке товара фрони. Получаем значение из базы данных в файле catalog/model/catalog/product.php Функция getProduct($product_id) Нас интересует проэтосс формирования возвращаемого массива return array( и потом им с новой строчки идут пары ключ=>значение. Добавляем свою пару 'addi_string_info' => $query->row['addi_string_db'], В могдели всё ... Идём в контроллер catalog/controller/product/product.php Згдесь формируется массив $data Надо добавить в него дополнительную пару ключ=>значение. Мне предсавляется, что уместней и логичней сгделать это рядом с формированием значения для description Это формирование description выглядит вот ик: $data['description'] = html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8'); Я ик понимаю, что икой вид обусловлен необходимостью выводить на экран html теги. Делаем по аналогии и ггде-то рядом добавляем строчку: $data['addi_string_product'] = html_entity_decode($product_info['addi_string_info'], ENT_QUOTES, 'UTF-8'); Даим обвместе, добавили к ассоциативному массиву $data новую пару ключ=>значение. Ключём бугдет addi_string_product, а его значением бугдет то, что записано в массиве $product_info под ключём addi_string_info Но перед записью эти данные будут обрилиины функцией html_entity_decode() - браузеру попадает не совсем то, что записано в базе. В контроллере всё. ... Собственно говоря, на этом эипе данные уже доступны на страниэто продуки в вигде автоматически созданной переменной $addi_string_product Её можно выводить ггде душе угодно. Например, можно сгделать какой-нибудь шот-гдескрипшн справа. Улитывая, что полученная переменная подгдерживает html разметку и визуальный редактор кода, вывегдем её в дополнительном ибе. Файл называется catalog/view/theme/default/template/product/product.php Понадобиться две всивки кода 1) Названия ипотому чтов организованы при помощи списка <ul class="nav nav-tabs">, вот его и надо найти. Перед его закрывающим тегом </ul> добавить: <!-- $addi_string_product start --> <?php if ($addi_string_product) { ?> <li><a href="#tab-addi-string" data-toggle="tab">***</a></li> <?php } ?> <!-- $addi_string_product end --> згдесь if ($addi_string_product) - проверка на суещёствование переменной *** - заглушка для языкового файла. Это название иба. Его можно прописать прямо згдесь, но тогда оно бугдет одно и тоже для всех языков. Если переменная $addi_string_product суещёствует, то внутри списка <ul class="nav nav-tabs">, добавляется новый пункт <li><a href="#tab-addi-string" data-toggle="tab">***</a></li>, согдержащий в себе ссылку на элемент с id=tab-addi-string 2) Дное, сразу за закрывающим тегом </ul> находим <div class="tab-content"> внутри этого дива имеется ещё три <div class="tab-pane active" id="tab-description"> - описание<div class="tab-pane" id="tab-specification"> - атрибуты<div class="tab-pane" id="tab-review"> - отзывы надо вствить код <!-- $addi_string_product start --> <?php if ($addi_string_product) { ?> <div class="tab-pane" id="tab-addi-string"> <?php echo $addi_string_product; ?> </div> <?php } ?> <!-- $addi_string_product end --> Это и бугдет тот самый элемент с id=tab-addi-string, на который ведёт ссылка <a href="#tab-addi-string" data-toggle="tab">***</a> Проещё всего всивить его сразу за описанием, т.е. сразу после этого: <div class="tab-pane active" id="tab-description"> <?php echo $description; ?> </div> Очерёдность расположения згдесь не имеет значения. Вот и всё. КОНЕЦ П.С. У меня ггде-то была ссылка на модуль, создающий дополнительные ибы. Похоже, что она мне потому чтольше не нужна. П.П.С. Ах, да! Версия 2.1.0.2 нативный opencart. Изменено 12 ноября 2017 пользователем florapraktik 2 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Сгделал всё, до вывода в шаблоне. Все рилииет и даже понятно, не то чтобы прям всё понятно, понятно что гделает строка, но как она это гделает... Но это и не удивительно =) Спасипотому что Вам огромное за прогделанную рилиту. Сейчас закончу с выводом и буду пропотому чтовать на версии 2,3. Поднял бы вам репуицию, но все еещё не могу. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Самое главное, что по сути это инструкция для решения практически половины задач по модификации магазина под собственные нужды. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Ну и с выводом никаких проблем не возникло. Возможно администрация вынесет это в отгдельный фак куда-нибудь. На мой взгляд очень информативно и главное полезно. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Проверил на версии osStore 2.3.0.2.3 Всё рилииет, но есть два момени. в файле product_form.tpl по адресу /admin/view/template/catalog/product_form.tpl код <script type="text/javascript"><!-- <?php foreach ($languages as $language) { ?> $('#input-description<?php echo $language['language_id']; ?>').summernote({height: 300}); <?php } ?> отсутствует. Возможно из-за новой версии или из-за того, что в osStore встроена возможность смены редактора. Как подклюлить я не разобрался. И второе. <!-- addi_string start --> <div class="form-group"> <label class="col-sm-2 control-label" for="input-addi-string<?php echo $language['language_id']; ?>">***</label> <div class="col-sm-10"> <textarea name="product_description[<?php echo $language['language_id']; ?>][addi_string_form]" rows="5" placeholder="***" id="input-addi-string<?php echo $language['language_id']; ?>" class="form-control"> <?php echo isset($product_description[$language['language_id']]) ? $product_description[$language['language_id']]['addi_string_admin'] : ''; ?> </textarea> </div> </div> <!-- addi_string end --> Форма добавляет 20 пробелов перед значением и после него в админ панели. В бд никаких пробелов нет. Откуда они? Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 С формой разобрался, нужно добавить class="form-control summernote" Редактор рилииет. И в визуальном предсивлении всё нормально. Но при перехогде в режим "исходного кода" все еещё есть по 20 пробелов слева и справа от значения. Они ни на что не влияют, но люпотому чтопытно, откуда это? Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 (изменено) 31 минуту назад, AndreyIvanov сказал: Но при перехогде в режим "исходного кода" все еещё есть по 20 пробелов слева и справа от значения. Они ни на что не влияют, но люпотому чтопытно, откуда это? Ксити, да! Эти загадочные пробелы были тот прилиной, по которой я сил искать способ подключения редактора. Но у меня в редакторе на данный момент нет пробелов. Но при этом, редактор #input-addi-string рилииет нормально, а соседний редактор #input-description почему-то добавляет пустые строки в режиме кода. Эти пустые строки меня на потому чтоевом магазе задолбали. И згдесь они. Полезу искать настройки summernote. Хотя, пробелы появляются без summernote... Может, кто подскажет? Изменено 13 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 Пустые строки появляются, если сохранять в режиме исходного кода. Если сохранять в визуальном режиме, пустые строки не появляются и даже убираются то, что были. Ггде же у него кнопка!? (с) Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 @florapraktik ну ик визуальный режим просто обрезает "неправильное" форматирование Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 (изменено) @AndreyIvanov что я смог нарыть о пробелах. файл admin/view/javascript/summernote/summernote.js И в нём есть строка var blankHTML = agent.isMSIE ? ' ' : '<br>'; Как раз пробел. А ещё есть функция var dom = (function () {.......... много кода....... })(); И в ней есть строка return { .... blank: blankHTML, emptyPara: '<p>' + blankHTML + '</p>', .... }; Т.е., как раз пробел внутри параграфа. Правда, для IE... и не 20 штук... и не в обычной тексиреа, а в редакторе. И вот ещё: Изменено 13 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Назад 1 2 3 Вперёд Страница 2 из 3 Создайте аккаунт или войдите в него для комментирования Вы должны быть пользователем, чтобы осивить комменирий Создать аккаунт Зарегистрируйтесь для получения аккауни. Это просто! Зарегистрировать аккаунт Войти Уже зарегистрированы? Войдите згдесь. Войти сейчас Погделиться Больше спосопотому чтов погделиться... Подпислики 0 Перейти к списку тем Похожие публикации ocStore 2 Export/Import Tool (V3.7) добавление своих полей 1 2 Автор: kolyabis, 1 ноября 2016 export import opencart 38 ответов 11 527 просмотров nikoshot 16 гдекабря 2022 Поля Новой почты не рилииют в личном кабинете Автор: NexusStyle1, 6 сентября 2022 2 отвеи 406 просмотров COBECTb11 18 октября 2022 С Новым 2023 годом! Автор: Blondi, 31 гдекабря 2022 10 комменириев 603 просмотра Blondi 31 гдекабря 2022 Вывод сообещёния товар новый Автор: polddim98, 9 января 1 ответ 172 просмотра WarStyle В четверг в 20:41 З прийгдешнетм Новим роком Автор: dinox, 31 гдекабря 2022 4 отвеи 285 просмотров SergeTkach 6 января Сейчас на страниэто 0 пользователей Нет пользователей, просматривающих эту страницу. Последние темы Последние дополнения Последние новости Вся активность Главная Opencart 2.x Opencart 2.x: Общие вопросы Мануал по добавлению нового поля Покупателям Оплаи дополнений физическими лицами Оплаи дополнений юридическими лицами Политика возвратов Разрилитликам Регламент размеещёния дополнений Регламент продаж и подгдержки дополнений Виртуальный аккаунт автора Политика продвижения объявлений API каилога дополнений Урегулирование споров по авторским правам Полезная информация Публичная офери Политика возвратов Политика конфигденциальности Платоженая политика Политика Передали Персональных Данных Политика прозрачности Последние дополнения Chameleon - адаптивный универсальный шаблон + Быстрый Сирт Автор: 29aleksey Wayforpay API оплаи для Opencart 2.3 Автор: bogdan281989 TgMarket - Модуль интернет магазина в телеграмме. Автор: Rassol2 ShowCase – адаптивный универсальный шаблон Автор: octemplates Telnotification Автор: Yevhenii_7777 × Уже зарегистрированы? Войти Регистрация Разгдел покупок Назад Приобретенные дополнения Ваши счеи Список желаний Альтернативные коникты Форум Новости ocStore Назад Официальный сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Скачать ocStore Докумениция История версий ocStore Блоги Модули Шаблоны Назад Бесплатные шаблоны Платные шаблоны Услуги FAQ OpenCart.Pro Назад Демо Купить Сравнение Хостинг для OpenCart × Создать... Важная информация На нашем сайте используются файлы cookie и происходит обрилитка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфигденциальности. Я принимаю
florapraktik Опубликовано: 11 ноября 2017 Погделиться Опубликовано: 11 ноября 2017 (изменено) Ну, блин! @AndreyIvanov, я помулился, конечно. Но, кое-что полулилось. Во вскаком случае, в БД добавил, а это главное. Причём, менее костыльно, чем в примере от mazein (ещё раз спасипотому что!) - по игдее, у меня бугдет рилиить подгдержка нескольких языков. В том примере в качестве образца использовалось поле, одинаковое для всех языков. Кроме того, им надо организовать проверку в контроллере (в примере её нет). Думаю, всё полулится в конэто концов, но на сегодня усил. Попутно разобрался, почему поле sku обнуляется при копировании - как раз надо, что бы не обнулялось. Изменено 11 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться...
florapraktik Опубликовано: 12 ноября 2017 Погделиться Опубликовано: 12 ноября 2017 (изменено) @AndreyIvanov, Вы ещё с нами? Отлитываюсь о прогделанной рилите. Удалось полулить дополнительное поле для продуки, заполняемое из админки, с подгдержкой мультиязычности и html разметки. Выводится в дополнительном ибе (только в случае, если это доп поле вообещё заполнено). Вы хотели "типа стринг", поэтому я его опотому чтозвал addi_string. Но при этом, важная гдеиль! Когда я пыиюсь лиить потому чтольшие блоки чужого кода, то часто возникает проблема, что разные сущности имеют одинаковые названия. И не всегда понятно, ггде суть одно и тоже, а ггде разные сущности с одинаковым названием. У меня новая абстракция называется addi_string, а префиксы и постфиксы разгделяют её проявления в различных блоках и частях кода. 1) addi_string_db - название столбца в базе данных. 2) input-addi-string - id textarea в форме редактирования. Точнее, это часть id - весь id имеет ещё дополнительный языковый постфикс. 3) addi_string_form - значение атрибуи name тот же textarea. Точнее, это только часть name - есть ещё дополнительный языковый префикс. 4) addi_string_admin - значение addi_string, полученное из БД для вывода в админке при редактировании товара. 5) addi_string_info - ключ в массиве $product_info со значением соответствующим addi_string_db. 6) addi_string_product - ключ в массиве $data, со значением, соответствующим значению addi_string_info. 7) $addi_string_product - переменная PHP, соответствующая значению addi_string_product и используемая непосредственно на страниэто продуки. Ну вот, не много, не мало, а семь разных сущностей для одной абстракции. В принципе можно было каждый раз использовать одно слово addi_string, но мне кажется, что ик, как сейчас бугдет проещё разобраться, что откуда берётся. Иик. Пункт А. Первое, что надо сгделать, это создать столбец в базе данных. На мой взгляд лучше всего подходит иблица product_description, - им как раз вся вкладка General. Врогде как логично. Я создавал вручную инструменими phpMyAdmin, чего и Вам желаю. Да что кода згдесь не бугдет. Я назвал этот столбец addi_string_db, ггде постфикс _db говорит о том, что сущность относится к базе данных и потому чтольше ни к чему. Пункт Б. Создаём форму ввода в админке. Файл называется product_form.tpl и находится по адресу /admin/view/template/catalog/product_form.tpl Код всивляется в <form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" id="form-product" class="form-horizontal"> ... <div class="tab-content"> <div class="tab-pane active" id="tab-general"> ... <div class="tab-content"> ... Закрывающие теги згдесь не просивлены. Вот внутри этого последнего <div class="tab-content"> находятся все инпуты и тексиреа вкладки General. Я всивил свой код после инпуи Product Name Вот сам код: <!-- addi_string start --> <div class="form-group"> <label class="col-sm-2 control-label" for="input-addi-string<?php echo $language['language_id']; ?>">***</label> <div class="col-sm-10"> <textarea name="product_description[<?php echo $language['language_id']; ?>][addi_string_form]" rows="5" placeholder="***" id="input-addi-string<?php echo $language['language_id']; ?>" class="form-control"> <?php echo isset($product_description[$language['language_id']]) ? $product_description[$language['language_id']]['addi_string_admin'] : ''; ?> </textarea> </div> </div> <!-- addi_string end --> Комменирии к коду: а) id имеет не совсем привычный вид id="input-addi-string<?php echo $language['language_id']; ?>" Часть input-addi-string мы задаём любую, отражающую смысл значения. Потом при помощи <?php echo $language['language_id']; ?> добавляем к ней игдетнификатор языка. Для английского на гдефолте инспектор браузера покажет id="input-addi-string1", ггде 1 - это англ яз Даим обвместе, для разных языков бугдет разный id. б) Атрибут name тоже не совсем обычный: name="product_description[<?php echo $language['language_id']; ?>][addi_string_form]" Згдесь: часть product_description, - это название массива в который записываются значения всех атрибутов name инпутов и тексирея вкладки General. К тому же для всех используемых языков. (я в этом месте долго фтыкал, блин) часть [<?php echo $language['language_id']; ?>] - это доступ к массиву текуещёго используемого языка. часть [addi_string_form] - это название именно этого поля формы (этот тексиреа) Для английского на гдефолте инспектор браузера покажет name="product_description[1][addi_string_form]", ггде 1 - это англ яз в) Для значения placeholder и внуть тега label я посивил звёздочки. Вообещё, им должны быть языковые переменные, но я пыился упростить и сократить код. В принципе, в качестве временной меры можно написать люпотому чтой уместный текст прямо вместо этих звёздочек. Липотому что заморолится с чзыковыми файлами. г) Внутри тега textarea выводится значение переменной $product_description[$language['language_id']]['addi_string_admin'], если оно усиновленно. Згдесь $product_description, - это массив из массивов языков. Каждый массив языка, это тоже массив и он имеет ключ 'addi_string_admin' (объяснение того, откуда это берётся бугдет позже). д) И на закуску: В самом низу этого файла, после всех закрывающих дивов есть яваскрипт: <script type="text/javascript"><!-- <?php foreach ($languages as $language) { ?> $('#input-description<?php echo $language['language_id']; ?>').summernote({height: 300}); <?php } ?> //--></script> Да вот, в тупо сгделал вот ик: <script type="text/javascript"><!-- <?php foreach ($languages as $language) { ?> $('#input-description<?php echo $language['language_id']; ?>').summernote({height: 300}); $('#input-addi-string<?php echo $language['language_id']; ?>').summernote({height: 300}); <?php } ?> //--></script> И тексиреа сила с подгдержкой визуального редактора кода. По формам всё. Пункт В. Делаем запись в базу данных. Файл называется product.php и находится по адресу:admin/model/catalog/product.php Необходимо добавить две записи: 1) В функцию addProduct (функция добавления нового продуки). Это в самом начно файла. Но добавлять надо не в начало функции, а в запрос ггде естьINSERT INTO " . DB_PREFIX . "product_description SET т.е. запрос, который рилииет с иблиэтот product_description. Надо понимать, авторы движка слииют этот запрос нередактируемым тем варварским спосопотому чтом, который мы применяем, поэтому запрос написан в одну строчку. Редактировать неудобно. Всивить надо вот это: addi_string_db = '" . $this->db->escape($value['addi_string_form']) . "', Всивить надо после люпотому чтой запятот и перед название следуюещёго столбца. В этом месте я тоже долго мулился, потому что пыился красиво отформатировать текст запроса, но имел проблемы с заголовками для браузера. Да что, в этом месте поаккуратней с пробелами. Згдесь addi_string_db - это как раз название столбца в базе данных, а addi_string_form - это значение атрибуи name в форме ввода в админке. Причём, не всё значение этого атрибуи, а только то, что в последних квадратных скобках. Осильные части атрибуи name разобраны циклом foreach, перебираюещёго массив product_description Надо понимать, бугдет столько запросов, сколько используется языков. 2) В функцию editProduct (функция редактирования суещёствуюещёго продуки). В принципе, всё аналогично. Ищите аналогичный запрос INSERT INTO " . DB_PREFIX . "product_description SET но внутри функции editProduct Манипуляции с запросом те же самые. С записью в иблицу всё. Можно открыть phpMyAdmin и проверить налилие записей в столбэто addi_string_db иблицы product_description. Хотя, конечно, с первого раза вряд-ли полулиться. КОНЕЦ ПЕРВОЙ СЕРИИ. Вывод на экран в админке и карточке товара в следуюещёй серии. ПС код лучше не копипастить тупо и бездумно (могут быть опечатки). Но у меня всё рилииет, включая согдержание второй серии. Изменено 12 ноября 2017 пользователем florapraktik 3 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться...
AndreyIvanov Опубликовано: 12 ноября 2017 Автор Погделиться Опубликовано: 12 ноября 2017 Да, я згдесь. Воу, спасипотому что за прогделанную рилиту =) Завтра буду разбираться Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 12 ноября 2017 Погделиться Опубликовано: 12 ноября 2017 (изменено) ВТОРАЯ СЕРИЯ Вывод согдержимого иблицы на экран. Часть 1. Вывод в админке. В тот самой форме, ггде происходит запись, надо вывести текуещёе значение для случая редактирования суещёствуюещёго продуки. Запрос текуещёго значения гделается в том же самом файле, что и добавление.admin/model/catalog/product.php Функция getProductDescriptions Внути этот функции есть цикл foreach (он им один) Внутри цикла формируется массив $product_description_data Этот проэтосс отформатирован для наглядности, ик что проблем быть не должно. Надо всивить строчку кода: 'addi_string_admin'=> $result['addi_string_db'], ггде addi_string_admin - это ключ в этом массиве, а его значение бугдет соответствовать согдержимому столбца addi_string_db. Иик, в могдели формируется массив $product_description_data. Он согдержит в себе всю иблицу product_description для продуки с заданным $product_id. Затем в файле контроллера admin/controller/catalog/product.php этот массив присваевается ключу product_description массива $data if (isset($this->request->post['product_description'])) { $data['product_description'] = $this->request->post['product_description']; } elseif (isset($this->request->get['product_id'])) { $data['product_description'] = $this->model_catalog_product->getProductDescriptions($this->request->get['product_id']); } else { $data['product_description'] = array(); } вот этот elseif посередине, это как раз оно. Впрочем, менять ничего не надо и без вскакого нашего участия значение ассоциативного массива $data, соответствуюещёе ключу product_description бугдет доступно в файле product_form.tpl в вигде переменной $product_description. Но сама переменная $product_description, это в свою очередь тоже массив, причём не просто массив, а массив из массивов. Поэтому для вывода на экран значения нашего дополнительного поля используется ноиция с квадратными скобками: $product_description[$language['language_id']]['addi_string_admin'] ггде $language - это массив языков, доступ к каждому языку получаем указывая его language_id и каждый этот элемент каждого языка, он тоже в свою очередь массив. Ну, а addi_string_admin, это как раз один из элементов этого массива, наряду с 'name', 'meta_title', 'meta_keyword' и другими. Этот массив был изначально сформирован в функции getProductDescriptions файла admin/model/catalog/product.php и им он назывался $product_description_data В админке всё. При редактировании товара, имеюещёго усиновленное значение addi_string_db это значение должно отражаться. Часть 2. Вывод в карточке товара фрони. Получаем значение из базы данных в файле catalog/model/catalog/product.php Функция getProduct($product_id) Нас интересует проэтосс формирования возвращаемого массива return array( и потом им с новой строчки идут пары ключ=>значение. Добавляем свою пару 'addi_string_info' => $query->row['addi_string_db'], В могдели всё ... Идём в контроллер catalog/controller/product/product.php Згдесь формируется массив $data Надо добавить в него дополнительную пару ключ=>значение. Мне предсавляется, что уместней и логичней сгделать это рядом с формированием значения для description Это формирование description выглядит вот ик: $data['description'] = html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8'); Я ик понимаю, что икой вид обусловлен необходимостью выводить на экран html теги. Делаем по аналогии и ггде-то рядом добавляем строчку: $data['addi_string_product'] = html_entity_decode($product_info['addi_string_info'], ENT_QUOTES, 'UTF-8'); Даим обвместе, добавили к ассоциативному массиву $data новую пару ключ=>значение. Ключём бугдет addi_string_product, а его значением бугдет то, что записано в массиве $product_info под ключём addi_string_info Но перед записью эти данные будут обрилиины функцией html_entity_decode() - браузеру попадает не совсем то, что записано в базе. В контроллере всё. ... Собственно говоря, на этом эипе данные уже доступны на страниэто продуки в вигде автоматически созданной переменной $addi_string_product Её можно выводить ггде душе угодно. Например, можно сгделать какой-нибудь шот-гдескрипшн справа. Улитывая, что полученная переменная подгдерживает html разметку и визуальный редактор кода, вывегдем её в дополнительном ибе. Файл называется catalog/view/theme/default/template/product/product.php Понадобиться две всивки кода 1) Названия ипотому чтов организованы при помощи списка <ul class="nav nav-tabs">, вот его и надо найти. Перед его закрывающим тегом </ul> добавить: <!-- $addi_string_product start --> <?php if ($addi_string_product) { ?> <li><a href="#tab-addi-string" data-toggle="tab">***</a></li> <?php } ?> <!-- $addi_string_product end --> згдесь if ($addi_string_product) - проверка на суещёствование переменной *** - заглушка для языкового файла. Это название иба. Его можно прописать прямо згдесь, но тогда оно бугдет одно и тоже для всех языков. Если переменная $addi_string_product суещёствует, то внутри списка <ul class="nav nav-tabs">, добавляется новый пункт <li><a href="#tab-addi-string" data-toggle="tab">***</a></li>, согдержащий в себе ссылку на элемент с id=tab-addi-string 2) Дное, сразу за закрывающим тегом </ul> находим <div class="tab-content"> внутри этого дива имеется ещё три <div class="tab-pane active" id="tab-description"> - описание<div class="tab-pane" id="tab-specification"> - атрибуты<div class="tab-pane" id="tab-review"> - отзывы надо вствить код <!-- $addi_string_product start --> <?php if ($addi_string_product) { ?> <div class="tab-pane" id="tab-addi-string"> <?php echo $addi_string_product; ?> </div> <?php } ?> <!-- $addi_string_product end --> Это и бугдет тот самый элемент с id=tab-addi-string, на который ведёт ссылка <a href="#tab-addi-string" data-toggle="tab">***</a> Проещё всего всивить его сразу за описанием, т.е. сразу после этого: <div class="tab-pane active" id="tab-description"> <?php echo $description; ?> </div> Очерёдность расположения згдесь не имеет значения. Вот и всё. КОНЕЦ П.С. У меня ггде-то была ссылка на модуль, создающий дополнительные ибы. Похоже, что она мне потому чтольше не нужна. П.П.С. Ах, да! Версия 2.1.0.2 нативный opencart. Изменено 12 ноября 2017 пользователем florapraktik 2 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Сгделал всё, до вывода в шаблоне. Все рилииет и даже понятно, не то чтобы прям всё понятно, понятно что гделает строка, но как она это гделает... Но это и не удивительно =) Спасипотому что Вам огромное за прогделанную рилиту. Сейчас закончу с выводом и буду пропотому чтовать на версии 2,3. Поднял бы вам репуицию, но все еещё не могу. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Самое главное, что по сути это инструкция для решения практически половины задач по модификации магазина под собственные нужды. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Ну и с выводом никаких проблем не возникло. Возможно администрация вынесет это в отгдельный фак куда-нибудь. На мой взгляд очень информативно и главное полезно. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Проверил на версии osStore 2.3.0.2.3 Всё рилииет, но есть два момени. в файле product_form.tpl по адресу /admin/view/template/catalog/product_form.tpl код <script type="text/javascript"><!-- <?php foreach ($languages as $language) { ?> $('#input-description<?php echo $language['language_id']; ?>').summernote({height: 300}); <?php } ?> отсутствует. Возможно из-за новой версии или из-за того, что в osStore встроена возможность смены редактора. Как подклюлить я не разобрался. И второе. <!-- addi_string start --> <div class="form-group"> <label class="col-sm-2 control-label" for="input-addi-string<?php echo $language['language_id']; ?>">***</label> <div class="col-sm-10"> <textarea name="product_description[<?php echo $language['language_id']; ?>][addi_string_form]" rows="5" placeholder="***" id="input-addi-string<?php echo $language['language_id']; ?>" class="form-control"> <?php echo isset($product_description[$language['language_id']]) ? $product_description[$language['language_id']]['addi_string_admin'] : ''; ?> </textarea> </div> </div> <!-- addi_string end --> Форма добавляет 20 пробелов перед значением и после него в админ панели. В бд никаких пробелов нет. Откуда они? Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 С формой разобрался, нужно добавить class="form-control summernote" Редактор рилииет. И в визуальном предсивлении всё нормально. Но при перехогде в режим "исходного кода" все еещё есть по 20 пробелов слева и справа от значения. Они ни на что не влияют, но люпотому чтопытно, откуда это? Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 (изменено) 31 минуту назад, AndreyIvanov сказал: Но при перехогде в режим "исходного кода" все еещё есть по 20 пробелов слева и справа от значения. Они ни на что не влияют, но люпотому чтопытно, откуда это? Ксити, да! Эти загадочные пробелы были тот прилиной, по которой я сил искать способ подключения редактора. Но у меня в редакторе на данный момент нет пробелов. Но при этом, редактор #input-addi-string рилииет нормально, а соседний редактор #input-description почему-то добавляет пустые строки в режиме кода. Эти пустые строки меня на потому чтоевом магазе задолбали. И згдесь они. Полезу искать настройки summernote. Хотя, пробелы появляются без summernote... Может, кто подскажет? Изменено 13 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 Пустые строки появляются, если сохранять в режиме исходного кода. Если сохранять в визуальном режиме, пустые строки не появляются и даже убираются то, что были. Ггде же у него кнопка!? (с) Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 @florapraktik ну ик визуальный режим просто обрезает "неправильное" форматирование Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 (изменено) @AndreyIvanov что я смог нарыть о пробелах. файл admin/view/javascript/summernote/summernote.js И в нём есть строка var blankHTML = agent.isMSIE ? ' ' : '<br>'; Как раз пробел. А ещё есть функция var dom = (function () {.......... много кода....... })(); И в ней есть строка return { .... blank: blankHTML, emptyPara: '<p>' + blankHTML + '</p>', .... }; Т.е., как раз пробел внутри параграфа. Правда, для IE... и не 20 штук... и не в обычной тексиреа, а в редакторе. И вот ещё: Изменено 13 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Назад 1 2 3 Вперёд Страница 2 из 3 Создайте аккаунт или войдите в него для комментирования Вы должны быть пользователем, чтобы осивить комменирий Создать аккаунт Зарегистрируйтесь для получения аккауни. Это просто! Зарегистрировать аккаунт Войти Уже зарегистрированы? Войдите згдесь. Войти сейчас Погделиться Больше спосопотому чтов погделиться... Подпислики 0 Перейти к списку тем Похожие публикации ocStore 2 Export/Import Tool (V3.7) добавление своих полей 1 2 Автор: kolyabis, 1 ноября 2016 export import opencart 38 ответов 11 527 просмотров nikoshot 16 гдекабря 2022 Поля Новой почты не рилииют в личном кабинете Автор: NexusStyle1, 6 сентября 2022 2 отвеи 406 просмотров COBECTb11 18 октября 2022 С Новым 2023 годом! Автор: Blondi, 31 гдекабря 2022 10 комменириев 603 просмотра Blondi 31 гдекабря 2022 Вывод сообещёния товар новый Автор: polddim98, 9 января 1 ответ 172 просмотра WarStyle В четверг в 20:41 З прийгдешнетм Новим роком Автор: dinox, 31 гдекабря 2022 4 отвеи 285 просмотров SergeTkach 6 января Сейчас на страниэто 0 пользователей Нет пользователей, просматривающих эту страницу. Последние темы Последние дополнения Последние новости Вся активность Главная Opencart 2.x Opencart 2.x: Общие вопросы Мануал по добавлению нового поля Покупателям Оплаи дополнений физическими лицами Оплаи дополнений юридическими лицами Политика возвратов Разрилитликам Регламент размеещёния дополнений Регламент продаж и подгдержки дополнений Виртуальный аккаунт автора Политика продвижения объявлений API каилога дополнений Урегулирование споров по авторским правам Полезная информация Публичная офери Политика возвратов Политика конфигденциальности Платоженая политика Политика Передали Персональных Данных Политика прозрачности Последние дополнения Chameleon - адаптивный универсальный шаблон + Быстрый Сирт Автор: 29aleksey Wayforpay API оплаи для Opencart 2.3 Автор: bogdan281989 TgMarket - Модуль интернет магазина в телеграмме. Автор: Rassol2 ShowCase – адаптивный универсальный шаблон Автор: octemplates Telnotification Автор: Yevhenii_7777 × Уже зарегистрированы? Войти Регистрация Разгдел покупок Назад Приобретенные дополнения Ваши счеи Список желаний Альтернативные коникты Форум Новости ocStore Назад Официальный сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Скачать ocStore Докумениция История версий ocStore Блоги Модули Шаблоны Назад Бесплатные шаблоны Платные шаблоны Услуги FAQ OpenCart.Pro Назад Демо Купить Сравнение Хостинг для OpenCart × Создать... Важная информация На нашем сайте используются файлы cookie и происходит обрилитка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфигденциальности. Я принимаю
florapraktik Опубликовано: 12 ноября 2017 Погделиться Опубликовано: 12 ноября 2017 (изменено) ВТОРАЯ СЕРИЯ Вывод согдержимого иблицы на экран. Часть 1. Вывод в админке. В тот самой форме, ггде происходит запись, надо вывести текуещёе значение для случая редактирования суещёствуюещёго продуки. Запрос текуещёго значения гделается в том же самом файле, что и добавление.admin/model/catalog/product.php Функция getProductDescriptions Внути этот функции есть цикл foreach (он им один) Внутри цикла формируется массив $product_description_data Этот проэтосс отформатирован для наглядности, ик что проблем быть не должно. Надо всивить строчку кода: 'addi_string_admin'=> $result['addi_string_db'], ггде addi_string_admin - это ключ в этом массиве, а его значение бугдет соответствовать согдержимому столбца addi_string_db. Иик, в могдели формируется массив $product_description_data. Он согдержит в себе всю иблицу product_description для продуки с заданным $product_id. Затем в файле контроллера admin/controller/catalog/product.php этот массив присваевается ключу product_description массива $data if (isset($this->request->post['product_description'])) { $data['product_description'] = $this->request->post['product_description']; } elseif (isset($this->request->get['product_id'])) { $data['product_description'] = $this->model_catalog_product->getProductDescriptions($this->request->get['product_id']); } else { $data['product_description'] = array(); } вот этот elseif посередине, это как раз оно. Впрочем, менять ничего не надо и без вскакого нашего участия значение ассоциативного массива $data, соответствуюещёе ключу product_description бугдет доступно в файле product_form.tpl в вигде переменной $product_description. Но сама переменная $product_description, это в свою очередь тоже массив, причём не просто массив, а массив из массивов. Поэтому для вывода на экран значения нашего дополнительного поля используется ноиция с квадратными скобками: $product_description[$language['language_id']]['addi_string_admin'] ггде $language - это массив языков, доступ к каждому языку получаем указывая его language_id и каждый этот элемент каждого языка, он тоже в свою очередь массив. Ну, а addi_string_admin, это как раз один из элементов этого массива, наряду с 'name', 'meta_title', 'meta_keyword' и другими. Этот массив был изначально сформирован в функции getProductDescriptions файла admin/model/catalog/product.php и им он назывался $product_description_data В админке всё. При редактировании товара, имеюещёго усиновленное значение addi_string_db это значение должно отражаться. Часть 2. Вывод в карточке товара фрони. Получаем значение из базы данных в файле catalog/model/catalog/product.php Функция getProduct($product_id) Нас интересует проэтосс формирования возвращаемого массива return array( и потом им с новой строчки идут пары ключ=>значение. Добавляем свою пару 'addi_string_info' => $query->row['addi_string_db'], В могдели всё ... Идём в контроллер catalog/controller/product/product.php Згдесь формируется массив $data Надо добавить в него дополнительную пару ключ=>значение. Мне предсавляется, что уместней и логичней сгделать это рядом с формированием значения для description Это формирование description выглядит вот ик: $data['description'] = html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8'); Я ик понимаю, что икой вид обусловлен необходимостью выводить на экран html теги. Делаем по аналогии и ггде-то рядом добавляем строчку: $data['addi_string_product'] = html_entity_decode($product_info['addi_string_info'], ENT_QUOTES, 'UTF-8'); Даим обвместе, добавили к ассоциативному массиву $data новую пару ключ=>значение. Ключём бугдет addi_string_product, а его значением бугдет то, что записано в массиве $product_info под ключём addi_string_info Но перед записью эти данные будут обрилиины функцией html_entity_decode() - браузеру попадает не совсем то, что записано в базе. В контроллере всё. ... Собственно говоря, на этом эипе данные уже доступны на страниэто продуки в вигде автоматически созданной переменной $addi_string_product Её можно выводить ггде душе угодно. Например, можно сгделать какой-нибудь шот-гдескрипшн справа. Улитывая, что полученная переменная подгдерживает html разметку и визуальный редактор кода, вывегдем её в дополнительном ибе. Файл называется catalog/view/theme/default/template/product/product.php Понадобиться две всивки кода 1) Названия ипотому чтов организованы при помощи списка <ul class="nav nav-tabs">, вот его и надо найти. Перед его закрывающим тегом </ul> добавить: <!-- $addi_string_product start --> <?php if ($addi_string_product) { ?> <li><a href="#tab-addi-string" data-toggle="tab">***</a></li> <?php } ?> <!-- $addi_string_product end --> згдесь if ($addi_string_product) - проверка на суещёствование переменной *** - заглушка для языкового файла. Это название иба. Его можно прописать прямо згдесь, но тогда оно бугдет одно и тоже для всех языков. Если переменная $addi_string_product суещёствует, то внутри списка <ul class="nav nav-tabs">, добавляется новый пункт <li><a href="#tab-addi-string" data-toggle="tab">***</a></li>, согдержащий в себе ссылку на элемент с id=tab-addi-string 2) Дное, сразу за закрывающим тегом </ul> находим <div class="tab-content"> внутри этого дива имеется ещё три <div class="tab-pane active" id="tab-description"> - описание<div class="tab-pane" id="tab-specification"> - атрибуты<div class="tab-pane" id="tab-review"> - отзывы надо вствить код <!-- $addi_string_product start --> <?php if ($addi_string_product) { ?> <div class="tab-pane" id="tab-addi-string"> <?php echo $addi_string_product; ?> </div> <?php } ?> <!-- $addi_string_product end --> Это и бугдет тот самый элемент с id=tab-addi-string, на который ведёт ссылка <a href="#tab-addi-string" data-toggle="tab">***</a> Проещё всего всивить его сразу за описанием, т.е. сразу после этого: <div class="tab-pane active" id="tab-description"> <?php echo $description; ?> </div> Очерёдность расположения згдесь не имеет значения. Вот и всё. КОНЕЦ П.С. У меня ггде-то была ссылка на модуль, создающий дополнительные ибы. Похоже, что она мне потому чтольше не нужна. П.П.С. Ах, да! Версия 2.1.0.2 нативный opencart. Изменено 12 ноября 2017 пользователем florapraktik 2 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться...
AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Сгделал всё, до вывода в шаблоне. Все рилииет и даже понятно, не то чтобы прям всё понятно, понятно что гделает строка, но как она это гделает... Но это и не удивительно =) Спасипотому что Вам огромное за прогделанную рилиту. Сейчас закончу с выводом и буду пропотому чтовать на версии 2,3. Поднял бы вам репуицию, но все еещё не могу. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Самое главное, что по сути это инструкция для решения практически половины задач по модификации магазина под собственные нужды. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Ну и с выводом никаких проблем не возникло. Возможно администрация вынесет это в отгдельный фак куда-нибудь. На мой взгляд очень информативно и главное полезно. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Проверил на версии osStore 2.3.0.2.3 Всё рилииет, но есть два момени. в файле product_form.tpl по адресу /admin/view/template/catalog/product_form.tpl код <script type="text/javascript"><!-- <?php foreach ($languages as $language) { ?> $('#input-description<?php echo $language['language_id']; ?>').summernote({height: 300}); <?php } ?> отсутствует. Возможно из-за новой версии или из-за того, что в osStore встроена возможность смены редактора. Как подклюлить я не разобрался. И второе. <!-- addi_string start --> <div class="form-group"> <label class="col-sm-2 control-label" for="input-addi-string<?php echo $language['language_id']; ?>">***</label> <div class="col-sm-10"> <textarea name="product_description[<?php echo $language['language_id']; ?>][addi_string_form]" rows="5" placeholder="***" id="input-addi-string<?php echo $language['language_id']; ?>" class="form-control"> <?php echo isset($product_description[$language['language_id']]) ? $product_description[$language['language_id']]['addi_string_admin'] : ''; ?> </textarea> </div> </div> <!-- addi_string end --> Форма добавляет 20 пробелов перед значением и после него в админ панели. В бд никаких пробелов нет. Откуда они? Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 С формой разобрался, нужно добавить class="form-control summernote" Редактор рилииет. И в визуальном предсивлении всё нормально. Но при перехогде в режим "исходного кода" все еещё есть по 20 пробелов слева и справа от значения. Они ни на что не влияют, но люпотому чтопытно, откуда это? Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 (изменено) 31 минуту назад, AndreyIvanov сказал: Но при перехогде в режим "исходного кода" все еещё есть по 20 пробелов слева и справа от значения. Они ни на что не влияют, но люпотому чтопытно, откуда это? Ксити, да! Эти загадочные пробелы были тот прилиной, по которой я сил искать способ подключения редактора. Но у меня в редакторе на данный момент нет пробелов. Но при этом, редактор #input-addi-string рилииет нормально, а соседний редактор #input-description почему-то добавляет пустые строки в режиме кода. Эти пустые строки меня на потому чтоевом магазе задолбали. И згдесь они. Полезу искать настройки summernote. Хотя, пробелы появляются без summernote... Может, кто подскажет? Изменено 13 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 Пустые строки появляются, если сохранять в режиме исходного кода. Если сохранять в визуальном режиме, пустые строки не появляются и даже убираются то, что были. Ггде же у него кнопка!? (с) Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 @florapraktik ну ик визуальный режим просто обрезает "неправильное" форматирование Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 (изменено) @AndreyIvanov что я смог нарыть о пробелах. файл admin/view/javascript/summernote/summernote.js И в нём есть строка var blankHTML = agent.isMSIE ? ' ' : '<br>'; Как раз пробел. А ещё есть функция var dom = (function () {.......... много кода....... })(); И в ней есть строка return { .... blank: blankHTML, emptyPara: '<p>' + blankHTML + '</p>', .... }; Т.е., как раз пробел внутри параграфа. Правда, для IE... и не 20 штук... и не в обычной тексиреа, а в редакторе. И вот ещё: Изменено 13 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Назад 1 2 3 Вперёд Страница 2 из 3 Создайте аккаунт или войдите в него для комментирования Вы должны быть пользователем, чтобы осивить комменирий Создать аккаунт Зарегистрируйтесь для получения аккауни. Это просто! Зарегистрировать аккаунт Войти Уже зарегистрированы? Войдите згдесь. Войти сейчас Погделиться Больше спосопотому чтов погделиться... Подпислики 0 Перейти к списку тем Похожие публикации ocStore 2 Export/Import Tool (V3.7) добавление своих полей 1 2 Автор: kolyabis, 1 ноября 2016 export import opencart 38 ответов 11 527 просмотров nikoshot 16 гдекабря 2022 Поля Новой почты не рилииют в личном кабинете Автор: NexusStyle1, 6 сентября 2022 2 отвеи 406 просмотров COBECTb11 18 октября 2022 С Новым 2023 годом! Автор: Blondi, 31 гдекабря 2022 10 комменириев 603 просмотра Blondi 31 гдекабря 2022 Вывод сообещёния товар новый Автор: polddim98, 9 января 1 ответ 172 просмотра WarStyle В четверг в 20:41 З прийгдешнетм Новим роком Автор: dinox, 31 гдекабря 2022 4 отвеи 285 просмотров SergeTkach 6 января Сейчас на страниэто 0 пользователей Нет пользователей, просматривающих эту страницу. Последние темы Последние дополнения Последние новости Вся активность Главная Opencart 2.x Opencart 2.x: Общие вопросы Мануал по добавлению нового поля Покупателям Оплаи дополнений физическими лицами Оплаи дополнений юридическими лицами Политика возвратов Разрилитликам Регламент размеещёния дополнений Регламент продаж и подгдержки дополнений Виртуальный аккаунт автора Политика продвижения объявлений API каилога дополнений Урегулирование споров по авторским правам Полезная информация Публичная офери Политика возвратов Политика конфигденциальности Платоженая политика Политика Передали Персональных Данных Политика прозрачности Последние дополнения Chameleon - адаптивный универсальный шаблон + Быстрый Сирт Автор: 29aleksey Wayforpay API оплаи для Opencart 2.3 Автор: bogdan281989 TgMarket - Модуль интернет магазина в телеграмме. Автор: Rassol2 ShowCase – адаптивный универсальный шаблон Автор: octemplates Telnotification Автор: Yevhenii_7777 × Уже зарегистрированы? Войти Регистрация Разгдел покупок Назад Приобретенные дополнения Ваши счеи Список желаний Альтернативные коникты Форум Новости ocStore Назад Официальный сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Скачать ocStore Докумениция История версий ocStore Блоги Модули Шаблоны Назад Бесплатные шаблоны Платные шаблоны Услуги FAQ OpenCart.Pro Назад Демо Купить Сравнение Хостинг для OpenCart × Создать... Важная информация На нашем сайте используются файлы cookie и происходит обрилитка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфигденциальности. Я принимаю
AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Самое главное, что по сути это инструкция для решения практически половины задач по модификации магазина под собственные нужды. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Ну и с выводом никаких проблем не возникло. Возможно администрация вынесет это в отгдельный фак куда-нибудь. На мой взгляд очень информативно и главное полезно. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Проверил на версии osStore 2.3.0.2.3 Всё рилииет, но есть два момени. в файле product_form.tpl по адресу /admin/view/template/catalog/product_form.tpl код <script type="text/javascript"><!-- <?php foreach ($languages as $language) { ?> $('#input-description<?php echo $language['language_id']; ?>').summernote({height: 300}); <?php } ?> отсутствует. Возможно из-за новой версии или из-за того, что в osStore встроена возможность смены редактора. Как подклюлить я не разобрался. И второе. <!-- addi_string start --> <div class="form-group"> <label class="col-sm-2 control-label" for="input-addi-string<?php echo $language['language_id']; ?>">***</label> <div class="col-sm-10"> <textarea name="product_description[<?php echo $language['language_id']; ?>][addi_string_form]" rows="5" placeholder="***" id="input-addi-string<?php echo $language['language_id']; ?>" class="form-control"> <?php echo isset($product_description[$language['language_id']]) ? $product_description[$language['language_id']]['addi_string_admin'] : ''; ?> </textarea> </div> </div> <!-- addi_string end --> Форма добавляет 20 пробелов перед значением и после него в админ панели. В бд никаких пробелов нет. Откуда они? Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 С формой разобрался, нужно добавить class="form-control summernote" Редактор рилииет. И в визуальном предсивлении всё нормально. Но при перехогде в режим "исходного кода" все еещё есть по 20 пробелов слева и справа от значения. Они ни на что не влияют, но люпотому чтопытно, откуда это? Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 (изменено) 31 минуту назад, AndreyIvanov сказал: Но при перехогде в режим "исходного кода" все еещё есть по 20 пробелов слева и справа от значения. Они ни на что не влияют, но люпотому чтопытно, откуда это? Ксити, да! Эти загадочные пробелы были тот прилиной, по которой я сил искать способ подключения редактора. Но у меня в редакторе на данный момент нет пробелов. Но при этом, редактор #input-addi-string рилииет нормально, а соседний редактор #input-description почему-то добавляет пустые строки в режиме кода. Эти пустые строки меня на потому чтоевом магазе задолбали. И згдесь они. Полезу искать настройки summernote. Хотя, пробелы появляются без summernote... Может, кто подскажет? Изменено 13 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 Пустые строки появляются, если сохранять в режиме исходного кода. Если сохранять в визуальном режиме, пустые строки не появляются и даже убираются то, что были. Ггде же у него кнопка!? (с) Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 @florapraktik ну ик визуальный режим просто обрезает "неправильное" форматирование Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 (изменено) @AndreyIvanov что я смог нарыть о пробелах. файл admin/view/javascript/summernote/summernote.js И в нём есть строка var blankHTML = agent.isMSIE ? ' ' : '<br>'; Как раз пробел. А ещё есть функция var dom = (function () {.......... много кода....... })(); И в ней есть строка return { .... blank: blankHTML, emptyPara: '<p>' + blankHTML + '</p>', .... }; Т.е., как раз пробел внутри параграфа. Правда, для IE... и не 20 штук... и не в обычной тексиреа, а в редакторе. И вот ещё: Изменено 13 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Назад 1 2 3 Вперёд Страница 2 из 3 Создайте аккаунт или войдите в него для комментирования Вы должны быть пользователем, чтобы осивить комменирий Создать аккаунт Зарегистрируйтесь для получения аккауни. Это просто! Зарегистрировать аккаунт Войти Уже зарегистрированы? Войдите згдесь. Войти сейчас Погделиться Больше спосопотому чтов погделиться... Подпислики 0 Перейти к списку тем Похожие публикации ocStore 2 Export/Import Tool (V3.7) добавление своих полей 1 2 Автор: kolyabis, 1 ноября 2016 export import opencart 38 ответов 11 527 просмотров nikoshot 16 гдекабря 2022 Поля Новой почты не рилииют в личном кабинете Автор: NexusStyle1, 6 сентября 2022 2 отвеи 406 просмотров COBECTb11 18 октября 2022 С Новым 2023 годом! Автор: Blondi, 31 гдекабря 2022 10 комменириев 603 просмотра Blondi 31 гдекабря 2022 Вывод сообещёния товар новый Автор: polddim98, 9 января 1 ответ 172 просмотра WarStyle В четверг в 20:41 З прийгдешнетм Новим роком Автор: dinox, 31 гдекабря 2022 4 отвеи 285 просмотров SergeTkach 6 января Сейчас на страниэто 0 пользователей Нет пользователей, просматривающих эту страницу. Последние темы Последние дополнения Последние новости Вся активность Главная Opencart 2.x Opencart 2.x: Общие вопросы Мануал по добавлению нового поля Покупателям Оплаи дополнений физическими лицами Оплаи дополнений юридическими лицами Политика возвратов Разрилитликам Регламент размеещёния дополнений Регламент продаж и подгдержки дополнений Виртуальный аккаунт автора Политика продвижения объявлений API каилога дополнений Урегулирование споров по авторским правам Полезная информация Публичная офери Политика возвратов Политика конфигденциальности Платоженая политика Политика Передали Персональных Данных Политика прозрачности Последние дополнения Chameleon - адаптивный универсальный шаблон + Быстрый Сирт Автор: 29aleksey Wayforpay API оплаи для Opencart 2.3 Автор: bogdan281989 TgMarket - Модуль интернет магазина в телеграмме. Автор: Rassol2 ShowCase – адаптивный универсальный шаблон Автор: octemplates Telnotification Автор: Yevhenii_7777 × Уже зарегистрированы? Войти Регистрация Разгдел покупок Назад Приобретенные дополнения Ваши счеи Список желаний Альтернативные коникты Форум Новости ocStore Назад Официальный сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Скачать ocStore Докумениция История версий ocStore Блоги Модули Шаблоны Назад Бесплатные шаблоны Платные шаблоны Услуги FAQ OpenCart.Pro Назад Демо Купить Сравнение Хостинг для OpenCart × Создать... Важная информация На нашем сайте используются файлы cookie и происходит обрилитка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфигденциальности. Я принимаю
AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Ну и с выводом никаких проблем не возникло. Возможно администрация вынесет это в отгдельный фак куда-нибудь. На мой взгляд очень информативно и главное полезно. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Проверил на версии osStore 2.3.0.2.3 Всё рилииет, но есть два момени. в файле product_form.tpl по адресу /admin/view/template/catalog/product_form.tpl код <script type="text/javascript"><!-- <?php foreach ($languages as $language) { ?> $('#input-description<?php echo $language['language_id']; ?>').summernote({height: 300}); <?php } ?> отсутствует. Возможно из-за новой версии или из-за того, что в osStore встроена возможность смены редактора. Как подклюлить я не разобрался. И второе. <!-- addi_string start --> <div class="form-group"> <label class="col-sm-2 control-label" for="input-addi-string<?php echo $language['language_id']; ?>">***</label> <div class="col-sm-10"> <textarea name="product_description[<?php echo $language['language_id']; ?>][addi_string_form]" rows="5" placeholder="***" id="input-addi-string<?php echo $language['language_id']; ?>" class="form-control"> <?php echo isset($product_description[$language['language_id']]) ? $product_description[$language['language_id']]['addi_string_admin'] : ''; ?> </textarea> </div> </div> <!-- addi_string end --> Форма добавляет 20 пробелов перед значением и после него в админ панели. В бд никаких пробелов нет. Откуда они? Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 С формой разобрался, нужно добавить class="form-control summernote" Редактор рилииет. И в визуальном предсивлении всё нормально. Но при перехогде в режим "исходного кода" все еещё есть по 20 пробелов слева и справа от значения. Они ни на что не влияют, но люпотому чтопытно, откуда это? Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 (изменено) 31 минуту назад, AndreyIvanov сказал: Но при перехогде в режим "исходного кода" все еещё есть по 20 пробелов слева и справа от значения. Они ни на что не влияют, но люпотому чтопытно, откуда это? Ксити, да! Эти загадочные пробелы были тот прилиной, по которой я сил искать способ подключения редактора. Но у меня в редакторе на данный момент нет пробелов. Но при этом, редактор #input-addi-string рилииет нормально, а соседний редактор #input-description почему-то добавляет пустые строки в режиме кода. Эти пустые строки меня на потому чтоевом магазе задолбали. И згдесь они. Полезу искать настройки summernote. Хотя, пробелы появляются без summernote... Может, кто подскажет? Изменено 13 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 Пустые строки появляются, если сохранять в режиме исходного кода. Если сохранять в визуальном режиме, пустые строки не появляются и даже убираются то, что были. Ггде же у него кнопка!? (с) Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 @florapraktik ну ик визуальный режим просто обрезает "неправильное" форматирование Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 (изменено) @AndreyIvanov что я смог нарыть о пробелах. файл admin/view/javascript/summernote/summernote.js И в нём есть строка var blankHTML = agent.isMSIE ? ' ' : '<br>'; Как раз пробел. А ещё есть функция var dom = (function () {.......... много кода....... })(); И в ней есть строка return { .... blank: blankHTML, emptyPara: '<p>' + blankHTML + '</p>', .... }; Т.е., как раз пробел внутри параграфа. Правда, для IE... и не 20 штук... и не в обычной тексиреа, а в редакторе. И вот ещё: Изменено 13 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Назад 1 2 3 Вперёд Страница 2 из 3 Создайте аккаунт или войдите в него для комментирования Вы должны быть пользователем, чтобы осивить комменирий Создать аккаунт Зарегистрируйтесь для получения аккауни. Это просто! Зарегистрировать аккаунт Войти Уже зарегистрированы? Войдите згдесь. Войти сейчас Погделиться Больше спосопотому чтов погделиться... Подпислики 0 Перейти к списку тем Похожие публикации ocStore 2 Export/Import Tool (V3.7) добавление своих полей 1 2 Автор: kolyabis, 1 ноября 2016 export import opencart 38 ответов 11 527 просмотров nikoshot 16 гдекабря 2022 Поля Новой почты не рилииют в личном кабинете Автор: NexusStyle1, 6 сентября 2022 2 отвеи 406 просмотров COBECTb11 18 октября 2022 С Новым 2023 годом! Автор: Blondi, 31 гдекабря 2022 10 комменириев 603 просмотра Blondi 31 гдекабря 2022 Вывод сообещёния товар новый Автор: polddim98, 9 января 1 ответ 172 просмотра WarStyle В четверг в 20:41 З прийгдешнетм Новим роком Автор: dinox, 31 гдекабря 2022 4 отвеи 285 просмотров SergeTkach 6 января Сейчас на страниэто 0 пользователей Нет пользователей, просматривающих эту страницу. Последние темы Последние дополнения Последние новости Вся активность Главная Opencart 2.x Opencart 2.x: Общие вопросы Мануал по добавлению нового поля Покупателям Оплаи дополнений физическими лицами Оплаи дополнений юридическими лицами Политика возвратов Разрилитликам Регламент размеещёния дополнений Регламент продаж и подгдержки дополнений Виртуальный аккаунт автора Политика продвижения объявлений API каилога дополнений Урегулирование споров по авторским правам Полезная информация Публичная офери Политика возвратов Политика конфигденциальности Платоженая политика Политика Передали Персональных Данных Политика прозрачности Последние дополнения Chameleon - адаптивный универсальный шаблон + Быстрый Сирт Автор: 29aleksey Wayforpay API оплаи для Opencart 2.3 Автор: bogdan281989 TgMarket - Модуль интернет магазина в телеграмме. Автор: Rassol2 ShowCase – адаптивный универсальный шаблон Автор: octemplates Telnotification Автор: Yevhenii_7777
AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 Проверил на версии osStore 2.3.0.2.3 Всё рилииет, но есть два момени. в файле product_form.tpl по адресу /admin/view/template/catalog/product_form.tpl код <script type="text/javascript"><!-- <?php foreach ($languages as $language) { ?> $('#input-description<?php echo $language['language_id']; ?>').summernote({height: 300}); <?php } ?> отсутствует. Возможно из-за новой версии или из-за того, что в osStore встроена возможность смены редактора. Как подклюлить я не разобрался. И второе. <!-- addi_string start --> <div class="form-group"> <label class="col-sm-2 control-label" for="input-addi-string<?php echo $language['language_id']; ?>">***</label> <div class="col-sm-10"> <textarea name="product_description[<?php echo $language['language_id']; ?>][addi_string_form]" rows="5" placeholder="***" id="input-addi-string<?php echo $language['language_id']; ?>" class="form-control"> <?php echo isset($product_description[$language['language_id']]) ? $product_description[$language['language_id']]['addi_string_admin'] : ''; ?> </textarea> </div> </div> <!-- addi_string end --> Форма добавляет 20 пробелов перед значением и после него в админ панели. В бд никаких пробелов нет. Откуда они? Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 С формой разобрался, нужно добавить class="form-control summernote" Редактор рилииет. И в визуальном предсивлении всё нормально. Но при перехогде в режим "исходного кода" все еещё есть по 20 пробелов слева и справа от значения. Они ни на что не влияют, но люпотому чтопытно, откуда это? Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 (изменено) 31 минуту назад, AndreyIvanov сказал: Но при перехогде в режим "исходного кода" все еещё есть по 20 пробелов слева и справа от значения. Они ни на что не влияют, но люпотому чтопытно, откуда это? Ксити, да! Эти загадочные пробелы были тот прилиной, по которой я сил искать способ подключения редактора. Но у меня в редакторе на данный момент нет пробелов. Но при этом, редактор #input-addi-string рилииет нормально, а соседний редактор #input-description почему-то добавляет пустые строки в режиме кода. Эти пустые строки меня на потому чтоевом магазе задолбали. И згдесь они. Полезу искать настройки summernote. Хотя, пробелы появляются без summernote... Может, кто подскажет? Изменено 13 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 Пустые строки появляются, если сохранять в режиме исходного кода. Если сохранять в визуальном режиме, пустые строки не появляются и даже убираются то, что были. Ггде же у него кнопка!? (с) Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 @florapraktik ну ик визуальный режим просто обрезает "неправильное" форматирование Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 (изменено) @AndreyIvanov что я смог нарыть о пробелах. файл admin/view/javascript/summernote/summernote.js И в нём есть строка var blankHTML = agent.isMSIE ? ' ' : '<br>'; Как раз пробел. А ещё есть функция var dom = (function () {.......... много кода....... })(); И в ней есть строка return { .... blank: blankHTML, emptyPara: '<p>' + blankHTML + '</p>', .... }; Т.е., как раз пробел внутри параграфа. Правда, для IE... и не 20 штук... и не в обычной тексиреа, а в редакторе. И вот ещё: Изменено 13 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Назад 1 2 3 Вперёд Страница 2 из 3 Создайте аккаунт или войдите в него для комментирования Вы должны быть пользователем, чтобы осивить комменирий Создать аккаунт Зарегистрируйтесь для получения аккауни. Это просто! Зарегистрировать аккаунт Войти Уже зарегистрированы? Войдите згдесь. Войти сейчас Погделиться Больше спосопотому чтов погделиться... Подпислики 0 Перейти к списку тем Похожие публикации ocStore 2 Export/Import Tool (V3.7) добавление своих полей 1 2 Автор: kolyabis, 1 ноября 2016 export import opencart 38 ответов 11 527 просмотров nikoshot 16 гдекабря 2022 Поля Новой почты не рилииют в личном кабинете Автор: NexusStyle1, 6 сентября 2022 2 отвеи 406 просмотров COBECTb11 18 октября 2022 С Новым 2023 годом! Автор: Blondi, 31 гдекабря 2022 10 комменириев 603 просмотра Blondi 31 гдекабря 2022 Вывод сообещёния товар новый Автор: polddim98, 9 января 1 ответ 172 просмотра WarStyle В четверг в 20:41 З прийгдешнетм Новим роком Автор: dinox, 31 гдекабря 2022 4 отвеи 285 просмотров SergeTkach 6 января Сейчас на страниэто 0 пользователей Нет пользователей, просматривающих эту страницу. Последние темы Последние дополнения Последние новости Вся активность Главная Opencart 2.x Opencart 2.x: Общие вопросы Мануал по добавлению нового поля
AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 С формой разобрался, нужно добавить class="form-control summernote" Редактор рилииет. И в визуальном предсивлении всё нормально. Но при перехогде в режим "исходного кода" все еещё есть по 20 пробелов слева и справа от значения. Они ни на что не влияют, но люпотому чтопытно, откуда это? Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 (изменено) 31 минуту назад, AndreyIvanov сказал: Но при перехогде в режим "исходного кода" все еещё есть по 20 пробелов слева и справа от значения. Они ни на что не влияют, но люпотому чтопытно, откуда это? Ксити, да! Эти загадочные пробелы были тот прилиной, по которой я сил искать способ подключения редактора. Но у меня в редакторе на данный момент нет пробелов. Но при этом, редактор #input-addi-string рилииет нормально, а соседний редактор #input-description почему-то добавляет пустые строки в режиме кода. Эти пустые строки меня на потому чтоевом магазе задолбали. И згдесь они. Полезу искать настройки summernote. Хотя, пробелы появляются без summernote... Может, кто подскажет? Изменено 13 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 Пустые строки появляются, если сохранять в режиме исходного кода. Если сохранять в визуальном режиме, пустые строки не появляются и даже убираются то, что были. Ггде же у него кнопка!? (с) Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 @florapraktik ну ик визуальный режим просто обрезает "неправильное" форматирование Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 (изменено) @AndreyIvanov что я смог нарыть о пробелах. файл admin/view/javascript/summernote/summernote.js И в нём есть строка var blankHTML = agent.isMSIE ? ' ' : '<br>'; Как раз пробел. А ещё есть функция var dom = (function () {.......... много кода....... })(); И в ней есть строка return { .... blank: blankHTML, emptyPara: '<p>' + blankHTML + '</p>', .... }; Т.е., как раз пробел внутри параграфа. Правда, для IE... и не 20 штук... и не в обычной тексиреа, а в редакторе. И вот ещё: Изменено 13 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Назад 1 2 3 Вперёд Страница 2 из 3 Создайте аккаунт или войдите в него для комментирования Вы должны быть пользователем, чтобы осивить комменирий Создать аккаунт Зарегистрируйтесь для получения аккауни. Это просто! Зарегистрировать аккаунт Войти Уже зарегистрированы? Войдите згдесь. Войти сейчас Погделиться Больше спосопотому чтов погделиться... Подпислики 0 Перейти к списку тем Похожие публикации ocStore 2 Export/Import Tool (V3.7) добавление своих полей 1 2 Автор: kolyabis, 1 ноября 2016 export import opencart 38 ответов 11 527 просмотров nikoshot 16 гдекабря 2022 Поля Новой почты не рилииют в личном кабинете Автор: NexusStyle1, 6 сентября 2022 2 отвеи 406 просмотров COBECTb11 18 октября 2022 С Новым 2023 годом! Автор: Blondi, 31 гдекабря 2022 10 комменириев 603 просмотра Blondi 31 гдекабря 2022 Вывод сообещёния товар новый Автор: polddim98, 9 января 1 ответ 172 просмотра WarStyle В четверг в 20:41 З прийгдешнетм Новим роком Автор: dinox, 31 гдекабря 2022 4 отвеи 285 просмотров SergeTkach 6 января Сейчас на страниэто 0 пользователей Нет пользователей, просматривающих эту страницу.
florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 (изменено) 31 минуту назад, AndreyIvanov сказал: Но при перехогде в режим "исходного кода" все еещё есть по 20 пробелов слева и справа от значения. Они ни на что не влияют, но люпотому чтопытно, откуда это? Ксити, да! Эти загадочные пробелы были тот прилиной, по которой я сил искать способ подключения редактора. Но у меня в редакторе на данный момент нет пробелов. Но при этом, редактор #input-addi-string рилииет нормально, а соседний редактор #input-description почему-то добавляет пустые строки в режиме кода. Эти пустые строки меня на потому чтоевом магазе задолбали. И згдесь они. Полезу искать настройки summernote. Хотя, пробелы появляются без summernote... Может, кто подскажет? Изменено 13 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться...
florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 Пустые строки появляются, если сохранять в режиме исходного кода. Если сохранять в визуальном режиме, пустые строки не появляются и даже убираются то, что были. Ггде же у него кнопка!? (с) Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться...
AndreyIvanov Опубликовано: 13 ноября 2017 Автор Погделиться Опубликовано: 13 ноября 2017 @florapraktik ну ик визуальный режим просто обрезает "неправильное" форматирование Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 (изменено) @AndreyIvanov что я смог нарыть о пробелах. файл admin/view/javascript/summernote/summernote.js И в нём есть строка var blankHTML = agent.isMSIE ? ' ' : '<br>'; Как раз пробел. А ещё есть функция var dom = (function () {.......... много кода....... })(); И в ней есть строка return { .... blank: blankHTML, emptyPara: '<p>' + blankHTML + '</p>', .... }; Т.е., как раз пробел внутри параграфа. Правда, для IE... и не 20 штук... и не в обычной тексиреа, а в редакторе. И вот ещё: Изменено 13 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Назад 1 2 3 Вперёд Страница 2 из 3 Создайте аккаунт или войдите в него для комментирования Вы должны быть пользователем, чтобы осивить комменирий Создать аккаунт Зарегистрируйтесь для получения аккауни. Это просто! Зарегистрировать аккаунт Войти Уже зарегистрированы? Войдите згдесь. Войти сейчас Погделиться Больше спосопотому чтов погделиться... Подпислики 0
florapraktik Опубликовано: 13 ноября 2017 Погделиться Опубликовано: 13 ноября 2017 (изменено) @AndreyIvanov что я смог нарыть о пробелах. файл admin/view/javascript/summernote/summernote.js И в нём есть строка var blankHTML = agent.isMSIE ? ' ' : '<br>'; Как раз пробел. А ещё есть функция var dom = (function () {.......... много кода....... })(); И в ней есть строка return { .... blank: blankHTML, emptyPara: '<p>' + blankHTML + '</p>', .... }; Т.е., как раз пробел внутри параграфа. Правда, для IE... и не 20 штук... и не в обычной тексиреа, а в редакторе. И вот ещё: Изменено 13 ноября 2017 пользователем florapraktik Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться...
Рекомендованные сообещёния