UC_Katalógus

simont képe

Az uc katalógusban nem írja ki a kedvezményes árat. A termék tartalomnál viszont kiírja: levendulagyerekcipő
Ezt használom: uc 2.11, uc_discounts_alt 2.4.
Próbáltam ezt: http://drupal.hu/comment/52555#comment-52555, uc_product.module fájlt módosítani a leírtak szerint, cache-t ürítettem nem jött be.

Egy másik megoldás szerint http://drupal.hu/comment/57259#comment-57259: .../sites/all/modules/ubercart/uc_catalog/uc_catalog.module

 <?php function theme_uc_catalog_product_grid($products) {
...} 

függvényét másoljam be a smink template.php fájljába és ott módosíthatom.

Programozáshoz nem értek, ezért az a kérdésem, mivel bővítsem ezt a függvényt, hogy az uc katalógusban is kiírja a kedvezményes árat, a rendes ár alatt?

Melyik modulhoz, modulokhoz kapcsolódik a téma?: 
Drupal verzió: 
simont képe

Ezen az oldalon találtam egy megoldást, egy módosított függvényt:
"This solution is working on my website:
(Place it at template.php of your theme)
(For uc 2.4 and uc_discounts_alt 6.x-2.x-dev)
http://drupal.org/node/905368"
Sajnos ezzel sem működik, uc katalógus nem írja ki a kedvezményes árat, cache ürítés után sem.
Lehet azért, mert az én oldalamon már az uc 2.11, uc_discounts_alt 2.4 van?

0
0

SimonT

Sk8erPeter képe

Ez a phptemplate_ kezdetű függvény-override elavult, ne használd.

Az általad belinkelt issue-ban az illető a
theme_uc_catalog_product_grid()
függvényt bírálja felül a saját sminkben, de az elavult phptemplate kezdetű függvény-override-ot használja. A theme részt a függvény nevében a sminked nevére kellene inkább lecserélni. Például ha a sminked neve "sminkem" (ami magának a theme-nek a könyvtárneve is), akkor ez lesz a függvénynév: sminkem_uc_catalog_product_grid (a theme_uc_catalog_product_grid helyett).
Az ő kódja alapján írtam le a következőket, én még nem használtam a modult, de remélem, menni fog így távirányítással.

Lépések:

  1. az aktív sminked template.php fájlját nyisd meg a kedvenc egyszerű szövegszerkesztődben (pl. Notepad++)
  2. Másold bele egy az egyben a következő függvényt:

    1. /**
    2.  * Display a list of products in grid format().
    3.  *
    4.  * Override theme_uc_catalog_product_grid function from uc_catalog module
    5.  * @ingroup themeable
    6.  */
    7. function SMINKEDNEVE_uc_catalog_product_grid($products) {
    8. $product_table = '<div class="category-grid-products"><table>';
    9. $count = 0;
    10. $context = array(
    11. 'revision' => 'themed',
    12. 'type' => 'product',
    13. );
    14. foreach ($products as $nid) {
    15. $product = node_load($nid);
    16. $context['subject'] = array('node' => $product);
    17.  
    18. if ($count == 0) {
    19. $product_table .= '<tr>';
    20. }
    21. elseif ($count % variable_get('uc_catalog_grid_display_width', 3) == 0) {
    22. $product_table .= '</tr><tr>';
    23. }
    24.  
    25. $titlelink = l($product->title, "node/$nid", array('html' => TRUE));
    26. if (module_exists('imagecache') && ($field = variable_get('uc_image_'. $product->type, '')) && isset($product->$field) && file_exists($product->{$field}[0]['filepath'])) {
    27. $imagelink = l(theme('imagecache', 'product_list', $product->{$field}[0]['filepath'], $product->title, $product->title), "node/$nid", array('html' => TRUE));
    28. }
    29. else {
    30. $imagelink = '';
    31. }
    32.  
    33. $product_table .= '<td>';
    34. if (variable_get('uc_catalog_grid_display_title', TRUE)) {
    35. $product_table .= '<span class="catalog-grid-title">'. $titlelink .'</span>';
    36. }
    37. if (variable_get('uc_catalog_grid_display_model', TRUE)) {
    38. $product_table .= '<span class="catalog-grid-ref">'. $product->model .'</span>';
    39. }
    40. $product_table .= '<span class="catalog-grid-image">'. $imagelink .'</span>';
    41. if (module_exists('uc_discounts')) {
    42. $discounted_price = theme("get_discounted_price", $product);
    43. if (!is_null($discounted_price) && $product->sell_price > $discounted_price) {
    44. if (variable_get('uc_catalog_grid_display_sell_price', TRUE)) {
    45. $product_table .= '<p class="original-sell-price">'. uc_price($product->sell_price, $context) .'</p>';
    46. }
    47. $product_table .= '<span class="field-type-discounted-price">'. theme("product_discounted_price", $product, uc_price($discounted_price, $context)) .'</span>';
    48. }
    49. else {
    50. if (variable_get('uc_catalog_grid_display_sell_price', TRUE)) {
    51. $product_table .= '<span class="catalog-grid-sell-price">'. uc_price($product->sell_price, $context) .'</span>';
    52. }
    53. }
    54. theme('add_product_price_altering_css', $product);
    55. theme('add_product_price_altering_javascript', $product);
    56. }
    57. else {
    58. if (variable_get('uc_catalog_grid_display_sell_price', TRUE)) {
    59. $product_table .= '<span class="catalog-grid-sell-price">'. uc_price($product->sell_price, $context) .'</span>';
    60. }
    61. }
    62.  
    63. if (module_exists('uc_cart') && variable_get('uc_catalog_grid_display_add_to_cart', TRUE)) {
    64. if (variable_get('uc_catalog_grid_display_attributes', TRUE)) {
    65. $product_table .= theme('uc_product_add_to_cart', $product);
    66. }
    67. else {
    68. $product_table .= drupal_get_form('uc_catalog_buy_it_now_form_'. $product->nid, $product);
    69. }
    70. }
    71. $product_table .= '</td>';
    72.  
    73. $count++;
    74. }
    75. $product_table .= '</tr></table></div>';
    76. return $product_table;
    77. }
  3. Cseréld le a SMINKEDNEVE részt a saját sminked nevére (machine name-jére, ami a könyvtárneve is)!
  4. Ürítsd a cache-t, és próbáld ki.
  5. Jelezz vissza, hogy sikerrel jártál-e. :)
1
0
simont képe

Köszönöm az ötletet! Átírtam a smink nevére. Sajnos a katalógusban a kedvezményes ár (discount price) így sem jelenik meg.
Cache ürítés után sem.
Valakinek még ötlete?

0
0

SimonT

Sk8erPeter képe

Azt kellene megvizsgálnod, hogy egyáltalán végrehajtódik-e a függvény, amit a sminked template.php fájljába másoltál.
Ahogy elnéztem az oldaladon, az async smink egy átdolgozott változata van fent nálad, ha minden igaz (az útvonalak erre utalnak).
Igaz, hogy alsminket létrehozva kellene elvileg módosítani, de gondolom ennek a template.php-jába tetted bele, és ha így történt, akkor
async_uc_catalog_product_grid
lett a függvény neve?

Egy tesztelés erejéig próbáld meg azt, hogy az első sort módosítod:

  1. $product_table = '<div class="category-grid-products"><table>';

HELYETT átmenetileg legyen ez a kód:

  1. $product_table = '<h1>TESZTBLABLA, ezt szedd ki, ha ez a szöveg látható</h1><div class="category-grid-products"><table>';

Látod kiírva a megfelelő helyre azt a szöveget, hogy TESZTBLABLA?
Ha nem, akkor nem hívódik meg a függvényed, és akkor már legalább eggyel beljebb vagyunk, hogy vajon miért nem működik...
Szóval ezt nézd meg, aztán jelezz vissza.

2
0
simont képe

Meghívódik a függvény, mivel megjelenik a TESZT szöveg!
Igen, az oldalon az async smink egy átdolgozott változata van fent. Alsminket kellet volna létrehozni, de mikor készült ez az oldal, akkor még ezt nem tudtam.
Közben találtam még valamit itt: http://drupal.org/node/905368#comment-4694998 e hozzászólás szerint:
"I was using this, but when I upgraded to UC Discounts 2.2 it seems to not work anymore? Did something change?"
Vagyis ahogy értelmezem, az uc_discounts_alt 6.x-2.x-dev verzióval működött ez az átdolgozott függvény, de az uc_discount_alt 2.2 - vel már nem. Az én oldalamon a legfrissebb modul van fönn a 2.4-es.

