Как устроены поля типа связь внутри?
#1
Отправлено 08 Июль 2013 - 13:41
#2
Отправлено 08 Июль 2013 - 15:15
"default_value" - "значение по умолчанию" (привет, КО, как говорится). Оно существует для полей любого типа, связь ничем не отличается.
#3
Отправлено 08 Июль 2013 - 15:20
#4
Отправлено 08 Июль 2013 - 15:31
#5
Отправлено 11 Июль 2013 - 02:24
// Массив данных с "русскими" именами полей
// Author: --- WonderTalik, July 11, 2013
function data_table_w($name_table, $where = "", $return_rows = "1")
{
//id поля связи в type_field
$id_type_relations = 5;
// получаем id таблицы по ее имени
$sqlQuery = "SELECT * FROM " . TABLES_TABLE . " WHERE name_table='$name_table'";
$result = sql_query($sqlQuery);
$table = mysql_fetch_array($result);
$table_id = $table['id'];
if ($table_id) {
$table = get_table($table_id);
$table_fields = get_table_fields($table);
// формируем набор полей и заменяем имена в условии
foreach ($table_fields as $one_field) {
$fields[$one_field['int_name']]['name'] = $one_field['name_field'];
$fields[$one_field['int_name']]['type_field']['id'] = $one_field['type_field'];
switch ($one_field['type_field']) {
case $id_type_relations:
$w_tmp = explode("|", $one_field['type_value']);
//id таблицы связи
$fields[$one_field['int_name']]['type_field']['id_table_r'] = $w_tmp[0];
//возможно стоит переписать этот кусок с использованием get_table_fields, вместо простой конкатенации
$fields[$one_field['int_name']]['type_field']['id_field_r'] = "f" . $w_tmp[1];
break;
}
$where = str_replace("`" . $one_field['name_field'] . "`", $one_field['int_name'], $where);
}
// получаем строку данных из таблицы и заменяем внутрение имена полей на внешние
$sqlQuery = "SELECT * FROM " . DATA_TABLE . $table_id . ($where ? " WHERE $where" : "") . (($return_rows != "all") ? " LIMIT $return_rows" : "");
$result = sql_query($sqlQuery);
while ($row = sql_fetch_assoc($result)) {
foreach ($row as $int_name => $value) {
switch ($fields[$int_name]['type_field']['id']) {
case $id_type_relations:
$sqlQuery = "SELECT " . $fields[$int_name]['type_field']['id_field_r'] . " as field_value FROM
" . DATA_TABLE . $fields[$int_name]['type_field']['id_table_r'] . " WHERE `id` = " . intval($value);
$relations_result = sql_query($sqlQuery);
$row_relations = sql_fetch_assoc($relations_result);
if (sql_num_rows($relations_result) > 0)
$value = $row_relations['field_value'];
else
$value = "";
break;
}
if ($fields[$int_name])
$data[$fields[$int_name]['name']] = $value;
}
$lines[] = $data;
}
// возвращаем результат
if ($return_rows==1)
if ($lines) return $lines[0]; else return false;
else
if ($lines) return $lines; else return array();
}
else
{
echo "Error in function 'data_table': table '".$name_table."' no found.";
return false;
}
}
Уважаемы разработчики, понадобилось немножко усовершенствовать Вашу функцию data_table. Дело в том, что для полей типа связи она выводила - айди записи из таблицы связи. Моя функция выводит - значение этого поля, которое берется из таблицы связи. Пожалуйста проверьте и если можно замените в functions2.php.
Узкие моменты, вопрос в комментарии, пожалуйста ответьте. Спасибо.
//возможно стоит переписать этот кусок с использованием get_table_fields, вместо простой конкатенации $fields[$one_field['int_name']]['type_field']['id_field_r'] = "f" . $w_tmp[1];
#6
Отправлено 11 Июль 2013 - 09:55
#7
Отправлено 11 Июль 2013 - 09:56
CbCoder (11 Июль 2013 - 09:55) писал:
А где я указал на то что это баг? Я просто ее доработал, так как часто появлялась необходимость в таком функционале, и поделился. Спасибо.
#8
Отправлено 11 Июль 2013 - 10:04
wondertalik (11 Июль 2013 - 02:24) писал:
//возможно стоит переписать этот кусок с использованием get_table_fields, вместо простой конкатенации $fields[$one_field['int_name']]['type_field']['id_field_r'] = "f" . $w_tmp[1];
//возможно стоит переписать этот кусок с использованием get_table_fields, вместо простой конкатенации $fields[$one_field['int_name']]['type_field']['id_field_r'] = $one_field['s_field_id'])
#9
Отправлено 11 Июль 2013 - 10:07
wondertalik (11 Июль 2013 - 09:56) писал:
Я просто понял эти ваши слова:
Цитата
#10
Отправлено 11 Июль 2013 - 10:18
CbCoder (11 Июль 2013 - 10:07) писал:
как то что функция неправильно работает.
[scw_set] => Array ( ) [s_table_id] => 93 [s_field_id] => 1242 [s_filter_id] => 0 [s_show_field_name] => 0 [s_show_field_inline] => 0 [links_also_show] => Array ( )Этот массив не пустой для полей типа связь только?
Сообщение отредактировал wondertalik: 11 Июль 2013 - 10:19
#11
Отправлено 11 Июль 2013 - 10:20
#13
Отправлено 11 Июль 2013 - 10:54
CbCoder (11 Июль 2013 - 10:04) писал:
//возможно стоит переписать этот кусок с использованием get_table_fields, вместо простой конкатенации $fields[$one_field['int_name']]['type_field']['id_field_r'] = $one_field['s_field_id'])
$fields[$one_field['int_name']]['type_field']['id_field_r'] = $one_field['scw_set']['s_field_id'])
#14
Отправлено 11 Июль 2013 - 11:00
#15
Отправлено 11 Июль 2013 - 11:03
Цитата
Собственно здесь я поторопился с ответом, массив [scw_set] не пустой, если настроен конструктор вычислений.
#16
Отправлено 11 Июль 2013 - 12:10
CbCoder (11 Июль 2013 - 10:04) писал:
//возможно стоит переписать этот кусок с использованием get_table_fields, вместо простой конкатенации $fields[$one_field['int_name']]['type_field']['id_field_r'] = $one_field['s_field_id'];
[b]Parse error[/b][color=#000000]: syntax error, unexpected ')' in [/color][b]/var/www/tao.bitmaster.dp.ua/include/functions_custom.php[/b][color=#000000] on line [/color][b]105[/b]
Сообщение отредактировал wondertalik: 11 Июль 2013 - 12:11
#17
Отправлено 11 Июль 2013 - 14:58
Цитата
Обратиться в техподдержку.
#18
Отправлено 29 Март 2017 - 23:22
Количество пользователей, читающих эту тему: 7
0 пользователей, 7 гостей, 0 анонимных













