我目前正在为一家在线销售艺术品的艺术画廊开发一个网站。我需要开发一些代码来收集和显示有关艺术家的信息(生物,邮件,电子邮件,展览日期......)。我首先尝试使用制造商的功能,只调整翻译,用“艺术家”取代“制造商”,但我很快意识到我是有限的。我不需要将艺术家与其地址联系起来,我需要其他信息。问题是我不知道实现这个的最佳方法是什么,同时保持我的代码干净并使prestashop升级变得容易。
我想我需要制作新的数据库表,如下(展览日期,尚未实施):
CREATE TABLE `artist` (
`id_artist` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(64) NOT NULL,
`date_add` datetime NOT NULL,
`date_upd` datetime NOT NULL,
`active` tinyint(4) NOT NULL DEFAULT '0',
`email` varchar(255) DEFAULT NULL,
`phone` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id_artist`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `artist_lang` (
`id_artist` int(11) NOT NULL,
`id_lang` int(11) NOT NULL,
`name` varchar(255) NOT NULL,
`description` text NOT NULL,
`short_description` text NOT NULL,
`meta_title` varchar(128) NOT NULL,
`meta_keywords` varchar(255) NOT NULL,
`meta_description` varchar(255) NOT NULL,
PRIMARY KEY (`id_artist`,`id_lang`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
我应该将其作为模块,还是直接在核心类中添加艺术家模块和控制器?如果我这样做,我将不得不覆盖产品类。由于我不需要制造商,我应该覆盖制造商类吗?
答案 0 :(得分:0)
我在Prestashop forum上问了同样的问题并得到了很好的建议,如果有人遇到同样的问题,我会在这里总结一下。
无法修改核心类,但应尽可能使用覆盖。
Artist
中创建一个overrides/classes
课程,方法是复制粘贴ManufacturerCore
课程,并用manufacturer
替换artist
的提及,并指定其他内容字段作为实例变量。ArtistController
中创建overrides/controllers
课程,并用manufacturer
artist
的提及
Product
类,并添加id_artist
和artist_name
作为实例变量。修改以下功能,以便将产品与其艺术家相关联:__construct
,getFields
和getProducts
ArtistsAdmin
中创建AdminTab
admin/tabs
的子类,以便后台可用于添加新/编辑艺术家admin/ajax.php
,以便艺术家可以成为后台的查询ProductsAdmin
中的admin/tabs
,以便用户在添加/修改产品时可以选择艺术家img/admin/artist.gif
和img/admin/artists.gif
处理config/defines.inc.php
中的图像文件夹:
定义(' _ARTI_DIR _',_PS_IMG _。' ar /'); 定义(' _PS_ARTI_IMG_DIR _',_PS_IMG_DIR _。' ar /');
在ar
中创建img
文件夹并为所有人设置写入权限
getDistributorLink
的函数覆盖链接,该函数为getSupplierLink
___
),其中制造商使用1个下划线(_
),供应商使用2个下划线(__
)。