0
0

SimonT

Sk8erPeter képe

Hát akkor nem marad más, mint debuggolni. A Devel modult engedélyezd, és nézegesd végig a kódban az egyes visszatérési értékeket, hogy lásd, melyik feltétel nem teljesül.

Az
if (module_exists('uc_discounts'))
feltételbe nyilván belelép, ha az uc_discounts modul nálad engedélyezve van.
Következő lépés:

  1. $discounted_price = theme("get_discounted_price", $product);
  2. if (!is_null($discounted_price) && $product->sell_price > $discounted_price) {
  3. // ...
  4. }

na ez már nem olyan egyértelmű, hogy itt vajon a feltételek teljesülnek-e.
A helyedben ezért debuggolgatnám a kódot, például így:

  1. $discounted_price = theme("get_discounted_price", $product);
  2. dsm($discounted_price, '$discounted_price in '.__FUNCTION__.'()');

Így a Devel által biztosított dsm() függvénnyel ki tudnád íratni a grid megjelenítésekor, hogy mi a $discounted_price változó értéke, ezzel meg tudnád vizsgálni, hogy vajon a feltételvizsgálatnak mi lesz az eredménye.
Aztán így tovább.

A következő modulok mind engedélyezve vannak, ugye?

  • codeless_discounts_field
  • product_price_alterer_field
  • uc_discounts
0
0
simont képe

Köszönöm Sk8erPeter!
Debuggolást még nem csináltam, de telepítem a Devel modult, és jelentkezem, hogy mire jutottam!
A következő modulok engedélyezve vannak:

  • codeless_discounts_field
  • product_price_alterer_field
  • uc_discounts
0
0

SimonT

simont képe

Beillesztettem a kódot amit írtál:

  1. $discounted_price = theme("get_discounted_price", $product);
  2. dsm($discounted_price, '$discounted_price in '.__FUNCTION__.'()');

Ezt írja ki a katalógus oldalakon:

  1. $discounted_price in async_uc_catalog_product_grid() =>
  2. $discounted_price in async_uc_catalog_product_grid() =>
  3. $discounted_price in async_uc_catalog_product_grid() =>

Sajnos ettől tovább nem tudtam menni, nincs programozói tudásom.

0
0

SimonT

simont képe

Ezt találtam: http://drupal.org/node/466472#comment-1612648

This seemed to work for me:

  1. function phptemplate_uc_catalog_product_grid($products)
  2. {
  3. $s = "";
  4.  
  5. foreach ($products as $nid)
  6. {
  7. $product = node_load($nid);
  8. $discounted_price = theme("get_discounted_price", $product);
  9. $s .= $nid . ":" . $discounted_price . "<br/>";
  10. }
  11.  
  12. return $s;
  13. }

Még egy megoldás, csak nem tudom hova illesszem be.

0
0

SimonT

simont képe

