суббота, 14 мая 2011 г.

Drupal XmlRpc Date Api Services. Решение проблемы с глюками.

Немного помучившись с  отправкой поля типа дата через xml-rpc на друпаловский сайт из программы на C# было найдено такое решение:

XmlRpcStruct node = new XmlRpcStruct();

string field_exclusive_date_to = "10.05.2024 0:00:00";
DateTime dtfield_exclusive_date_to = DateTime.Parse(field_exclusive_date_to);
AddArrayDateToNode("field_exclusive_date_to", dtfield_exclusive_date_to, node);

/// <summary>
        /// Добавляет в ноду поле с датой (Drupal Date)
        /// </summary>
        /// <param name="fieldname"></param>
        /// <param name="dt"></param>
        /// <param name="node"></param>
        /// <remarks>Нужно написать в блоге каком то как это делать, ато все ебуться и никто еще не нашел.</remarks>
        private static void AddArrayDateToNode(string fieldname, DateTime dt, XmlRpcStruct node)
        {
            XmlRpcStruct sMainDate = new XmlRpcStruct();
            XmlRpcStruct sDate = new XmlRpcStruct();
            sDate["year"] = dt.Year.ToString();
            sDate["month"] = dt.Month.ToString();
            sDate["day"] = dt.Day.ToString();
            sMainDate["value"] = sDate;
            object[] oDate = new object[] { sMainDate };
            node[fieldname] = oDate;
        }

Все дело в том, что на  Drupal сайте Date Api хранит дату немного не в том формате в котором отображает. Следовательно получение и отправка поля CCK типа Date будет сильно различаться.



То есть слать нужно структуру такого формата для поля с датой:
[field_next_call_date] => Array
(
[0] => Array
(
[value] => Array
(
[year] => 2014
[month] => 7
[day] => 7
)
)
)
И в таком формате для checkbox cck field.
[field_checkboxes] => Array
(
[value] => Array
(
[1991] => 1991
[1985] => 1985
)
1991 - это id термина таксономии связанного с чекбоксом
)

Комментариев нет:

Отправить комментарий