Zen-cart中国家表的管理比较粗糙,特别是在要对应国家下拉列表进行调整时,比如把常用的国家调整到最前面,那么就需要扩展一下国家表字段了。

涉及到国家表管理的是admin/countries.php文件,需要对这个文件做一些改动:
///////////////////////
$cnt
=
$db
->metaColumns(TABLE_COUNTRIES);
if
(!isset(
$cnt
[
strtoupper
(
'countries_name_cn'
)])){
$db
->Execute(
"ALTER TABLE "
.TABLE_COUNTRIES.
" ADD countries_name_cn VARCHAR( 64 ) NULL DEFAULT ''"
);
}
if
(!isset(
$cnt
[
strtoupper
(
'order_by'
)])){
$db
->Execute(
"ALTER TABLE "
.TABLE_COUNTRIES.
" ADD order_by int(11) NOT NULL DEFAULT '0'"
);
}
///////////////////////
然后就是对插入编辑时的SQL进行修改,当然接下来还有修改表单(这里忽略)。

这样可以添加中文名称和排序码,排序码添加了之后还要修改两个获取国家下拉列表的函数(前台后台分别对应一个):
#includes/functions/functions_lookups.php
function
zen_get_countries(
$countries_id
=
''
,
$with_iso_codes
= false) {
global
$db
;
$countries_array
=
array
();
if
(zen_not_null(
$countries_id
)) {
}
else
{
///////////////////////
$cnt
=
$db
->metaColumns(TABLE_COUNTRIES);
if
(!isset(
$cnt
[
strtoupper
(
'order_by'
)])){
$db
->Execute(
"ALTER TABLE "
.TABLE_COUNTRIES.
" ADD order_by int(11) NOT NULL DEFAULT '0'"
);
}
///////////////////////
$countries
= "select countries_id, countries_name
from
" . TABLE_COUNTRIES . "
order by order_by, countries_name";
$countries_values
=
$db
->Execute(
$countries
);
while
(!
$countries_values
->EOF) {
$countries_array
[] =
array
(
'countries_id'
=>
$countries_values
->fields[
'countries_id'
],
'countries_name'
=>
$countries_values
->fields[
'countries_name'
]);
$countries_values
->MoveNext();
}
}
return
$countries_array
;
}
#admin/includes/functions/general.php
function
zen_get_countries(
$default
=
''
) {
global
$db
;
$countries_array
=
array
();
if
(
$default
) {
$countries_array
[] =
array
(
'id'
=>
''
,
'text'
=>
$default
);
}
///////////////////////
$cnt
=
$db
->metaColumns(TABLE_COUNTRIES);
if
(!isset(
$cnt
[
strtoupper
(
'countries_name_cn'
)])){
$db
->Execute(
"ALTER TABLE "
.TABLE_COUNTRIES.
" ADD countries_name_cn VARCHAR( 64 ) NULL DEFAULT ''"
);
}
if
(!isset(
$cnt
[
strtoupper
(
'order_by'
)])){
$db
->Execute(
"ALTER TABLE "
.TABLE_COUNTRIES.
" ADD order_by int(11) NOT NULL DEFAULT '0'"
);
}
///////////////////////
$countries
=
$db
->Execute("select countries_id, countries_name,countries_name_cn
from
" . TABLE_COUNTRIES . "
order by order_by, countries_name");
while
(!
$countries
->EOF) {
$countries_array
[] =
array
(
'id'
=>
$countries
->fields[
'countries_id'
],
'text'
=>
$countries
->fields[
'countries_name'
].
" - "
.
$countries
->fields[
'countries_name_cn'
]);
$countries
->MoveNext();
}
return
$countries_array
;
}


函数中加入了判断对应字段是否存在的逻辑,防止出错。
