0

我目前正在为一家在线销售艺术品的美术馆开发网站。我需要开发一些代码来收集和显示有关艺术家的信息(简历、邮件、电子邮件、展览日期……)。我首先尝试使用制造商功能并且只调整翻译,将“制造商”替换为“艺术家”,但我很快意识到我是有限的。我不需要将艺术家与其地址相关联,我需要更多信息。问题是我不知道实现这一点的最佳方法是什么,同时保持我的代码干净并使 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;

我应该把它变成一个模块,还是直接在核心类中添加一个艺术家模块和控制器?如果这样做,我将不得不覆盖产品类。既然我不需要制造商,我应该覆盖制造商类吗?

4

1 回答 1

0

我在Prestashop 论坛上问了同样的问题,并得到了很好的建议,如果有人遇到同样的问题,我会在这里总结。

没有办法修改核心类,但应尽可能使用覆盖。


后台功能

  • 如问题中所述,创建数据库表。
  • 通过复制粘贴类并替换提及by以及将附加字段指定为实例变量来创建一个Artist类。overrides/classesManufacturerCoremanufacturerartist
  • 在by中创建一个ArtistControlleroverrides/controllers并替换提及manufacturerartist
  • 覆盖Product类并添加id_artistartist_name作为实例变量。修改以下函数,使产品与其艺术家链接__constructgetFieldsgetProducts
  • 创建 in 的子ArtistsAdmin类,以便后台可用于添加新/编辑艺术家AdminTabadmin/tabs
  • 在后台启用选项卡(员工->选项卡->添加新)
  • 修改admin/ajax.php以便艺术家可以从后台查询
  • 修改ProductsAdmininadmin/tabs以便用户在添加/编辑产品时可以选择艺术家
  • 为艺术家选项卡创建一个徽标并将其复制img/admin/artist.gifimg/admin/artists.gif
  • 处理中的图像文件夹config/defines.inc.php

    定义('_ARTI_DIR_',_PS_IMG_.'ar/');定义('_PS_ARTI_IMG_DIR_',_PS_IMG_DIR_.'ar/');

  • ar文件夹放入img并为每个人设置写入权限

前台功能(尚未测试,可能缺少一些信息):

  • 用一个名为的函数覆盖链接,该函数getDistributorLink模拟getSupplierLink
  • 覆盖工具以更新 generateHtaccess 函数以包括为供应商重定向建模的艺术家的重定向。我使用了 3 个下划线 ( ___),其中制造商使用 1 个下划线 ( _),供应商使用 2 个下划线 ( __)。
  • 支持新核心文件的主题文件(模板、css)。
  • 如果您想在产品页面上显示艺术家,您还可以创建一个挂钩 extraRight 的模块,或者一个或多个产品页面挂钩。
于 2012-08-05T17:02:48.170 回答