Jump to content

Редактирование своих полей для мульти-магазина


Recommended Posts

Здравствуйте. Помогите решить проблему.

Добавил в админке новые поля для товаров, всё хорошо и стабильно работает, только у меня мульти-магазин и при редактировании товара, рядом с моим полем нет галочки для редактирования его сразу во всех магазинах.

 

Подскажите, пожалуйста, где искать?

Link to comment
Share on other sites

В classes/product.php добавил:

/** @var string Category_tovar */
public $category_tovar;

'category_tovar' =>    array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isCleanHtml'),

 

Соответственно в админку в шаблон контроллеров products добавил данное поле

Link to comment
Share on other sites

Абсент, можно малость подробней?

 

Имеете ввиду делать так:

'category_tovar' =>    array('type' => self::TYPE_STRING, 'shop' => true, 'validate' => 'isCleanHtml'),

Я пробовал так делать - ситуация не менялась...

 

Такого параметра как multishop в принципе в классе не встречается особо...

Версия прести 1.5.2, ежели чего.

Link to comment
Share on other sites

Добавил в шаблон в админке код

   {include file="controllers/products/multishop/checkbox.tpl" field="expo_tovar" type="default"}

Который, собственно, где-то потерял.

Поле с галочкой появилось рядом с моим полем. Только оно сразу активное (для изменения), и при отметке галочкой - обновление поля не происходит в базе.

 

Сам код выглядит соответственно так:

 

<select name="expo_tovar" id="expo_tovar">
<option value="1" {if $product->expo_tovar[$language.id_lang]|htmlentitiesUTF8|default:'' == '1'}selected="selected"{/if}>{l s='Нет'}</option>
<option value="2" {if $product->expo_tovar[$language.id_lang]|htmlentitiesUTF8|default:'' == '2'}selected="selected"{/if}>{l s='Ожидается'}</option>
<option value="3" {if $product->expo_tovar[$language.id_lang]|htmlentitiesUTF8|default:'' == '3'}selected="selected"{/if}>{l s='Да'}</option>
</select>

Link to comment
Share on other sites

Абсент, можно малость подробней?

 

Имеете ввиду делать так:

'category_tovar' =>	array('type' => self::TYPE_STRING, 'shop' => true, 'validate' => 'isCleanHtml'),

Я пробовал так делать - ситуация не менялась...

 

Такого параметра как multishop в принципе в классе не встречается особо...

Версия прести 1.5.2, ежели чего.

 

да, category_tovar должно быть в xxxxx_shop смотря какой класс сделай по аналогии с другим параметром каким нибудь

Link to comment
Share on other sites

опиши решение, другим пригодится))

 

Путём всяческих танцев с бубнами - победил таки данную ситуацию

Абсент - спасибо за вектор в нужном направлении!

Link to comment
Share on other sites

Ну я реализовывал немного коряво, через мультиязычность, хотя в принципе её не использовал, а использовал цифровые идентификаторы :)

По порядку:

 

Добавил поле в базу в ps_product_lang поле category_tovar, например.

Далее в файл /classes/Product.php после

/** @var string Name */
public $name;

добавил

/** @var string Category_tovar */
public $category_tovar;

Необязательно именно после этого поля, это я для удобства для себя.

Далее, соответственно, в описание самих полей добавил после

  'name' =>	   array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isCatalogName', 'required' => true, 'size' => 128),

такой код:

  'category_tovar' =>    array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isCleanHtml'),

 

После этого пошёл в /admin(или как у вас называется директория админки)/themes/default/template/controllers/products/informations.tpl, т.к. я добавлял поле в описание товара.

 

Там ищу код:

 <tr>
  <td class="col-left">
   {include file="controllers/products/multishop/checkbox.tpl" field="name" type="default" multilang="true"}
   <label>{l s='Name:'}</label>
  </td>
  <td style="padding-bottom:5px;" class="translatable">
  {foreach from=$languages item=language}
   <div class="lang_{$language.id_lang}" style="{if !$language.is_default}display: none;{/if} float: left;">
  <input class="{$class_input_ajax}{if !$product->id}copy2friendlyUrl{/if} updateCurrentText" size="43" type="text" {if !$product->id}disabled="disabled"{/if}
  id="name_{$language.id_lang}" name="name_{$language.id_lang}"
  value="{$product->name[$language.id_lang]|htmlentitiesUTF8|default:''}"/><sup> *</sup>
 <span class="hint" name="help_box">{l s='Invalid characters:'} <>;=#{}<span class="hint-pointer"> </span>
 </span>
   </div>
  {/foreach}
  </td>
 </tr>

После него пишу свой, для мульти-магазина, что бы обновлялось так же по галочке для всех магазинов.

 <tr>
  <td class="col-left">
   {include file="controllers/products/multishop/checkbox.tpl" field="category_tovar" type="default" multilang="true"}
   <label>{l s='Идентификатор:'}</label>
  </td>
  <td style="padding-bottom:5px;">
  <select name="category_tovar" id="category_tovar">
   <option value="1" {if $product->category_tovar[$language.id_lang]|htmlentitiesUTF8|default:'' == '1'}selected="selected"{/if}>{l s='Кухни'}</option>
   <option value="2" {if $product->category_tovar[$language.id_lang]|htmlentitiesUTF8|default:'' == '2'}selected="selected"{/if}>{l s='Кухни (Фасады)'}</option>
   <option value="3" {if $product->category_tovar[$language.id_lang]|htmlentitiesUTF8|default:'' == '3'}selected="selected"{/if}>{l s='Кухни (Цвета Фасадов)'}</option>
   <option value="4" {if $product->category_tovar[$language.id_lang]|htmlentitiesUTF8|default:'' == '4'}selected="selected"{/if}>{l s='Кухни (Фасады + Цвета)'}</option>
  </select>
  </td>
 </tr>

 

Вот и всё, теперь когда ставим галочку - обновляется всё, что нужно для всех магазинов. Единственное - почему-то когда галочка не стоит, когда только заходишь в редактирование товара, можно редактировать поле, хотя остальные неактивны, пока галочку не поставишь. Но не страшно, если поменять и сохранить, а галочка стоять не будет - обновления не применятся.

 

Ну и соответственно в самом шаблоне в файл Product.tpl я добавил то, что хотел.

  {if $product->category_tovar|escape:'htmlall':'UTF-8' == '2'}<a href="javascript:{ldelim}{rdelim}" class="button_facade">{l s='Фасады'}</a>{/if}
  {if $product->category_tovar|escape:'htmlall':'UTF-8' == '3'}<a href="javascript:{ldelim}{rdelim}" class="button_color">{l s='Цвета фасадов'}</a>{/if}
  {if $product->category_tovar|escape:'htmlall':'UTF-8' == '4'}<a href="javascript:{ldelim}{rdelim}" class="button_facade">{l s='Фасады'}</a> <a href="javascript:{ldelim}{rdelim}" class="button_color">{l s='Цвета фасадов'}</a>{/if}

 

 

 

Лень менять варианты на другие, пусть будет тот код, что у меня :)

  • Like 1
Link to comment
Share on other sites

×
×
  • Create New...