Article View: pl.comp.www.server-side
Article #61339Implementacja parametrów produktów
From: beherit / pn
Date: Wed, 17 Nov 2010 10:19
Date: Wed, 17 Nov 2010 10:19
101 lines
4861 bytes
4861 bytes
Witam,
mam taką pewną zagwozdkę. Chciałbym wykonać uniwersalny konfigurator
parametrów produktów przypisanych do kategorii. Np. mamy kategorię
*lodówki* i wszystkie produkty które dodajemy do lodówek:
1) miałyby parametry:
- wymagalne
- opcjonalne
2) parametry dzieliłyby się na typy:
- text / int / decimal (podawane jako string)
- select, multiselect / radio, checkbox (wybierany ze słownika
przypisanego do parametru)
- text-select (dodawany do słownika danego selecta, jeśli nie zostało w
nim znalezione)
- range (podawane jako zakres np. floatów)
- off (wyłączony w danej akcji)
3) parametry są możliwe do wykonania w akcji:
- dodawania,
- wyszukiwania
gdzieś w tym konieczna jeszcze obsługa języka :). Wymyśliłem sobie taką
strukturę bazy:
nazwy parametrów
CREATE TABLE `param` (
`_param_id` MEDIUMINT(8) UNSIGNED NOT NULL COMMENT 'Parameter ID',
`_language` CHAR(2) NOT NULL,
`_param_name` VARCHAR(64) NOT NULL COMMENT 'Nazwa parametru używana w
label for, oraz jako nazwa pola.',
`_param_label` VARCHAR(64) NOT NULL COMMENT 'Label - opis do pola',
`_type_search`
ENUM('checkbox','select','radio','range','text','int','decimal','text-select','off')
NOT NULL COMMENT 'Parameter type',
`_type_add`
ENUM('checkbox','select','radio','range','text','int','decimal','text-select','off')
NOT NULL COMMENT 'Parameter type',
`_weight` MEDIUMINT(8) UNSIGNED NOT NULL COMMENT 'Important (++ more,
-- less)',
`_status` ENUM('ON','OFF') NOT NULL DEFAULT 'OFF' COMMENT 'Czy
pokazywany w szablonach (oczywiscie musi byc w nich zdefiniowany)',
UNIQUE INDEX `_param_id__language__param_name` (`_param_id`,
`_language`, `_param_name`),
INDEX `FK__node_language` (`_language`),
INDEX `FK_param_param_type` (`_type_search`),
CONSTRAINT `FK__node_language` FOREIGN KEY (`_language`) REFERENCES
`language` (`_language`) ON UPDATE CASCADE ON DELETE NO ACTION
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
ROW_FORMAT=DEFAULT
słowniki parametrów:
CREATE TABLE `param_value` (
`_param_id` MEDIUMINT(8) UNSIGNED NOT NULL,
`_language` CHAR(2) NULL DEFAULT NULL,
`_param_value_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`_param_value_text` VARCHAR(1024) NULL DEFAULT NULL,
`_param_value_int` INT(10) NULL DEFAULT NULL,
`_param_value_float` DECIMAL(12,4) NULL DEFAULT NULL,
UNIQUE INDEX `_param_id__language__param_value_id` (`_param_id`,
`_language`, `_param_value_id`),
INDEX `FK_param_value_language` (`_language`),
PRIMARY KEY (`_param_value_id`),
CONSTRAINT `FK_param_value_param` FOREIGN KEY (`_param_id`) REFERENCES
`param` (`_param_id`) ON UPDATE CASCADE ON DELETE NO ACTION,
CONSTRAINT `FK_param_value_language` FOREIGN KEY (`_language`)
REFERENCES `language` (`_language`) ON UPDATE CASCADE ON DELETE NO ACTION
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
ROW_FORMAT=DEFAULT
iw końcu miejsce ich przechowywania:
CREATE TABLE `node_param` (
`_revision` MEDIUMINT(8) UNSIGNED NOT NULL,
`_param_value_id` INT(10) UNSIGNED NULL DEFAULT NULL,
`_param_value_text` VARCHAR(1024) NULL DEFAULT NULL,
`_param_value_int` INT(10) NULL DEFAULT NULL,
`_param_value_float` DECIMAL(12,4) NULL DEFAULT NULL,
UNIQUE INDEX `_revision__param_id__param_value_id` (`_revision`,
`_param_value_id`),
CONSTRAINT `FK_node_param_param_value` FOREIGN KEY (`_param_value_id`)
REFERENCES `param_value` (`_param_value_id`) ON UPDATE CASCADE ON DELETE
CASCADE,
CONSTRAINT `FK_node_param_node_revision` FOREIGN KEY (`_revision`)
REFERENCES `node_revision` (`_revision`) ON UPDATE CASCADE ON DELETE CASCADE
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
ROW_FORMAT=DEFAULT
czy to dobra ścieżka, a może ktoś zna jakieś fajne i ciekawe
rozwiązanie... bo żeby to zrobić dobrze potrzeba trochę czasu na
pomyślenie co i jak, a to rozwiązanie takie trochę na szybko.
pozdr,p.
Technical Details
Message-ID:
<ic0a7o$bmf$1@inews.gazeta.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mailShow Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail From: beherit / pn <beherit@sprawdzam-raz-w-miesiacu.firenet.eu.org> Newsgroups: pl.comp.www.server-side Subject: Implementacja parametrów produktów Date: Wed, 17 Nov 2010 11:19:16 +0100 Organization: "Portal Gazeta.pl -> http://www.gazeta.pl" Lines: 101 Message-ID: <ic0a7o$bmf$1@inews.gazeta.pl> NNTP-Posting-Host: ip-89-174-118-156.multimo.pl Mime-Version: 1.0 X-Trace: inews.gazeta.pl 1289989176 11983 89.174.118.156 (17 Nov 2010 10:19:36 GMT) X-Complaints-To: usenet@agora.pl NNTP-Posting-Date: Wed, 17 Nov 2010 10:19:36 +0000 (UTC) X-User: beherit00 X-Antivirus: avast! (VPS 101116-1, 2010-11-16), Outbound message X-Antivirus-Status: Clean User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.2.12) Gecko/20101027 Thunderbird/3.1.6 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit