Dodatkowe pola w produkcie Virtuemart

Facebooktwittergoogle_plusredditpinterestlinkedintumblrmailFacebooktwittergoogle_plusredditpinterestlinkedintumblrmail

Dziś kolejny, drugi już ciekawy artykuł Jacka. Niekiedy Virtuemart używamy jako katalog. I tu pojawić się może pewna potrzeba… Dodatkowe pola w formularzu produktu np. rodzaj/typ, numer katalogowy, autor, format – cokolwiek. Można kombinować przez dodawanie kategorii, producentów, ale zastosowanie poniższego hack’a z pewnością ułatwi sprawę.
1. Poprzez phpMyAdmin utwórz nowe pole w bazie danych w tabeli jos_vm_product. Nazwijmy to pole dodatkowe_pole. To przykładowa nazwa, więc jeśli użyjesz innej zamień wszędzie w poniższych kodach.
2. Przejdź do folderu instalacji Joomla! /administrator/components/com_virtuemart/html/ plik product.product.form.php
Plik ten odpowiada za wyświetlanie formularza dodawania produktu w zapleczu.
Jeśli nowe pole ma pojawić się po SKU to:
PO:

<tr>
<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” name=”product_sku” value=”<?php $db->sp(„product_sku”); ?>” size=”32″ maxlength=”64″ />
</td>
</tr>

WPISZ:

<tr>
<td width=”21%” >
<div style=”text-align:right;font-weight:bold;”><?php echo $VM_LANG->_(‚PHPSHOP_PRODUCT_FORM_DODATKOWE_POLE’) ?>:</div>
</td>
<td width=”79%”>
<input type=”text” name=”dodatkowe_pole” value=”<?php $db->sp(„dodatkowe_pole”); ?>” size=”32″ maxlength=”64″ />
</td>
</tr>

3. Kolejny krok umożliwiający dodanie wpisu z nowego pola do bazy. Tym razem przechodzimy do: /administrator/components/com_virtuemart/classes/ plik ps_product.php
PO:
// Insert into DB $fields = array ( ‚vendor_id’ => $vendor_id, ‚product_parent_id’ => vmRequest::getInt(‚product_parent_id’), ‚product_sku’ => vmGet($d,’product_sku’),
WPISZ:
‚dodatkowe_pole’ => vmGet($d,’dodatkowe_pole’),
W tym samym pliku poszukaj „Function to update product $d[‚product_id’] in the product table” i wykonaj tą samą czynność:
PO:
// Insert into DB $fields = array ( ‚vendor_id’ => $vendor_id, ‚product_parent_id’ => vmRequest::getInt(‚product_parent_id’), ‚product_sku’ => vmGet($d,’product_sku’),
WPISZ:
‚dodatkowe_pole’ => vmGet($d,’dodatkowe_pole’),
4. W pliku językowym /administrator/components/com_virtuemart/languages/common/polish.php
PO:
‚PHPSHOP_PRODUCT_FORM_SKU’ => ‚SKU’,
WPISZ:
‚PHPSHOP_PRODUCT_FORM_DODATKOWE_POLE’ => ‚D’,
5. Teraz w szablonie produktu,
czyli: /components/com_virtuemart/themes/default/templates/product_details/ w zależności jaki mamy przypisany wpisujemy np.

<tr>
<td valign=”top” align=”left”>Tytuł dodatkowego pola:</td>
<td valign=”top” align=”left”><?php echo $dodatkowe_pole ?><br /></td>
</tr>

6. Jeśli chcesz zablokować możliwość powielenia się zawartości pola zastosuj to:
/administrator/components/com_virtuemart/classes/ plik ps_product.php
PO:

$ Q = „SELECT product_id, product_thumb_image, product_full_image z # __ {vm} _product WHERE product_sku =” „;
$ Q .= $ d [„product_sku”]. „‚”;
$ Db-> setQuery ($ q); $ db-> query ();
if ($ db-> next_record ()&&($ db-> f („product_id”)! = $ d [„product_id”])) {
$ VmLogger-> err („Produkt z SKU” $ d [‚product_sku’] „już istnieje.”..);
$ Valid = false;
}

WPISZ:

$ Q = „SELECT product_id, product_thumb_image, product_full_image z # __ {vm} _product WHERE my_code =” „;
$ Q .= $ d [„my_code”]. „‚”;
$ Db-> setQuery ($ q); $ db-> query ();
if ($ db-> next_record ()&&($ db-> f („product_id”)! = $ d [„product_id”])) {
$ VmLogger-> err („Produkt z kodem” $ d [‚my_code’].. „Już istnieje.”);
$ Valid = false;
}

============================================

Autorem tekstu jest : Jacek Sawicki.
Projektant, grafik, jednoosobowa agencja reklamowa,
specjalista od szablonów Joomla! i Virtuemart. www.inter-page.pl

============================================