Jump to content

Dostęp do zmiennych nadpisanego produktu spoza modułu


Recommended Posts

Witam, mam stworzony moduł do wyświetlania galerii zdjęć z URL z dodaną funkcją do produktu o nazwie getImagesFromUrl(), która pobiera z bazy URL-e zdjęć dla danego produktu. Problem polega na tym, że chciałbym ją wykorzystać w szablonach innych modułów (tych z themes/nazwatheme/modules). Niestety dostaję błąd.

 

Kod funkcji z imagesfromurl/override/classes/Product.php:

<?php

class Product extends ProductCore {
    
    public function getImagesFromUrl()
    {
        $result = Db::getInstance()->ExecuteS('SELECT * FROM `'._DB_PREFIX_.'product_image_from_url` WHERE id_product = ' . (int)$this->id . ' ORDER BY `position`');
if (!$result)
        {
            return '';
        }


        return $result;
    }
}

Wykorzystanie w product.tpl:

{assign var='imagesFromUrl' value=$product->getImagesFromUrl()}

// ...

{else if count($imagesFromUrl) > 0}
    <span id="view_full_size">
        <img src="{$imagesFromUrl[0]['image_url']|escape:'html'}" id="bigpic" alt="testowy obrazek">
    <span class="span_link">{l s='Maximize'}</span>
    </span>
{else}

 

Natomiast jeśli próbuję wykorzystać tę funkcję w blocknewproducts/blocknewproducts.tpl:

{assign var='imagesFromUrl' value=$product->getImagesFromUrl()}
                        
{if count($imagesFromUrl) > 0}
         <img src="{$imagesFromUrl[0]['image_url']|escape:'html'}" alt="{$product.legend|escape:html:'UTF-8'}" />
{else}

I dostaję wtedy błąd:

( ! ) Fatal error: Call to a member function getImagesFromUrl() on a non-object in /home/prestashop/public_html/cache/smarty/compile/dd/91/73/dd9173d435e5e6ba921d3a6f9f47ee3fc1ef360c.file.blocknewproducts.tpl.php on line 55

Co z tym zrobić?

Edited by PrestaWarrior (see edit history)
Link to comment
Share on other sites

a masz zmienną $product z obiektem (produkt) przekazaną do tablicy smarty ? wygląda na to, że nie :)

 

 

W kodzie modułu (blocknewproducts.php) mam coś takiego:

$newProducts = false;
if (Configuration::get('PS_NB_DAYS_NEW_PRODUCT'))
    $newProducts = Product::getNewProducts((int) $params['cookie']->id_lang, 0, (int)Configuration::get('NEW_PRODUCTS_NBR'));
if (!$newProducts && !Configuration::get('PS_BLOCK_NEWPRODUCTS_DISPLAY'))
    return;
$this->smarty->assign(array(
    'new_products' => $newProducts,
    'mediumSize' => Image::getSize(ImageType::getFormatedName('medium')),
));

Z tego co widzę metoda getNewProducts korzysta z metody getProductsProperties, która zwraca tablicę produktów. Co muszę zrobić, żeby otrzymać wszystkie nowe produkty jako obiekty?

Link to comment
Share on other sites

utworzyć tablicę z obiektami i dodać ją do smarty, ale szczerze mówiąc... nie warto

to co bym zrobił ja to zmienił funkcję o której mówisz, albo jeszcze lepiej - utworzył dodatkową.

public static function getImagesFromUrlbyID($id)
    {
        $result = Db::getInstance()->ExecuteS('SELECT * FROM `'._DB_PREFIX_.'product_image_from_url` WHERE id_product = ' . (int)$id . ' ORDER BY `position`');
if (!$result)
        {
            return '';
        }


        return $result;
    }

wtedy w pliku tpl możesz korzystać z {Product::getImagesFromUrlbyID(12)}

 

zamiast 12 podstawiasz id produktu.

Link to comment
Share on other sites

×
×
  • Create New...