Megvan a megoldás! Így már működik!
Köszönöm Sk8erPeternek!
Ezt kell bemásolni a smink template.php fájlba: A SAJÁTSMINKNÉV helyett írd be a sminked nevét:

  1. function SAJÁTSMINKNÉV_uc_catalog_product_grid($products) {
  2. $product_table = '<div class="category-grid-products"><table>';
  3. $count = 0; $context = array(
  4. 'revision' => 'themed',
  5. 'type' => 'product',
  6. );
  7. foreach ($products as $nid) {
  8. $product = node_load($nid);
  9. $context['subject'] = array('node' => $product);
  10.  
  11. if ($count == 0) {
  12. $product_table .= "<tr>";
  13. }
  14. elseif ($count % variable_get('uc_catalog_grid_display_width', 3) == 0) {
  15. $product_table .= "</tr><tr>";
  16. }
  17.  
  18. $titlelink = l($product->title, "node/$nid", array('html' => TRUE));
  19. if (module_exists('imagecache') && ($field = variable_get('uc_image_'. $product->type, '')) && isset($product->$field) && file_exists($product->{$field}[0]['filepath'])) {
  20. $imagelink = l(theme('imagecache', 'product_list', $product->{$field}[0]['filepath'], $product->title, $product->title), "node/$nid", array('html' => TRUE));
  21. }
  22. else {
  23. $imagelink = '';
  24. }
  25.  
  26. $product_table .= '<td>';
  27. if (variable_get('uc_catalog_grid_display_title', TRUE)) {
  28. $product_table .= '<span class="catalog-grid-title">'. $titlelink .'</span>';
  29. }
  30. if (variable_get('uc_catalog_grid_display_model', TRUE)) {
  31. $product_table .= '<span class="catalog-grid-ref">'. $product->model .'</span>';
  32. }
  33. $product_table .= '<span class="catalog-grid-image">'. $imagelink .'</span>';
  34. if (module_exists('uc_discounts')) {
  35. $discounted_price = uc_discounts_get_discounted_price_for_product($product);
  36. /*$discounted_price = theme("uc_discounts_get_discounted_price_for_product", $product);*/
  37. if (!is_null($discounted_price) && $product->sell_price > $discounted_price) {
  38. if (variable_get('uc_catalog_grid_display_sell_price', TRUE)) {
  39. $product_table .= '<p class="original-sell-price">'. uc_price($product->sell_price, $context) .'</p>';
  40. }
  41. $product_table .= '<span class="field-type-discounted-price">SALE<br /> '. theme("product_discounted_price", $product, uc_price($discounted_price, $context)) .'</span>'; }
  42. else {
  43. if (variable_get('uc_catalog_grid_display_sell_price', TRUE)) {
  44. $product_table .= '<span class="catalog-grid-sell-price">'. uc_price($product->sell_price, $context) .'</span>';
  45. }
  46. }
  47. theme("add_product_price_altering_css", $product);
  48. theme("add_product_price_altering_javascript", $product);
  49. }
  50. else {
  51. if (variable_get('uc_catalog_grid_display_sell_price', TRUE)) {
  52. $product_table .= '<span class="catalog-grid-sell-price">'. uc_price($product->sell_price, $context) .'</span>';
  53. }
  54. }
  55. if (module_exists('uc_cart') && variable_get('uc_catalog_grid_display_add_to_cart', TRUE)) {
  56. if (variable_get('uc_catalog_grid_display_attributes', TRUE)) {
  57. $product_table .= theme('uc_product_add_to_cart', $product);
  58. }
  59. else {
  60. $product_table .= drupal_get_form('uc_catalog_buy_it_now_form_'. $product->nid, $product);
  61. }
  62. }
  63. $product_table .= '</td>'; $count++;
  64. }
  65. $product_table .= "</tr></table></div>";
  66. return $product_table;
  67. }

css-el lehet formázni, színezni!

1
0

SimonT

Sk8erPeter képe

Szívesen, ennek örülök, hogy végül sikerült!

Ez érdekes viszont, ezek szerint a korábbi
SMINKEDNEVE_uc_catalog_product_grid
névvel nem ment, csak a
phptemplate_uc_catalog_product_grid
elnevezéssel?
Ez számomra új, nem nagyon értem az okát. :)
Csak mert ahogy elnézem, ugyanaz a kódja, mint amit itt mutattam. :)

0
0
simont képe

Igazad van! a phptemplate helyett a saját sminked nevét kell írni!
Kijavítottam! Köszönöm, hogy visszajeleztél!
Tehát: az első sorban:
function SAJÁTSMINKNÉV_uc_catalog_product_grid($products)

Ezt kellett átírni:
$discounted_price = theme("get_discounted_price", $product);

Erre:
$discounted_price = uc_discounts_get_discounted_price_for_product($product);

Ezzel működik.
Itt a jó megoldás!

0
0

SimonT

Sk8erPeter képe

Akkor jó, megnyugodtam :))
Nyomtam is rá egy +1-et, értékes találat, másnak is jól jöhet. :)

