0 Пользователей и 1 Гость просматривают эту тему.
  • 24 Ответов
  • 9771 Просмотров
*

cheba

  • Новичок
  • 5
  • 1 / 0
В общем все обыскал, необходимо добавить типа второго артикула в магаз.

Может уже кто-то делал, поделитесь пожалуйста...
« Последнее редактирование: 01.07.2010, 15:35:12 от cheba »
*

cheba

  • Новичок
  • 5
  • 1 / 0
Re: Второй артикул или параметр
« Ответ #1 : 01.07.2010, 15:33:53 »
Видать тут нет ни одного человека разбирающегося не только в магазине но и в Joomla. yes!
*

vtx

  • Захожу иногда
  • 221
  • 19 / 0
Где-то стырил, уже и не помню где ;D

Наверное каждый кто когда-либо работал с компонентом VirtueMart замечал, что стандартных полей описания товара слишком мало. Вот и передо мной встала задача реализовать несколько дополнительных полей для вывода их в категории и в карточке товара. Как все умные и в меру ленивые люди (да-да люблю я себя (: ), решил сначала посмотреть, что пишут люди на российских и зарубежных форумах... и, о ужас, все мануалы пишутся только для вирта 1.0, в котором синтаксис координально отличается от версии 1.1. Проскальзывало несколько постов, типа: "Ура, я сумел реализовать сие чудо на вирте 1.1.3". После чего авторы сих познавательных комментов исчезали. Немного подумав и посидев над кодом нашел стабильное решение, которое безотказно работает на версиях 1.1.3 и 1.1.4. Итак приступим:
 
0. Для реализации нам нужен PhpMyAdmin, Dreamweaver (блокнот тож сойдет) и немного терпения.
 
1. Открываем базу данных нашего сайта и находим таблицу jos_vm_product. Заходим в нее, выбираем вкладку "Структура". Тут мы видим все поля нашего товара, такие как Артикул, Айди, цена и пр. Спускаемся вниз и находим "Добавить 1 поле(поля)" выбираем правее под каким полем хотим расположить наше будущее творение и жмем Ок. Теперь заполняем: Поле: product_new (можете вставить свое); Длина/значения: 64; Тип: VARCHAR; Сравнение: utf8_general_ci; Null: NOT NULL. Вдаваться в подробности за что отвечает каждая строчка не буду, таких мануалов итак полно. Остальные поля можно оставить пустыми. Сохраняем. Все... первый этап завершен.
 
2. После создания поля в таблице ее нужно привязать к админке сайта. Для этого идем сюда: administrator/com_virtuemart/html/product.product_form.php. В файле product.product_form.php в районе 197 строки начинается таблица, в которой формируются строки при добавлении нового товара. Оптимальнее всего размещать новое поле под артикулом. Следовательно находим строки:
<tr class="row1">
<td width="21%" >
<div style="text-align:right;font-weight:bold;"><?php echo $VM_LANG->
_('PHPSHOP_PRODUCT_FORM_SKU')?>:</div>
</td>
<td width="79%">
<input type="text" class="inputbox" name="product_sku" value="<?php $db->sp("product_sku"); ?>" size="32" maxlength="64" />
</td>
</tr>

и после них вставляем:
<tr class="row1">
<td width="21%" >
<div style="text-align:right;font-weight:bold;"><?php echo $VM_LANG->_('PHPSHOP_PRODUCT_FORM_NEW')?>:</div>
</td>
<td width="79%">
<input type="text" class="inputbox" name="product_new" value="<?php $db->sp("product_new"); ?>" size="32" maxlength="64" />
</td>
</tr>

Далее заходим в админку VirtueMart и видим, что строка появилась, но вот название поля не отображается. Вспомним, что выше мы вставили следующую комбинацию:
<?php echo $VM_LANG->_('PHPSHOP_PRODUCT_FORM_NEW')?>

Значит нам нужно задать это поле в языковом файле, для этого идем в administrator/com_virtuemart/languages/product/russian.php и добавляем под строкой:
'PHPSHOP_PRODUCT_FORM_SKU' => 'Артикул',

вот такую:
'PHPSHOP_PRODUCT_FORM_NEW' => 'Новое поле',

Теперь поле нормально отображается в админке, однако оно не связано с базой данных, в следующем шаге этим мы и займемся.
 
3. Теперь нам нужно связать наше новое поле с базой данных нашего сайта. Для этого идем в administrator/components/com_virtuemart/classes/ps_product.php находим строчки:
// Insert into DB
$fields = array ( 'vendor_id' => $vendor_id,
'product_parent_id' => vmRequest::getInt('product_parent_id'),
'product_sku' => vmGet($d,'product_sku'),

сразу под ними вставляем:
'product_new' => vmGet($d,'product_new'),

Такая комбинация встречается в файле 2 раза, первый раз для добавления нового товара (в районе 272 строки), второй раз для его изменения (в районе 473 строки). То бишь если отредактировать только один раз, то новое поле будет добавляться при создании товара, но потом его нельзя будет отредактировать. Теперь можно зайти в админку и попробовать добавить новый товар с новым параметром, затем попробовать его изменить, если все прошло успешно и все данные нормально сохраняются, значит поле успешно связывается с бд.
 
4. В этом шаге мы начнем реализацию отображения нового поля в категории и карточке товара, для этого предварительно нужно отредактировать 2 файла. Сначала идем в administrator/com_virtuemart/html/shop_browse_queries.php (файл отвечает за включение поля в выборку при обращении к карточке товара или к категории). Находим строчки:
$fieldnames = "`product_name`,`products_per_row`,`category_browsepage`,`category_flypage`,`#__{vm}_category`.`category_id`,
`#__{vm}_product`.`product_id`,`product_full_image`,`product_thumb_image`,
`product_s_desc`,`product_parent_id`,`product_publish`,`product_in_stock`,`product_sku`,`product_url`,

и вставляем `product_new` после `product_sku`. Следовательно у нас должно получиться так:
$fieldnames = "`product_name`,`products_per_row`,`category_browsepage`,`category_flypage`,`#__{vm}_category`.`category_id`,
`#__{vm}_product`.`product_id`,`product_full_image`,`product_thumb_image`,`product_s_desc`,
`product_parent_id`,`product_publish`,`product_in_stock`,`product_sku`,`product_new`,`product_url`,

Сохраняем файл. Теперь идем в administrator/com_virtuemart/html/shop_browse.php (файл отвечает за "заглушку", которую мы будем использовать в карточке товара и в категории, кто не знает, в данном случае заглушка - это PHP функция, которая выводит данные из нашего нового поля непосредственно на сайте). Ищем строки:
// Unset these for the next product
unset($full_image_width);
unset($full_image_height);
 
$products[$i]['product_name'] = shopMakeHtmlSafe( $product_name );
$products[$i]['product_s_desc'] = $product_s_desc;
$products[$i]['product_details'] = $product_details;
$products[$i]['product_rating'] = $product_rating;
$products[$i]['product_price'] = $product_price;
$products[$i]['product_price_raw'] = $product_price_raw;
$products[$i]['product_sku'] = $db_browse->f("product_sku");

и после них добавляем:
$products[$i]['product_new'] = $db_browse->f("product_new");

Все, заглушка готова, теперь можно переходить к финальному этапу. Формированию шаблона категории и карточки товара.
 
5. Открываем components/com_virtuemart/themes/default/templates/browse/ваш шаблон категории. В моем случае это browse_1. В файле можно заметить, что вывод формируется через функции вида <?php echo $product_title ?>, следовательно, чтобы вывести наше новое поле нужно вставить: <?php echo $product_new ?>. В качестве примера выкладываю примерный код шаблона категории:
<?php if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' );
mm_showMyFileName(__FILE__);
?>
<div class="browseProductContainer">
 
 
<h1><a title="<?php echo $product_name ?>" href="<?php echo $product_flypage ?>">
<?php echo $product_name ?></a>
</h1>
<table border="1" width="100%" style="text-align:center;">
<tr>
<td>
<script type="text/javascript">//<![CDATA[
document.write('<a href="javascript:void window.open(\'<?php echo $product_full_image ?>\', \'win2\', \'status=no,toolbar=no,scrollbars=yes,titlebar=no,menubar=no,resizable=yes,width=<?php echo $full_image_width ?>,height=<?php echo $full_image_height ?>,directories=no,location=no\');">');
document.write( '<?php echo ps_product::image_tag( $product_thumb_image, 'class="browseProductImage" border="0" title="'.$product_name.'" alt="'.$product_name .'"' )?></a>' );
//]]>
</script>
<noscript>
<a href="<?php echo $product_full_image ?>" target="_blank" title="<?php echo $product_name ?>">
<?php echo ps_product::image_tag( $product_thumb_image, 'class="browseProductImage" border="0" title="'.$product_name.'" alt="'.$product_name .'"' )?>
</a>
</noscript>
</td>
<td>
<?php echo $product_new ?>
</td>
<td>
<?php echo $product_s_desc ?>
</td>
<td>
<?php echo $product_sku ?>
</td>
<td>
<?php echo $product_price ?>
</td>
</tr>
</table>
<br />
<span>
<?php echo $form_addtocart ?>
</span>
 
</div>

С карточкой товара все по аналогии. Всем спасибо за внимание, думаю информация будет полезна для разработчиков Интернет магазинов (:
*

rg777777

  • Новичок
  • 8
  • 0 / 0
  • http://xohanoc.info
Спасибо огромное
очень помогло
*

grizley

  • Новичок
  • 3
  • 0 / 0
vtx ,спасибо и суперреспект. Спас просто
*

masimo

  • Новичок
  • 4
  • 0 / 0
« Последнее редактирование: 23.05.2011, 19:36:28 от masimo »
*

Timer

  • Захожу иногда
  • 109
  • 1 / 1
а для 1.0 такое есть ?
*

Tata_F

  • Новичок
  • 6
  • 0 / 0
vtx, спасибо. таки и респект и уважуха.
*

text

  • Захожу иногда
  • 93
  • 0 / 0
J 1.0.12, VM 1.0.12
Пытаюсь построить код для селекта в файле product.product_form.php


ЗАДАЧА 1 ------не работает------------------
Код: php-brief
<tr> 
      <td width="21%" valign="top" >
        <div style="text-align:right;font-weight:bold;">
<?php echo $VM_LANG->_PHPSHOP_PRODUCT_FORM_FACE ?>:</div>
      </td>
 
   <td width="79%" ><?php if ($db->sf("product_face")=="белый") { ?>
        <select  name="product_face" value="белый" selected="selected" />
    <?php    }
elseif ($db->sf("product_face")=="серый") { ?>
        <select  name="product_face" value="серый" selected="selected" />
    <?php    }
elseif ($db->sf("product_face")=="красный") { ?>
        <select  name="product_face" value="красный" selected="selected" />
    <?php    } elseif ($db->sf("product_face")=="зеленый") { ?>
        <select  name="product_face" value="зеленый" selected="selected" />
    <?php    } elseif ($db->sf("product_face")=="белый") { ?>
        <select  name="product_face" value="" selected="selected" />
    <?php    }     ?>
</select>
      </td>
</tr>

------------------


ЗАДАЧА 2
Делаю условие - если значение переменной не заполнено, то ничего не делаем, иначе действие...
Как внизу не работает....
---------------
   
Код: javascript
if ($product_face <> '' ) 
{ действие }
else {
ничего не делаем
}
-------------Так тоже не работает-------
Код: javascript
if (empty($product_face))
{ничего не делаем }
else {
действие
}
----------------


Подскажите, пожалуйста, где ошибки и как правильно....
« Последнее редактирование: 08.09.2011, 10:07:47 от text »
*

vtx

  • Захожу иногда
  • 221
  • 19 / 0
попробуйте product_face = 0
*

text

  • Захожу иногда
  • 93
  • 0 / 0
попробуйте product_face = 0

vtx

Ваш вариант не работает.

Подскажите, пожалуйста, как можно задать условие для ТЕКСТовой переменной.
Если значение переменной содержит 2 или 3 символа (буквы), то запускаем цикл, иначе никаких действий.

Пытаюсь так. Тоже не выходит:
$product_face = stripslashes($product_face);
if ($product_face < 1) {

Т.е. ищу подобный вариант stripslashes($product_face);
stripslashes - вроде (не знаю точно) для обработки текстовых переменных, но не работает...

Пытаюсь так, чтобы программа увидела, что если переменная содержит какой-либо текст, то запускала цикл, иначе ничего.
« Последнее редактирование: 07.09.2011, 14:05:31 от text »
*

vtx

  • Захожу иногда
  • 221
  • 19 / 0
присвойте NULL полю в базе
*

text

  • Захожу иногда
  • 93
  • 0 / 0
присвойте NULL полю в базе

vtx

в базе стоит NULL.

Вот копия из БД:
product_face text cp1251_general_ci  Yes NULL

Пробовали в качестве "Type" и varchar(64), и text. Сейчас стоит "text".
Поле "product_face" в админпанели заполнено текстом (одно слово - около 15 знаков).
« Последнее редактирование: 07.09.2011, 18:25:11 от text »
*

text

  • Захожу иногда
  • 93
  • 0 / 0
Вот варианты, которые не работают:

Код: php
$product_face = iconv_strlen($product_face);
if ($db->f("product_face") < 1) {
//if ($product_face > 1 &&($db->f("product_id")!= $d["product_id"])) {
//if (!empty($product_face)) {
//if ($product_face == '' ) {

strlen, mb_strlen - тоже без результатов.

С текстовой переменной не получается. А с числами у меня так работает:
Код: php
if ($db->f("product_date") < 1) {ничего	}
else {действие...
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
А откуда и зачем берется $product_face? Во-первых непонятно откуда, во-вторых непонятно зачем - потом она не используется в рамках представленного кода. В зависимости от наполнения $db->f("product_face") ее можно проверять на пустоту или null
на пустоту
Код: php
empty($db->f("product_face") )
на null
Код: php
is_null($db->f("product_face") )
и в зависимости от проверки выстраивать условия.
*

text

  • Захожу иногда
  • 93
  • 0 / 0
Решение (работает с текстом)

Код: php
if (strlen($db->f("product_face")) < 1) {...
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Так тоже можно, но потребляет больше ресурсов чем
Код: php
empty($db->f("product_face") )
*

text

  • Захожу иногда
  • 93
  • 0 / 0
Arkadiy , Спасибо.

Подскажите, пожалуйста, направление.


J 1.0.12, VM 1.0.12
Пытаюсь построить код для селекта в файле product.product_form.php


Так не работает:

Код: php-brief
<tr> 
      <td width="21%" valign="top" >
        <div style="text-align:right;font-weight:bold;">
<?php echo $VM_LANG->_PHPSHOP_PRODUCT_FORM_FACE ?>:</div>
      </td>
 
 <td width="79%" ><?php if ($db->sf("product_face")=="белый") { ?>
        <select  name="product_face" value="белый" selected="selected" />
    <?php    }
elseif ($db->sf("product_face")=="серый") { ?>
        <select  name="product_face" value="серый" selected="selected" />
    <?php    }
elseif ($db->sf("product_face")=="красный") { ?>
        <select  name="product_face" value="красный" selected="selected" />
    <?php    } elseif ($db->sf("product_face")=="зеленый") { ?>
        <select  name="product_face" value="зеленый" selected="selected" />
    <?php    } elseif ($db->sf("product_face")=="белый") { ?>
        <select  name="product_face" value="" selected="selected" />
    <?php    }     ?>
</select>
      </td>
</tr>

« Последнее редактирование: 08.09.2011, 10:06:44 от text »
*

text

  • Захожу иногда
  • 93
  • 0 / 0

Так тоже можно, но потребляет больше ресурсов чем
Код: php
empty($db->f("product_face") )

Arkadiy

Так не работает, проверил:
Код: php
if (empty($db->f("product_face"))) {
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Изучи синтаксис тега select, у тебя много селектов и ни одного опшена, хотя по логике должен быть один селект с опшенами.
*

text

  • Захожу иногда
  • 93
  • 0 / 0
Изучи синтаксис тега select, у тебя много селектов и ни одного опшена, хотя по логике должен быть один селект с опшенами.

спасибо, будем изучать...

Но любые идеи с кодом приветствуются
« Последнее редактирование: 08.09.2011, 10:25:21 от text »
*

Михаил321

  • Новичок
  • 6
  • 0 / 0
Доброго времяни суток, у меня возникла проблема с артикулами, я экспортировал прайс в я. маркет и все товары стали без артикула, использую VirtueMart 1.1.9, Joomla 1.5.23, YML Exporter
Подскажите пожалуйста как решить проблему.
*

Ra

  • Осваиваюсь на форуме
  • 13
  • 0 / 0
  • Рекламная компания Глобал
vtx , не могу найти где же находится это administrator/com_virtuemart/html/product.product_form.php.
у меня такого нет. Стоит Joomla 2.5 и VirtueMart и 2.0.2
У меня в папке Z:\home\localhost\www\proekt\administrator\components\com_virtuemart лежат сл. файлы:
папка assets
папка controllers
папка elements
папка helpers
папка install
папка liveupdate
папка models
папка plugins
папка tables
папка views
файл admin.virtuemart
файл changelog
файл COPYRIGHT
файл index
файл version
файл VirtueMart.cfg
файл virtuemart
файл virtuemart_defaults.cfg-dist
« Последнее редактирование: 10.02.2012, 02:00:29 от Ra »
*

vtx

  • Захожу иногда
  • 221
  • 19 / 0
извини, но со вторим виртом никогда не работал...
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Помогите мне поместить полем SKU под Описание Продукта browse_listtable.tpl.php

Автор saudzboa

Ответов: 1
Просмотров: 1096
Последний ответ 14.02.2018, 22:44:25
от saudzboa
Как реализовать: товары, которых нет в наличии в конец списка категории?

Автор Girevik

Ответов: 1
Просмотров: 1210
Последний ответ 02.11.2017, 10:52:04
от P_B
Как реализовать?

Автор persov

Ответов: 2
Просмотров: 1215
Последний ответ 22.04.2013, 19:41:01
от persov
Заменить параметр attribute c select на checkbox, и выбор нескольких параметров из одного attbibute

Автор Artrum

Ответов: 2
Просмотров: 2274
Последний ответ 02.12.2012, 18:29:16
от angelo4ek-001
помогите допилить OsolCaptcha для формы "задать вопрос" в VM 1.1.5

Автор hardstep

Ответов: 7
Просмотров: 10295
Последний ответ 24.09.2012, 03:04:16
от Иоланта