Jump to content
  • 0

Dodatkowe pole w atrybutach


inaktiv

Question

Witam, chciałbym dodać dodatkowe pole do atrybutów w Presta 1.5, chodzi mi aby stworzyć tooltip z moim tekstem do każdego atrybutu na stronie produktu.

 

Znalazłem pewne rozwiązanie na stronie http://prestashopkrakow.pl/dodanie-dodatkowego-pola-przy-wartosci-atrybutu-presta-shop-1-6/

wszystko zrobione jak w linku, ładnie zapisuje do bazy ale nie wyświetla się nic na stronie produktu.

 

Tzn. przykładowo <p>{$price}</p> Tak jak w linku nie wyświetla nic.

 

Jak się do tego odnieść?

Link to comment
Share on other sites

18 answers to this question

Recommended Posts

  • 0

Podejrzewam ze będzie musiał to sobie wyciągnać z $groups

Przepraszam ale za bardzo nie kumam jeszcze kodu presty, możesz bardziej to rozwinąć.

Załóżmy dodałem kolumny w ps_attribute o nazwie attrtext i wg tego dodałem $attrtext w Attribute.php oraz pole tekstowe w AdminAttributeController.php.

 

Na stronie atrybutu wszystko ładnie wygląda, zapisuje do bazy, w phpmyadmin wszystko pięknie widnieje tylko nie wiem jak to wyciągnąć do product.tpl.

 

Załóżmy $attrtext tak jak dodałem w Attributes.php nie zwraca nic.

Link to comment
Share on other sites

  • 0

Wydumpuj sobie group i zobacz czy się wyświetla, nie znam tej modyfikacji jednak zakładam ze dodaje pola tak samo jak kolor etc. więc żeby się dostać do tego kolor nie wystarczy wpisać w pliku {$color} tylko trzeba go wyciągnąć z tablicy.

to ta sama tabela co pobiera kolor dla miniaturki atrybutu kolor, w phpmyadmin wszystko widnieje ładnie w tabeli ps_attribute, jest kolumna za kolumną z kolorami minaturek

Link to comment
Share on other sites

  • 0

to ta sama tabela co pobiera kolor dla miniaturki atrybutu kolor, w phpmyadmin wszystko widnieje ładnie w tabeli ps_attribute, jest kolumna za kolumną z kolorami minaturek

-- phpMyAdmin SQL Dump

-- version 4.1.14

-- http://www.phpmyadmin.net

--

-- Host: 127.0.0.1

-- Generation Time: 07 Kwi 2016, 17:11

-- Server version: 5.6.17

-- PHP Version: 5.5.12

 

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";

SET time_zone = "+00:00";

 

 

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=[spam-filter]CHARACTER_SET_CLIENT */;

/*!40101 SET @OLD_CHARACTER_SET_RESULTS=[spam-filter]CHARACTER_SET_RESULTS */;

/*!40101 SET @OLD_COLLATION_CONNECTION=[spam-filter]COLLATION_CONNECTION */;

/*!40101 SET NAMES utf8 */;

 

--

-- Database: `usb_db`

--

 

-- --------------------------------------------------------

 

--

-- Struktura tabeli dla tabeli `ps_attribute`

--

 

CREATE TABLE IF NOT EXISTS `ps_attribute` (

  `id_attribute` int(10) unsigned NOT NULL AUTO_INCREMENT,

  `id_attribute_group` int(10) unsigned NOT NULL,

  `color` varchar(32) DEFAULT NULL,

  `position` int(10) unsigned NOT NULL DEFAULT '0',

  `attrtext` varchar(256) NOT NULL,

  `atprice` decimal(6,2) NOT NULL,

  PRIMARY KEY (`id_attribute`),

  KEY `attribute_group` (`id_attribute_group`)

) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=41 ;

 

--

-- Zrzut danych tabeli `ps_attribute`

--

 

INSERT INTO `ps_attribute` (`id_attribute`, `id_attribute_group`, `color`, `position`, `attrtext`, `atprice`) VALUES

(21, 4, '#ffffff', 0, '', '0.00'),

(22, 4, '#000000', 1, '', '0.00'),

(23, 4, '#0000ff', 2, '', '0.00'),

(24, 5, '#ffffff', 0, '', '0.00'),

(25, 5, '#000000', 1, '', '0.00'),

(26, 5, '#ff0000', 2, '', '0.00'),

(27, 14, '', 0, '<p>dodaktowy opis</p>', '25.99'),

(28, 6, '#000000', 0, '', '0.00'),

