类别的Php输出

类别的Php输出,php,ajax,categories,Php,Ajax,Categories,我有一家店铺,里面有超过3万个类别,几乎不可能在管理中编辑产品,因为它在产品编辑页面中处理类别选择的方式并不是专为这么多类别设计的。它装载时间很长,有时甚至会崩溃。这是一个简单的选择框,我想知道可以做什么 我需要ajax才能工作吗 代码如下: <?php function custom_catalog_tree($category_id=0, $depth=1, $count=0) { $output = ''; if ($category_id == 0) { $output .=

我有一家店铺,里面有超过3万个类别,几乎不可能在管理中编辑产品,因为它在产品编辑页面中处理类别选择的方式并不是专为这么多类别设计的。它装载时间很长,有时甚至会崩溃。这是一个简单的选择框,我想知道可以做什么

我需要ajax才能工作吗

代码如下:

<?php function custom_catalog_tree($category_id=0, $depth=1, $count=0) {

$output = '';

if ($category_id == 0) {
$output .= '<div class="checkbox" id="category-id-'. $category_id .'"><label>'. functions::form_draw_checkbox('categories[]', '0', (isset($_POST['categories']) && in_array('0', $_POST['categories'], true)) ? '0' : false, 'data-name="'. htmlspecialchars(language::translate('title_root', 'Root')) .'" data-priority="0"') .' '. functions::draw_fonticon('fa-folder', 'title="'. language::translate('title_root', 'Root') .'" style="color: #cccc66;"') .' ['. language::translate('title_root', 'Root') .']</label></div>' . PHP_EOL;
}

// Output categories
$categories_query = database::query(
  "select c.id, ci.name
  from ". DB_TABLE_CATEGORIES ." c
  left join ". DB_TABLE_CATEGORIES_INFO ." ci on (ci.category_id = c.id and ci.language_code = '". language::$selected['code'] ."')
  where c.parent_id = '". (int)$category_id ."'
  order by c.priority asc, ci.name asc;"
);

while ($category = database::fetch($categories_query)) {
  $count++;

  $output .= '  <div class="checkbox"><label>'. functions::form_draw_checkbox('categories[]', $category['id'], true, 'data-name="'. htmlspecialchars($category['name']) .'" data-priority="'. $count .'"') .' '. functions::draw_fonticon('fa-folder fa-lg', 'style="color: #cccc66; margin-left: '. ($depth*1) .'em;"') .' '. $category['name'] .'</label></div>' . PHP_EOL;

  if (database::num_rows(database::query("select * from ". DB_TABLE_CATEGORIES ." where parent_id = '". $category['id'] ."' limit 1;")) > 0) {
    $output .= custom_catalog_tree($category['id'], $depth+1, $count);
  }
}

database::free($categories_query);

return $output;
}

echo custom_catalog_tree();
?>

我建议您使用搜索框而不是选择框。如果可以,写下一个查询,用ajax搜索产品类别。使用select*from table_name进行搜索查询,其中类别如%your_value%

您可以使用插件轻松处理此问题。 它提供了一个建议下拉列表,用户可以在其中键入和筛选下拉列表值

在服务器端,您必须创建web服务以按名称获取类别

浏览“加载远程数据”部分


您真的需要在选择框中显示30k选项吗?它是用于管理后端的。我有这么多的类别,是的,我需要将各种类别附加到产品上。一个拥有超过30000个类别的商店。。。?你认为你应该重新设计你的商店/类别,而不是试图更快地展示它们。没有人的大脑能处理3万个类别,根本不值钱。真的是在谈论类别,还是我们更喜欢谈论标签之类的东西?可能连浏览器都无法在选择框中处理30k选项。。嗯,这取决于计算机资源,但我想这是一个糟糕的解决方案。我不认为显示3万个类别是一个好主意,可能需要重新设计系统。如果你真的这么做了,我敢打赌会有一种只按需加载类别的方法。例如,如果用户向下滚动超过20个类别,则加载前20个类别。我管理了ajax搜索,而不是选择框,但我无法让它显示页面刷新后选中的类别。下面是我的代码的一小部分:'+'