Jump to content

Uczę Się Prestashop, Proszę O Pomoc


artur.didit

Recommended Posts

Witam, piszę pierwszy swój moduł po stronie php mam

<?php
class categoryonhomepage extends Module
{
private $_html= '';
  function __construct()
  {
    $this->name = 'categoryonhomepage';
    $this->tab = 'other';
    $this->version = '0.1.0';
    $this->author = '[email protected]';
	$this->ps_versions_compliancy = array('min' => '1.6', 'max' => _PS_VERSION_); // minimalna/maksymalna wersja, na ktorej bedzie dzialal modul
    $this->bootstrap = true;
    parent::__construct();
    $this->displayName = $this->l('Display category on homepage');
    $this->description = $this->l('This module display category image.');
  }
  public function install() {
    parent::install();
    if(!$this->registerHook('displayHome') || !$this->registerHook('displayHeader') ) return false;
    return true;
}
public function uninstall() // usuwamy pola z bazy
	{
		// Delete configuration
		return Configuration::deleteByName('_text_to_show') && parent::uninstall();
	}

	public function getContent() {                                                                                            
    if(Tools::isSubmit('submit_text')) {        //Służy do sprawdzania, czy nastąpiło wysłanie formularza w panelu konfiguracyjnym modułu. Jako parametr podajemy nazwę przycisku.                                                       
      Configuration::updateValue(               //Dzięki tej funkcji możemy w prosty sposób zapisać w bazie danych naszą konfigurację. Jako pierwszy parametr podajemy nazwę klucza, a jako drugi - wartość. Wszystkie stworzone przez nas konfiguracje lądują w bazie w tabelce ps_configuration (ps_ to standardowy przedrostek tabelek PrestaShop w bazie danych, ale w czasie instalacji sklepu mogłeś wybrać inny)
              $this->name.'_text_to_show',
              Tools::getValue('the_text')       //Pobiera zawartość $_POST odpowiadającą zawartości danego pola w formularzu
              );                                                        
    }                                               
    $this->_generateForm();
    return $this->_html;
	}

	private function _generateForm() {                                
    $textToShow=Configuration::get($this->name.'_text_to_show');     //Funkcja get pobiera z kolei dane z bazy. Jako parametr użyj nazwy klucza, który użyłeś przy wprowadzaniu danych.                                                                                     
    $this->_html .= '<form action="'.$_SERVER['REQUEST_URI'].'" method="post">';
    $this->_html .= '<label>'.$this->l('Enter your text: ').'</label>';
    $this->_html .= '<div class="margin-form">';
    $this->_html .= '<input type="text" name="the_text" value="'.$textToShow.'" >';
    $this->_html .= '<input type="submit" name="submit_text" ';
    $this->_html .= 'value="'.$this->l('Update the text').'" class="button" />';
    $this->_html .= '</div>';
    $this->_html .= '</form>';
	}
	public function hookHeader() // dodajemy css do strony
	{
		$this->page_name = Dispatcher::getInstance()->getController();
			$this->context->controller->addCss(($this->_path).'categoryonhomepage.css');
			//$this->context->controller->addJS(($this->_path).'categoryonhomepage.js');
	}
	public function hookHome() {
                                                                                                
    global $smarty, $cookie, $link;
 
  $id_customer = (int)$params['cookie']->id_customer;
  $id_group = $id_customer ? Customer::getDefaultGroupId($id_customer) : _PS_DEFAULT_CUSTOMER_GROUP_;
  $id_lang = (int)$params['cookie']->id_lang;
  $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
  SELECT *
  FROM `'._DB_PREFIX_.'category` c
  LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (c.`id_category` = cl.`id_category` AND `id_lang` = '.$id_lang.')
  LEFT JOIN `'._DB_PREFIX_.'category_group` cg ON (cg.`id_category` = c.`id_category`)
  WHERE level_depth > 2 
  AND c.`active` = 1
  AND cg.`id_group` = '.$id_group.'
  ORDER BY `level_depth` ASC, c.`position` ASC');
  $category = new Category(1);
  $nb = intval(Configuration::get('HOME_categories_NBR'));
 
    global $link;
                 $this->context->smarty->assign(array(
                 'categories' => $result, Category::getRootCategories(intval($params['cookie']->id_lang), true),
                 'link' => $link));
                 
  $this->context->smarty->assign(array(
   'category' => $category,
   'lang' => Language::getIsoById(intval($params['cookie']->id_lang)),
  ));
    return $this->display(__FILE__, 'categoryonhomepage.tpl');
                                                                                                
	}
}
?>

Natomiast w tpl mam

<div id="categoryonhomepage">
 {if isset($categories) AND $categories}
            <ul>
            {foreach from=$categories item=category name=categoryonhomepage}
                {assign var='categoryLink' value=$link->getcategoryLink($category.id_category, $category.link_rewrite)}
                <li class="ajax_block_category {if $smarty.foreach.categoryonhomepage.first}first_item{elseif $smarty.foreach.categoryonhomepage.last}last_item{else}item{/if}">
                <div><a href="{$categoryLink}" title="{$category.legend}" class="category_image"><img src="{$img_cat_dir}{$category.id_category}.jpg" alt="{$category.name}" title="{$category.name}" class="categoryImage" width="190" /></a></div>
                <a href="{$categoryLink}" title="{$category.legend}" class="opis">{$category.id_category}</a>
                </li>
            {/foreach}
            </ul>
    {else}
        <p>{l s='No categories' mod='categoryonhomepage'}</p>
  {/if}
</div>

Nie wyświetla mi wartości {$category.name},{$category.legend}

 

Podgląd działania tego modułu tutaj-> http://drukarnia-kazmierz.pl/pl/

 

W kodzie jest sporo "ćwiczeń" :)

 

Proszę o pomoc ....

Link to comment
Share on other sites

być może to kwestia tego, że przeglądasz front office w jakimś języku, który nie ma zdefiniowanych tłumaczeń dla danej kategorii ?

Zgadza się 

$id_lang = (int)$params['cookie']->id_lang;

 

Zwraca 0 zamiast 1.

 

Poprawiłem na

$id_lang = (int)$params['cookie']->id_lang+1;

i wyświetlają się zmienne prawidłowo.

 

Zastanawia mnie tylko dlaczego nie prawidłowo zapisuje do cookie.

 

Pozdrawiam

Artur

Edited by artur.didit (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...