Я создал дополнительное поле, заполняемое пользователем '
cityall' с типом
select, а также создал таблицу '
jos_vm_cityall' в базе, по аналогии с таблицей '
jos_vm_state', в которой есть код страны, имя города и индекс (cityall_id, country_id, cityall_name, zip_1_code, zip_2_code(на всякий случай второй индекс))
в файле
ps_userfield.php создал следующее:
case 'cityall':
echo $ps_html->dynamic_cityall_lists( "country", "cityall", $db->sf('country', true), $db->sf('cityall', true, false) );
echo "<noscript>\n";
$ps_html->list_cityall("cityall", $db->sf('cityall', true, false), "", "id=\"cityall_field\"");
echo "</noscript>\n";
break;
а в файле
ps_html.php function list_cityall($list_name,$selected_item="", $cityall_id="", $extra="") {
global $VM_LANG;
$db = new ps_DB;
$q = 'SELECT country_name, cityall_name, zip_1_code , zip_2_code
FROM #__{vm}_cityall s, #__{vm}_country c
WHERE s.country_id = c.country_id';
if( !empty( $country_id )) {
$q .= ' AND c.country_id='.(int)$country_id;
}
$q .= "\nORDER BY country_name, cityall_name";
$db->query( $q );
$list = Array();
$list["0"] = $VM_LANG->_('PHPSHOP_SELECT');
$list["NONE"] = "not listed";
$country = "";
while( $db->next_record() ) {
if( $country != $db->f("country_name")) {
$list[] = "------- ".$db->f("country_name")." -------";
$country = $db->f("country_name");
}
$list[$db->f("zip_1_code")] = $db->f("cityall_name");
}
$this->dropdown_display($list_name, $selected_item, $list,"","",$extra);
return 1;
}
function dynamic_cityall_lists( $country_list_name, $cityall_list_name, $selected_country_code="", $selected_cityall_code="" ) {
global $vendor_country_3_code, $VM_LANG, $vm_mainframe, $mm_action_url, $page;
$db = new ps_DB;
if( empty( $selected_country_code )) {
$selected_country_code = $vendor_country_3_code;
}
if( empty( $selected_cityall_code )) {
$selected_cityall_code = "originalPos";
} else {
$selected_cityall_code = "'".$selected_cityall_code."'";
}
$db->query( "SELECT c.country_id, c.country_3_code, s.cityall_name, s.zip_1_code
FROM #__{vm}_country c
LEFT JOIN #__{vm}_cityall s
ON c.country_id=s.country_id OR s.country_id IS NULL
ORDER BY c.country_id, s.cityall_name" );
if( $db->num_rows() > 0 ) {
if( !vmIsAdminMode() ) {
$vm_mainframe->addScript( $mm_action_url.'includes/js/mambojavascript.js');
$vm_mainframe->addScript( $mm_action_url.'includes/js/joomla.javascript.js');
}
// Build the State lists for each Country
$script = "<script language=\"javascript\" type=\"text/javascript\">//<![CDATA[\n";
$script .= "<!--\n";
$script .= "var originalOrder = '1';\n";
$script .= "var originalPos = '$selected_country_code';\n";
$script .= "var cityalls = new Array(); // array in the format [key,value,text]\n";
$i = 0;
$prev_country = '';
while( $db->next_record() ) {
$country_3_code = $db->f("country_3_code");
if( $db->f('cityall_name') ) {
// Add 'none' to the list of countries that have states:
if( $prev_country != $country_3_code && $page == 'tax.tax_form' ) {
$script .= "cityalls[".$i++."] = new Array( '".$country_3_code."',' - ','".$VM_LANG->_('PHPSHOP_NONE')."' );\n";
}
elseif( $prev_country != $country_3_code ) {
$script .= "cityalls[".$i++."] = new Array( '".$country_3_code."','',' -= ".$VM_LANG->_('PHPSHOP_SELECT')." =-' );\n";
}
$prev_country = $country_3_code;
// array in the format [key,value,text]
$script .= "cityalls[".$i++."] = new Array( '".$country_3_code."','".$db->f("zip_1_code")."','".addslashes($db->f("cityall_name"))."' );\n";
}
else {
$script .= "cityalls[".$i++."] = new Array( '".$country_3_code."',' - ','".$VM_LANG->_('PHPSHOP_NONE')."' );\n";
}
}
$script .= "
function changecityallList() {
var selected_country = null;
for (var i=0; i<document.adminForm.".$country_list_name.".length; i++)
if (document.adminForm.".$country_list_name."[i].selected)
selected_country = document.adminForm.".$country_list_name."[i].value;
changeDynaList('".$cityall_list_name."',cityalls,selected_country, originalPos, originalOrder);
}
writeDynaList( 'class=\"inputbox\" name=\"".$cityall_list_name."\" size=\"1\" id=\"cityall\"', cityalls, originalPos, originalPos, $selected_cityall_code );
//-->
//]]></script>";
return $script;
}
}
я все делал по аналогии с регионами, т.к. регионы мне не нужны, а вот города нужны.
Не знаю что конкретно за что отвечает, но вот что получилось:
в таблице '
jos_vm_user_info' поле добавилось новое поле '
cityall' и туда записывает нужный мне индекс, если в строчке ставить
// array in the format [key,value,text]
$script .= "cityalls[".$i++."] = new Array( '".$country_3_code."','".$db->f("zip_1_code")."','".addslashes($db->f("cityall_name"))."' );\n";
или выбранный город, если ставлю
// array in the format [key,value,text]
$script .= "cityalls[".$i++."] = new Array( '".$country_3_code."','".$db->f("cityall_name")."','".addslashes($db->f("cityall_name"))."' );\n";
но сам город и индекс в полях '
city' и '
zip' не меняется.
Как мне заменять эти поля из моего выбранного города?
наверняка просто где-то что-то добавить), типа в файл '
ps_userfield.php'
case 'zip':
echo $ps_html->dynamic_cityall_lists( "country", "cityall", $db->sf('country', true), $db->sf('cityall', true, false) );
echo "<noscript>\n";
$ps_html->list_cityall("cityall", $db->sf('cityall', true, false), "", "id=\"cityall_field\"");
echo "</noscript>\n";
break;
только это не срабатывает и я не знаю почему именно. Со структурой программирования в Joomla вообще не знаком (
Подскажите, как мне сделать так, что бы в таблице '
jos_vm_user_info' менялось не последнее поле '
cityall', а именно '
city' и '
zip'