(29, 6, '#ffffff', 1, '', '0.00'),

(30, 6, '#ffff00', 2, '', '0.00'),

(31, 7, '', 0, '', '0.00'),

(32, 7, '', 1, '', '0.00'),

(33, 7, '', 2, '', '0.00'),

(34, 8, '', 0, '<p>gjdjdghjhgjhgjfhgj</p>', '0.00'),

(35, 8, '', 1, '', '0.00'),

(36, 8, '', 2, '', '0.00'),

(37, 10, '', 0, '<p>Opis</p>', '34.00'),

(38, 12, '', 0, '', '0.00'),

(39, 12, '', 1, '', '0.00'),

(40, 12, '', 2, '', '0.00');

 

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;

/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

 

Link to comment
Share on other sites

  • 0

14 =>
array (size=5)
'name' => string 'Akcesoria dodatkowe' (length=19)
'group_type' => string 'color' (length=5)
'default' => int 27
'attributes' =>
array (size=1)
27 => string 'Goodram standard' (length=16)
'attributes_quantity' =>
array (size=1)
27 => int 0

 

Jak dla mnie to powinno jeszcze być 'attrtext' =>

Link to comment
Share on other sites

  • 0

Cały dump

 

array (size=8)
4 =>
array (size=5)
'name' => string 'Kolor blaszki' (length=13)
'group_type' => string 'color' (length=5)
'default' => int 21
'attributes' =>
array (size=3)
21 => string 'Biały' (length=6)
22 => string 'Czarny' (length=6)
23 => string 'Niebieski' (length=9)
'attributes_quantity' =>
array (size=3)
21 => int 0
22 => int 0
23 => int 0
5 =>
array (size=5)
'name' => string 'Kolor obudowy' (length=13)
'group_type' => string 'color' (length=5)
'default' => int 24
'attributes' =>
array (size=3)
24 => string 'Biały' (length=6)
25 => string 'Czarny' (length=6)
26 => string 'Czerwony' (length=8)
'attributes_quantity' =>
array (size=3)
24 => int 0
25 => int 0
26 => int 0
6 =>
array (size=5)
'name' => string 'Kolor plastiku' (length=14)
'group_type' => string 'color' (length=5)
'default' => int 28
'attributes' =>
array (size=3)
28 => string 'Czarny' (length=6)
29 => string 'Biały' (length=6)
30 => string 'Żółty' (length=8)
'attributes_quantity' =>
array (size=3)
28 => int 0
29 => int 0
30 => int 0
7 =>
array (size=5)
'name' => string 'Kolor skóry' (length=12)
'group_type' => string 'radio' (length=5)
'default' => int 31
'attributes' =>
array (size=3)
31 => string 'Czarny' (length=6)
32 => string 'Brązowy' (length=8)
33 => string 'Czerwony' (length=8)
'attributes_quantity' =>
array (size=3)
31 => int 0
32 => int 0
33 => int 0
8 =>
array (size=5)
'name' => string 'Kolor drewna' (length=12)
'group_type' => string 'radio' (length=5)
'default' => int 34
'attributes' =>
array (size=3)
34 => string 'Beżowy' (length=7)
35 => string 'Jasny brąz' (length=11)
36 => string 'Ciemny brąz' (length=12)
'attributes_quantity' =>
array (size=3)
34 => int 0
35 => int 0
36 => int 0
10 =>
array (size=5)
'name' => string 'Pojemność' (length=11)
'group_type' => string 'radio' (length=5)
'default' => int 37
'attributes' =>
array (size=1)
37 => string '2GB USB2.0' (length=10)
'attributes_quantity' =>
array (size=1)
37 => int 0
12 =>
array (size=5)
'name' => string 'Wgrywanie danych' (length=16)
'group_type' => string 'color' (length=5)
'default' => int 38
'attributes' =>
array (size=3)
38 => string 'do 50 MB zwykłe, kasowalne' (length=27)
39 => string 'do 100 MB zwykłe, kasowalne' (length=28)
40 => string 'do 500 MB zwykłe, kasowalne' (length=28)
'attributes_quantity' =>
array (size=3)
38 => int 0
39 => int 0
40 => int 0
14 =>
array (size=5)
'name' => string 'Akcesoria dodatkowe' (length=19)
'group_type' => string 'color' (length=5)
'default' => int 27
'attributes' =>
array (size=1)
27 => string 'Goodram standard' (length=16)
'attributes_quantity' =>
array (size=1)
27 => int 0

Link to comment
Share on other sites

  • 0

