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

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

  • www

    wartościowy instruktarz, tylko jak wyświetlić to na liście produktów w kategorii?

  • Pan Darek

    Dobre pytanie, zna ktoś odpowiedź ?

  • Pan Darek

    tu mamy rozwiązanie:

    1. In shop_browse_queries.php, add your 2 fields to the line that start with: $fieldnames =

    2. In shop.browse.php, find this line:
    $product_s_desc = $db_browse->f(„product_s_desc”);
    Duplicate that line twice, and in the first line, replace product_s_desc TWICE with field1, and then in the second line, twice with field2

    3. Still in shop.browse.php, find this line:
    $products[$i][‚product_s_desc’] = $product_s_desc;
    Duplicate that line twice, and in the first line, replace product_s_desc TWICE with field1, and then in the second line, twice with field2

    Teraz poprosimy o taki tutorial dla dodatkowego pola w Kategorii, z możliwością wyświetlania na stronach kategorii np: pod nazwą lub zdjęciem

  • Szymon

    Świetny poradnik, w dobry i przystępny sposób, poza samym rozwiązaniem problemu, pokazuje też, jak działać i jak sobie radzić z różnymi codziennymi problemami z Joomlą.

    Pozdrawiam twórców