foto

Функция сохранения доп.полей xfields

Автор темы: Sander, 10 марта 2017г
Sander
Отправлено: 10 март 2017, 11:32:21
Функция формирующая строку хранения данных доп.полей из массива с ключами для записи в БД:
{ключ}|{значение}||{ключ2}|{значение2}

function xfieldsdatasave($xfields = [])
{
	global $db;
	$filecontents = [];
	foreach ($xfields as $xfielddataname => $xfielddatavalue) {
		if ($xfielddataname == "" OR $xfielddatavalue === "") continue;
		$xfielddataname = str_replace( "|", "|", $xfielddataname );
		$xfielddataname = str_replace( "\r\n", "__NEWL__", $xfielddataname );
		$xfielddatavalue = str_replace( "|", "|", $xfielddatavalue );
		$xfielddatavalue = str_replace( "\r\n", "__NEWL__", $xfielddatavalue );
		$filecontents[] = "$xfielddataname|$xfielddatavalue";
	}
	$filecontents = count($filecontents) ? $db->safesql(join("||", $filecontents)) : '';
	return $filecontents;
}


Пример использования:
$id = 117;
$xfields = [
	'link' => 'http://sandev.pro/',
	'price' => '50',
];

$filecontents = xfieldsdatasave($xfields);
$db->query("UPDATE dle_post set xfields = '$filecontents' WHERE id=$id");
foto
  • Администратор
  1. • Sensey #1
    Отправлено: 27 май 2019, 14:06:39
    А как сделать, что бы не затирало уже существующие поля ?
    Сейчас при записи добавляет только те что указываю
    $xfields = array(
      'link' => 'http://sandev.pro/',
      'price' => '50',
    );

    Если в новости уже были другие поля их затирает и добавляет только новые.
    foto
    • Гость
    • Сообщений: 0
  2. Sander #2
    Отправлено: 27 май 2019, 14:19:40
    Цитата: Sensey
    А как сделать, что бы не затирало уже существующие поля ?
    Сейчас при записи добавляет только те что указываю
    $xfields = array(
      'link' => 'http://sandev.pro/',
      'price' => '50',
    );

    Если в новости уже были другие поля их затирает и добавляет только новые.

    Получаете данные из новости, дописываете новые данные, сохраняете.
    $sql = $db->query("SELECT id, xfields FROM dle_post");
    while ($row = $db->get_row($sql)) {
        $xfields = xfieldsdataload(stripslashes($row['xfields']));
        $xfields['link'] = 'новая ссылка или значение';
        $filecontents = xfieldsdatasave($xfields);
        $db->query("UPDATE dle_post set xfields = '$filecontents' WHERE id={$row['id']}");
    }
    foto
    • Администратор
    • Сообщений: 630
  3. • Sensey #3
    Отправлено: 27 май 2019, 14:51:37
    Если я правильно понял, то весь код будет таким?
    function xfieldsdatasave($xfields = [])
    {
    	global $db;
    	$filecontents = [];
    	foreach ($xfields as $xfielddataname => $xfielddatavalue) {
    		if ($xfielddataname == "" OR $xfielddatavalue === "") continue;
    		$xfielddataname = str_replace( "|", "|", $xfielddataname );
    		$xfielddataname = str_replace( "\r\n", "__NEWL__", $xfielddataname );
    		$xfielddatavalue = str_replace( "|", "|", $xfielddatavalue );
    		$xfielddatavalue = str_replace( "\r\n", "__NEWL__", $xfielddatavalue );
    		$filecontents[] = "$xfielddataname|$xfielddatavalue";
    	}
    	$filecontents = count($filecontents) ? $db->safesql(join("||", $filecontents)) : '';
    	return $filecontents;
    }
    
    $sql = $db->query("SELECT id, xfields FROM dle_post");
    while ($row = $db->get_row($sql)) {
        $xfields = xfieldsdataload(stripslashes($row['xfields']));
        $xfields = array('link' => 'http://sandev.pro/',  'price' => '50');
        $filecontents = xfieldsdatasave($xfields);
        $db->query("UPDATE dle_post set xfields = '$filecontents' WHERE id={$row['id']}");
    }
    foto
    • Гость
    • Сообщений: 0
Добавить комментарий
  • Логин
  • E-mail (не обязательно)
Повторите рисунок:
antibot
© Sander-Development. 2009-2019.
При копировании, ссылка на источник обязательна.