【问题标题】:OpenCart: How to accurately populate oc_category_pathOpenCart:如何准确填充 oc_category_path
【发布时间】:2013-02-16 05:13:12
【问题描述】:

我已使用在线服务将数据从我的其他电子商务网站传输到 OpenCart,并且一切似乎都已正确传输。

但是,产品类别存在一个问题。类别已转移到oc_category 表;但是,如果我希望能够在管理员中编辑我的类别,似乎还有另一个名为 oc_category_path 的表需要填充。

你知道这个表是什么以及我如何正确地填充它(我想手动填充)。确切地说,path_idlevel 是什么,是什么决定了一个类别的级别?

相关表格:

CREATE TABLE `oc_category` (
  `category_id` int(11) NOT NULL AUTO_INCREMENT,
  `image` varchar(255) DEFAULT NULL,
  `parent_id` int(11) NOT NULL DEFAULT '0',
  `top` tinyint(1) NOT NULL,
  `column` int(3) NOT NULL,
  `sort_order` int(3) NOT NULL DEFAULT '0',
  `status` tinyint(1) NOT NULL,
  `date_added` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `date_modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`category_id`)
) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=utf8

CREATE TABLE `oc_category_description` (
  `category_id` int(11) NOT NULL,
  `language_id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `description` text NOT NULL,
  `meta_description` varchar(255) NOT NULL,
  `meta_keyword` varchar(255) NOT NULL,
  `u_title` varchar(255) NOT NULL,
  `u_h1` varchar(255) NOT NULL,
  `u_h2` varchar(255) NOT NULL,
  PRIMARY KEY (`category_id`,`language_id`),
  KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

CREATE TABLE `oc_category_path` (
  `category_id` int(11) NOT NULL,
  `path_id` int(11) NOT NULL,
  `level` int(11) NOT NULL,
  PRIMARY KEY (`category_id`,`path_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

【问题讨论】:

    标签: mysql e-commerce opencart


    【解决方案1】:

    如果您的 oc 存储中的类别是根类别,它会在路径表中获取一个条目,例如“category_id,category_id,0”。 如果该类别有一个子类别,它将在表中获得两个条目,即:-“category_id,category_id,1”以及“category_id,parent_id,0”。

    如果那个孩子有一个它自己的孩子,那么这个新孩子将有三个这样的条目:-
    "category_id,category_id,2"
    "category_id,parent_id,1"
    "category_id,parents parent category_id,0"

    为了说明这一点,假设一个类别的 category_id 为“14”。 它是 category_id 为“11”的类别的第一个子项。 该类别的 category_id 为“11”是类别 ID 为“1”的类别中的子类别。 (1>11>14 显示在管理面板中,除了名称而不是 category_id)

    上面将有 3 个这样的条目:
    "14","14","2"
    "14","11","1"
    "14","1","0"

    所以它的根类别将得到 0,下一个得到 1,然后是 2,依此类推,这一切都取决于它向下的类别级别。

    我希望能很好地解释事情。

    至于填充它,最简单的方法,但不是一个完整的方法,就是创建带有“category_id,category_id,0”的表。这将使他们出现在管理面板中。如果您然后单击“修复”,它将正确生成此表。

    或者,您必须逐步检查您的类别表,使用它的 parent_id 创建一个数组,查找该 parent_id 的 parent_id 并将其添加到数组中,等等。当数组完成时,即不再有父级,将它们添加到具有正确“级别”的表中将是一项简单的任务。

    仅供参考,还有另一个表也需要填充,category_to_store,非常简单的“category_id,store_id”。如果没有此表,您将无法在商店中看到您的类别。

    【讨论】:

    • 感谢您的回答,它帮助了我。但我相信有一个错字。在您的示例中,我认为“14”、“10”、“0”应该是“14”、“1”、“0”。
    • 你说得对,谢谢。我已经编辑了答案以反映这一点。
    猜你喜欢
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-13
    • 1970-01-01
    • 2021-08-21
    相关资源
    最近更新 更多