Még annyi, hogy ez csúf ebben a formában, szóval megformáztam neked ezen az oldalon keresztül:
http://beta.phpformatter.com/
(amúgy is tudom javasolni ezt az oldalt gyors PHP-kódformázásra)
az elejére beírtam a <?php sort, meg a "Style" fülön az "Indentation:"-t 2-re állítottam a Drupal-konvencióknak megfelelően (tehát magyarul a behúzás 2 szóköz lesz) és utána csak bekopiztam a Te kódodat:

  1. function SAJÁTSMINKNÉV_uc_catalog_product_grid($products)
  2. {
  3. $product_table = '<div class="category-grid-products"><table>';
  4. $count = 0;
  5. $context = array(
  6. 'revision' => 'themed',
  7. 'type' => 'product'
  8. );
  9.  
  10. foreach ($products as $nid) {
  11. $product = node_load($nid);
  12. $context['subject'] = array(
  13. 'node' => $product
  14. );
  15.  
  16. if ($count == 0) {
  17. $product_table .= "<tr>";
  18. } elseif ($count % variable_get('uc_catalog_grid_display_width', 3) == 0) {
  19. $product_table .= "</tr><tr>";
  20. }
  21.  
  22. $titlelink = l($product->title, "node/$nid", array(
  23. 'html' => TRUE
  24. ));
  25. if (module_exists('imagecache') && ($field = variable_get('uc_image_' . $product->type, '')) && isset($product->$field) && file_exists($product->{$field}[0]['filepath'])) {
  26. $imagelink = l(theme('imagecache', 'product_list', $product->{$field}[0]['filepath'], $product->title, $product->title), "node/$nid", array(
  27. 'html' => TRUE
  28. ));
  29. } else {
  30. $imagelink = '';
  31. }
  32.  
  33. $product_table .= '<td>';
  34. if (variable_get('uc_catalog_grid_display_title', TRUE)) {
  35. $product_table .= '<span class="catalog-grid-title">' . $titlelink . '</span>';
  36. }
  37. if (variable_get('uc_catalog_grid_display_model', TRUE)) {
  38. $product_table .= '<span class="catalog-grid-ref">' . $product->model . '</span>';
  39. }
  40. $product_table .= '<span class="catalog-grid-image">' . $imagelink . '</span>';
  41. if (module_exists('uc_discounts')) {
  42. $discounted_price = uc_discounts_get_discounted_price_for_product($product);
  43. /*$discounted_price = theme("uc_discounts_get_discounted_price_for_product", $product);*/
  44. if (!is_null($discounted_price) && $product->sell_price > $discounted_price) {
  45. if (variable_get('uc_catalog_grid_display_sell_price', TRUE)) {
  46. $product_table .= '<p class="original-sell-price">' . uc_price($product->sell_price, $context) . '</p>';
  47. }
  48. $product_table .= '<span class="field-type-discounted-price">SALE<br /> ' . theme("product_discounted_price", $product, uc_price($discounted_price, $context)) . '</span>';
  49. } else {
  50. if (variable_get('uc_catalog_grid_display_sell_price', TRUE)) {
  51. $product_table .= '<span class="catalog-grid-sell-price">' . uc_price($product->sell_price, $context) . '</span>';
  52. }
  53. }
  54. theme("add_product_price_altering_css", $product);
  55. theme("add_product_price_altering_javascript", $product);
  56. } else {
  57. if (variable_get('uc_catalog_grid_display_sell_price', TRUE)) {
  58. $product_table .= '<span class="catalog-grid-sell-price">' . uc_price($product->sell_price, $context) . '</span>';
  59. }
  60. }
  61. if (module_exists('uc_cart') && variable_get('uc_catalog_grid_display_add_to_cart', TRUE)) {
  62. if (variable_get('uc_catalog_grid_display_attributes', TRUE)) {
  63. $product_table .= theme('uc_product_add_to_cart', $product);
  64. } else {
  65. $product_table .= drupal_get_form('uc_catalog_buy_it_now_form_' . $product->nid, $product);
  66. }
  67. }
  68. $product_table .= '</td>';
  69. $count++;
  70. }
  71.  
  72. $product_table .= "</tr></table></div>";
  73.  
  74. return $product_table;
  75. }

Tényleg örülök, hogy sikerült megoldanunk a problémát.

0
0
simont képe

Köszi! Így tényleg szebb!

0
0

SimonT