Wygląda tak jakby nowe pole nie zostało przekazane do tablicy, może coś pominąłeś?

Tak to wygląda a więc po kolei:

 

Kolumna w tabeli ps_attribute jest jak było widać wcześniej i z pola tesktowego na stronie attrybutu wyświetla się zawartość więc od strony admina jest ok coś nie tak z front office.

 

Pole to $attrtext.

 

Wycinek kodu z Attributes.php to co zmieniłem.

class AttributeCore extends ObjectModel
{
	/** @var integer Group id which attribute belongs */
	public $id_attribute_group;

	/** @var string Name */
	public $name;
	public $attrtext;
	public $color;
	public $position;
	public $default;

	/**
	 * @see ObjectModel::$definition
	 */
	public static $definition = array(
		'table' => 'attribute',
		'primary' => 'id_attribute',
		'multilang' => true,
		'fields' => array(
			'id_attribute_group' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true),
			'color' => 				array('type' => self::TYPE_STRING, 'validate' => 'isColor'),
			'position' => 			array('type' => self::TYPE_INT, 'validate' => 'isInt'),

			'attrtext' => 			array('type' => self::TYPE_HTML, 'lang' => false, 'validate' => 'isCleanHtml','required' => false),
			'name' => 				array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'required' => true, 'size' => 64),
		)
	);

Następnie ten sam plik ale poniżej w funkcji getAttributes()

public static function getAttributes($id_lang, $not_null = false)
	{
		if (!Combination::isFeatureActive())
			return array();

		return Db::getInstance()->executeS('
			SELECT DISTINCT ag.*, agl.*, a.`id_attribute`, a.`attrtext`, al.`name`, agl.`name` AS `attribute_group`
			FROM `'._DB_PREFIX_.'attribute_group` ag
			LEFT JOIN `'._DB_PREFIX_.'attribute_group_lang` agl
				ON (ag.`id_attribute_group` = agl.`id_attribute_group` AND agl.`id_lang` = '.(int)$id_lang.')
			LEFT JOIN `'._DB_PREFIX_.'attribute` a
				ON a.`id_attribute_group` = ag.`id_attribute_group`
			LEFT JOIN `'._DB_PREFIX_.'attribute_lang` al
				ON (a.`id_attribute` = al.`id_attribute` AND al.`id_lang` = '.(int)$id_lang.')
			'.Shop::addSqlAssociation('attribute_group', 'ag').'
			'.Shop::addSqlAssociation('attribute', 'a').'
			'.($not_null ? 'WHERE a.`id_attribute` IS NOT NULL AND al.`name` IS NOT NULL AND agl.`id_attribute_group` IS NOT NULL' : '').'
			ORDER BY agl.`name` ASC, a.`position` ASC
		');
	}

Następnie w pliku AdminAttributesGroupsController.php w funkcji renderFormAttributes()

public function renderFormAttributes()
	{
		$attributes_groups = AttributeGroup::getAttributesGroups($this->context->language->id);

		$this->table = 'attribute';
		$this->identifier = 'id_attribute';

		$this->fields_form = array(
			'legend' => array(
				'title' => $this->l('Values'),
				'image' => '../img/admin/asterisk.gif',
			),
			'input' => array(
				array(
					'type' => 'select',
					'label' => $this->l('Attribute group:'),
					'name' => 'id_attribute_group',
					'required' => true,
					'options' => array(
						'query' => $attributes_groups,
						'id' => 'id_attribute_group',
						'name' => 'name'
					),
					'desc' => $this->l('Choose the group of the attribute')
				),
				array(
					'type' => 'text',
					'label' => $this->l('Value:'),
					'name' => 'name',
					'lang' => true,
					'size' => 33,
					'required' => true,
					'hint' => $this->l('Invalid characters:').' <>;=#{}'
				),
				array(
					'type' => 'textarea',
					'label' => $this->l('Dodatkowy tekst'),
					'name' => 'attrtext',
					'lang' => false,
					'cols' => 100,
					'rows' => 15,
					'class' => 'rte',
					'autoload_rte' => true,
					'required' => false
				),
				array(
					'type' => 'text',
					'label' => $this->l('Cena:'),
					'name' => 'atprice',
					'lang' => false,
					'required' => false,
					'size' => 64,
					'hint' => $this->l('Invalid characters:').' <>;=#{}'
				)
			)
		);

Wydaje mi się że wszystko gra od strony admina ale nie mogę tego wyciągnąć do product.tpl.

 

Jesteś w stanie pomóc? Dzięki za dotychczasową pomoc i twój czas.

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...