<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Форум ReadyScript &mdash; Как добавить поле товару или любому другому объекту в ReadyScript?]]></title>
		<link>https://forum.readyscript.ru/topic/287/kak-dobavit-pole-tovaru-ili-lyubomu-drugomu-obektu-v-readyscript/</link>
		<atom:link href="https://forum.readyscript.ru/feed/rss/topic/287/" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Как добавить поле товару или любому другому объекту в ReadyScript?».]]></description>
		<lastBuildDate>Fri, 13 Mar 2020 08:57:52 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Как добавить поле товару или любому другому объекту в ReadyScript?]]></title>
			<link>https://forum.readyscript.ru/post/11022/#p11022</link>
			<description><![CDATA[<p>Подскажите пожалуйста<br />Модуль если натравить нужно не на orm/файл, а на подкаталог<br />\modules\catalog\model\orm\property\_имя_файла<br />Ни в каких вариациях не подхватываются поля...</p>]]></description>
			<author><![CDATA[null@example.com (Владимир)]]></author>
			<pubDate>Fri, 13 Mar 2020 08:57:52 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/11022/#p11022</guid>
		</item>
		<item>
			<title><![CDATA[Re: Как добавить поле товару или любому другому объекту в ReadyScript?]]></title>
			<link>https://forum.readyscript.ru/post/10180/#p10180</link>
			<description><![CDATA[<p>Стандартно, при загрузке jpg файлов приходит mime тип - image/jpeg<br /><a href="https://stackoverflow.com/questions/33692835/is-the-mime-type-image-jpg-the-same-as-image-jpeg">https://stackoverflow.com/questions/336 … image-jpeg</a></p>]]></description>
			<author><![CDATA[null@example.com (admin)]]></author>
			<pubDate>Thu, 11 Jul 2019 09:09:37 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/10180/#p10180</guid>
		</item>
		<item>
			<title><![CDATA[Re: Как добавить поле товару или любому другому объекту в ReadyScript?]]></title>
			<link>https://forum.readyscript.ru/post/10178/#p10178</link>
			<description><![CDATA[<div class="codebox"><pre><code>&#039;is_root&#039; =&gt; new OrmType\Image(array(
       &#039;maxLength&#039; =&gt; &#039;255&#039;,
       &#039;max_file_size&#039; =&gt; 10000000,
       &#039;allow_file_types&#039; =&gt; array(&#039;image/pjpeg&#039;, &#039;image/jpeg&#039;, &#039;image/png&#039;, &#039;image/gif&#039;),
       &#039;description&#039; =&gt; &#039;Картинка&#039;,
)),</code></pre></div><p>Может вместо image/pjpeg -&gt; image/jpg ?</p>]]></description>
			<author><![CDATA[null@example.com (Бутаков)]]></author>
			<pubDate>Thu, 11 Jul 2019 08:44:01 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/10178/#p10178</guid>
		</item>
		<item>
			<title><![CDATA[Re: Как добавить поле товару или любому другому объекту в ReadyScript?]]></title>
			<link>https://forum.readyscript.ru/post/9008/#p9008</link>
			<description><![CDATA[<p>Очень жаль, было бы очень полезно менять порядок полей в форме</p>]]></description>
			<author><![CDATA[null@example.com (Максим)]]></author>
			<pubDate>Sat, 04 Aug 2018 09:58:54 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/9008/#p9008</guid>
		</item>
		<item>
			<title><![CDATA[Re: Как добавить поле товару или любому другому объекту в ReadyScript?]]></title>
			<link>https://forum.readyscript.ru/post/3007/#p3007</link>
			<description><![CDATA[<p>Никак можно либо в конец. Либо в отдельную вкладку.</p>]]></description>
			<author><![CDATA[null@example.com (Закусило Александр)]]></author>
			<pubDate>Mon, 11 Apr 2016 07:13:39 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/3007/#p3007</guid>
		</item>
		<item>
			<title><![CDATA[Re: Как добавить поле товару или любому другому объекту в ReadyScript?]]></title>
			<link>https://forum.readyscript.ru/post/3005/#p3005</link>
			<description><![CDATA[<p>Спасибо за урок все получилось, но остался один вапросик. Скажи как при редактировании разместить новое поле между &quot;краткое поисание&quot; и &quot;описание&quot;? Потому что сейчас оно появилось в самом конце.</p>]]></description>
			<author><![CDATA[null@example.com (Илья)]]></author>
			<pubDate>Fri, 08 Apr 2016 18:45:54 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/3005/#p3005</guid>
		</item>
		<item>
			<title><![CDATA[Re: Как добавить поле товару или любому другому объекту в ReadyScript?]]></title>
			<link>https://forum.readyscript.ru/post/2846/#p2846</link>
			<description><![CDATA[<p>Сделал видеоурок на эту тему:<br /><a href="https://www.youtube.com/watch?v=KoF2IyGPj9U">https://www.youtube.com/watch?v=KoF2IyGPj9U</a></p>]]></description>
			<author><![CDATA[null@example.com (Закусило Александр)]]></author>
			<pubDate>Thu, 17 Mar 2016 15:07:21 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/2846/#p2846</guid>
		</item>
		<item>
			<title><![CDATA[Re: Как добавить поле товару или любому другому объекту в ReadyScript?]]></title>
			<link>https://forum.readyscript.ru/post/1004/#p1004</link>
			<description><![CDATA[<p>Прошу прощения! Всё верно.</p><p>Я подправил первый пост. Сейчас правильно.<br />Отсутствовала запись:<br /></p><div class="codebox"><pre><code>use \RS\Orm\Type as OrmType;</code></pre></div><p>После указания namespace</p>]]></description>
			<author><![CDATA[null@example.com (Александр)]]></author>
			<pubDate>Tue, 10 Mar 2015 08:18:50 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/1004/#p1004</guid>
		</item>
		<item>
			<title><![CDATA[Re: Как добавить поле товару или любому другому объекту в ReadyScript?]]></title>
			<link>https://forum.readyscript.ru/post/1003/#p1003</link>
			<description><![CDATA[<p>Включил отображение ошибок, вывело: <br />Fatal error: Class &#039;Custom\Config\OrmType\Integer&#039; not found in Z:\home\test1.ru\www\modules\custom\config\handlers.inc.php on line 25<br />Поменял строку:<br />&#039;is_root&#039; =&gt; new OrmType\Integer(array<br />на:<br />&#039;is_root&#039; =&gt; new \RS\Orm\Type\Integer(array</p><p>Переустановил модуль и все получилось, спасибо большое за помощь.</p>]]></description>
			<author><![CDATA[null@example.com (Дмитрий)]]></author>
			<pubDate>Mon, 09 Mar 2015 21:12:24 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/1003/#p1003</guid>
		</item>
		<item>
			<title><![CDATA[Re: Как добавить поле товару или любому другому объекту в ReadyScript?]]></title>
			<link>https://forum.readyscript.ru/post/1002/#p1002</link>
			<description><![CDATA[<p>Надо увидеть точный текст ошибки, чтобы сказать в чем причина ошибки.&nbsp; ( по скриншоту единственное что видно - это то что стили не подгрузились )<br />Включите display_errors в настройках PHP, можно с помощью .htaccess.&nbsp; ( <a href="http://readyscript.ru/faq/#faq-errors">http://readyscript.ru/faq/#faq-errors</a> )<br />И посмотрите на исходный код страницы в браузере. В конце страницы наверняка будет надпись Fatal error..........</p>]]></description>
			<author><![CDATA[null@example.com (admin)]]></author>
			<pubDate>Mon, 09 Mar 2015 16:33:53 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/1002/#p1002</guid>
		</item>
		<item>
			<title><![CDATA[Re: Как добавить поле товару или любому другому объекту в ReadyScript?]]></title>
			<link>https://forum.readyscript.ru/post/1001/#p1001</link>
			<description><![CDATA[<p>Добрый день, после включения модуля во вкладке &quot;Модули&quot; или же после обновления БД все слетает. Админка вообще не работает, а сайт выглядит следующим образом: <span class="postimg"><img src="http://screenshot.ru/upload/images/2015/03/09/13b3915.jpg" alt="http://screenshot.ru/upload/images/2015/03/09/13b3915.jpg" /></span> <br />Все делал согласно инструкции, даже пробовал полностью все копировать без изменений. <br />Может ли быть проблема связана с тем, что нет файла установки &quot;install.inc&quot; ? Просто уже не знаю в какую сторону копать. Заранее спасибо.</p>]]></description>
			<author><![CDATA[null@example.com (Дмитрий)]]></author>
			<pubDate>Mon, 09 Mar 2015 12:39:19 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/1001/#p1001</guid>
		</item>
		<item>
			<title><![CDATA[Как добавить поле товару или любому другому объекту в ReadyScript?]]></title>
			<link>https://forum.readyscript.ru/post/971/#p971</link>
			<description><![CDATA[<p>Как добавить поле товару или любому другому объекту ORM(таблица в базе) в ReadyScript?</p><p>Иногда народ интересуется как быстро добавить поле к товару. Например нужна какая-либо дополнительная галочка, или ещё текстовое поле, или картинка для загрузки. В нашей системе всё просто.<br />Если у Вас есть модуль дополнительный свой можно сделать в нём дополнительные действия, но я буду рассматривать ситуацию когда дополнительного модуля у вас нет и Вы первый раз программируете для RS.<br />Всё просто.<br />Рассмотрим ситуацию, когда нам нужно добавить галочку в карточку товара.</p><br /><p>Создаём свою папочку в modules с именем Вашего модуля на латинском языке. Например - custom.</p><p>Обратите внимание, что в Вашем классе <strong>namespace</strong> должен соответствовать имени папки в которой лежит. В нашем случае это <strong>custom</strong>. </p><p>Создаём внутри custom папку config. И добавляем в config файл <strong>file.inc.php </strong>.<br />Этот файл отвечает за конфигурацию Вашего модуля.<br />Вставляем туда следующее содержимое:<br /></p><div class="codebox"><pre><code>&lt;?php
namespace Custom\Config;
use \RS\Orm\Type;

/**
* Конфигурационный файл модуля
*/
class File extends \RS\Orm\ConfigObject
{
    
      
}</code></pre></div><p>И сохраняем его.<br />Теперь создаём файл со сведениями о модуле, которые отвечаю за имя и описание модуля. А именно файл с именем <strong>module.xml</strong> в той же папке. Вот его содержимое<br /></p><div class="codebox"><pre><code>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;config&gt;
    &lt;defaultValues&gt;    
        &lt;name multilanguage=&quot;true&quot;&gt;Имя Вашего дополнительного модуля&lt;/name&gt;
        &lt;description multilanguage=&quot;true&quot;&gt;Модуль с дополнительным функционалом&lt;/description&gt;        
        &lt;version&gt;1.0.0.0&lt;/version&gt;
        &lt;author&gt;ВАШЕ авторские имя&lt;/author&gt;        
    &lt;/defaultValues&gt;
&lt;/config&gt;</code></pre></div><p>Далее в этой же папке config создаём другой файл с именем <strong>handlers.inc.php</strong><br />Этот файл отвечает за добавление полей, навешивания на события, прописывания роутов и др. Подробнее листайте <a href="http://readyscript.ru/dev-manual/">документацию для разработчиков</a>.</p><p>Следующий шаг, это то что нам нужно в этом файле указать хук который будет перехвачен при инициализации объекта товара(строка записи из таблицы переводится в ORM объект).<br />Расширение объекта ORM(таблицы) товара производится через хуки. <br />Идём на страницу с <a href="http://readyscript.ru/dev-manual/dev_hooks.html">описанием хуков системы</a>. Читаем и спускаемся ниже к таблице где перечислены Все хуки системы.</p><p>В нашем случаем нам нужен хук:<br /><strong>orm.init.КОРОТКОЕ_ИМЯ_ORM_ОБЪЕКТА</strong>&nbsp; </p><p>где КОРОТКОЕ_ИМЯ_ORM_ОБЪЕКТА будет равно <strong>catalog-product</strong><br />Т.к. файл с ORM объектом у нас находится в </p><p>/modules/<strong>catalog</strong>/model/orm/<strong>product</strong>.inc.php</p><p>то короткое имя у нас будет: </p><p><strong>catalog-product</strong> (название папки модуля на латинице-имя файла ORM объекта)</p><p>Полное же имя хука будет orm.init.<strong>catalog-product</strong></p><p>Почему так? Поймёте из документации по хукам!</p><p>В файл handlers вставляем следующее содержимое, для добавления поля с именем <strong>is_root</strong> в таблицу БД:</p><div class="codebox"><pre><code>&lt;?php
namespace Custom\Config;
use \RS\Orm\Type as OrmType;

class Handlers extends \RS\Event\HandlerAbstract
{
    /**
    * Функция инициализирует регистрацию действий
    */
    function init()
    {
        $this-&gt;bind(&#039;orm.init.catalog-product&#039;); //Сообщаем что у нас появился хук расширяющий товар
    }
    
    /**
    * Расширяем объект товара
    * Обратите внимание на название хука и этой функции . и - не используются 
    *
    * @param array $list
    */
    public static function ormInitCatalogProduct(\Catalog\Model\Orm\Product $orm_product)
    {
         //Расширяем поля
        $orm_product-&gt;getPropertyIterator()-&gt;append(array(
            t(&#039;Основные&#039;), //Вкладка на которую будет добавлено поле, поля в массиве ниже будут приписаны к этой вкладке в конец
            &#039;is_root&#039; =&gt; new OrmType\Integer(array( //Название поля в таблице БД и его тип
                &#039;description&#039; =&gt; &#039;Корневой элемент?&#039;, //Подпись к полю
                 &#039;maxLength&#039; =&gt; 1, //Длинна поля
                &#039;default&#039; =&gt; 0, //Значение по умолчанию
                &#039;CheckBoxView&#039; =&gt; array(1,0) //Отвечает за отображение в качестве флага(галочки)
            ))
        ));
    }
}</code></pre></div><p>Посмотреть какие ещё поля бывают и какие у них свойства можно загляну в любой другой ORM объект. Или посмотреть типы ORM объектов в папке:<br /><strong>/core/rs/orm/type</strong><br />В массиве все методы у этих обхектов начинающиеся с setИмяМетода можно указать в массиве как &#039;ИмяМетода&#039;<br />Например:</p><p>Почти у всех есть метод<br /><strong>setDescription</strong>, а в массиве параметров это будет просто </p><p><strong>&#039;description&#039; =&gt; &#039;Корневой элемент?&#039;</strong></p><p>Т.е. приставка set убирается.<br />Доступные методы можно подсветить для себя в не олдскульном редакторе через конструкцию такого типа</p><p>new OrmType\Integer::set(ctrl+пробел) и Вам выпадет список из доступных параметров для типа Integer поля.</p><p>Собственно всё!</p><p>Теперь у нас появилось поле <strong>is_root</strong> у товара.<br />Осталось добавить это поле в таблицу. Можно это сделать через базу, но не нужно:)<br />Достаточно лишь в адмике зайти в <strong>Управление -&gt;Настройки</strong> системы и нажать <strong>Исправить структуру БД</strong>(справа).<br />Всё, поле добавлено. Можно пользоваться.<br />В шаблонах это поле будет доступно например так:<br /></p><div class="codebox"><pre><code>Поле корневой элемент? - {$product.is_root}</code></pre></div><p>Рассмотрим ещё варианты:</p><p><strong>Строка</strong><br /></p><div class="codebox"><pre><code>&#039;is_root&#039; =&gt; new OrmType\String(array(
       &#039;description&#039; =&gt; t(&#039;Строка&#039;),
)),</code></pre></div><p><strong>Текст</strong><br /></p><div class="codebox"><pre><code>&#039;is_root&#039; =&gt; new OrmType\Text(array(
       &#039;description&#039; =&gt; t(&#039;Текст&#039;),
)),</code></pre></div><p><strong>Текст с редактором</strong><br /></p><div class="codebox"><pre><code>&#039;is_root&#039; =&gt; new OrmType\RichText(array(
       &#039;description&#039; =&gt; t(&#039;Текст с редактором&#039;),
       &#039;maxLength&#039; =&gt; 1000
)),</code></pre></div><p><strong>Число</strong><br /></p><div class="codebox"><pre><code>&#039;is_root&#039; =&gt; new OrmType\Integer(array(
       &#039;description&#039; =&gt; t(&#039;Число&#039;),
       &#039;maxLength&#039; =&gt; 11
)),</code></pre></div><p><strong>Картинка</strong><br /></p><div class="codebox"><pre><code>&#039;is_root&#039; =&gt; new OrmType\Image(array(
       &#039;maxLength&#039; =&gt; &#039;255&#039;,
       &#039;max_file_size&#039; =&gt; 10000000,
       &#039;allow_file_types&#039; =&gt; array(&#039;image/pjpeg&#039;, &#039;image/jpeg&#039;, &#039;image/png&#039;, &#039;image/gif&#039;),
       &#039;description&#039; =&gt; &#039;Картинка&#039;,
)),</code></pre></div><p><strong>Файл</strong><br /></p><div class="codebox"><pre><code>&#039;is_root&#039; =&gt; new OrmType\File(array(
       &#039;description&#039; =&gt; t(&#039;Файл&#039;),
)),</code></pre></div><p><strong>Выпадающий список</strong></p><p>Тут всё несколько сложнее. Нужно понять, что список можно получить 2-мя способами.<br /><strong>1.</strong> Из Апи системы. Т.е. вызывается метод, который получает массив значений . Ключи массива будут как значения, значения будут как значения. <br />Поумолчанию в системе все апи являются наследниками </p><p><strong>\RS\Module\AbstractModel\TreeList</strong> или <br /><strong>\RS\Module\AbstractModel\EntityList</strong></p><p>Автоматически в этих апи есть метод staticSelectList, который получает все нужные нам значения.<br /></p><div class="codebox"><pre><code>//Например, получение регионов доставки
&#039;is_root&#039; =&gt; new OrmType\Integer(array(
       &#039;description&#039; =&gt; t(&#039;Регион&#039;),
       &#039;list&#039; =&gt; array(array(&#039;\Shop\Model\RegionApi&#039;,&#039;staticSelectList&#039;))
)),</code></pre></div><p><strong>2.</strong> значения из прямо заданного списка:<br /></p><div class="codebox"><pre><code>//Например, получение регионов доставки
&#039;is_root&#039; =&gt; new OrmType\String(array(
       &#039;description&#039; =&gt; t(&#039;Регион&#039;),
       &#039;listFromArray&#039; =&gt; array(
            0 =&gt; &#039;Вариант 1&#039;,
            &#039;var2&#039; =&gt; &#039;Вариант 2&#039;,
            &#039;var3&#039; =&gt; &#039;Вариант 3&#039;,
            //и т.д.
       )

)),</code></pre></div><p>Пробуйте!</p>]]></description>
			<author><![CDATA[null@example.com (Александр)]]></author>
			<pubDate>Wed, 25 Feb 2015 11:56:25 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/971/#p971</guid>
		</item>
	</channel>
</rss>
