Отслеживание изменений в друпал - PullRequest
1 голос
/ 02 января 2012

У меня есть таблица, похожая на следующую

$schema['mytable'] = array(
    'fields' => array(
        'id' => array(
            'type'=>'int',
            'not null' => TRUE
        ),
        'content' => array(
            'type' => 'varchar',
            'length' => 400
        )
    ),
    'primary key' => array('id')
);

, определенную в hook_schema.У меня есть клиентское приложение JavaScript, которое неоднократно перетаскивает содержимое этой таблицы на клиент, так что оно обновляется почти мгновенно, когда таблица модифицируется (например, общая таблица в документах Google).Что я хочу сделать, так это оптимизировать его, чтобы каждый раз предоставлять только измененные записи.Моя первоначальная мысль состояла в том, чтобы дать каждому элементу свойство временной метки и заставить клиента отслеживать самую высокую отметку времени, которую он видел, а затем запрашивать все с более новой временной меткой.Затем я увидел в документации API-интерфейса Drupal для hook_schema , что существует магическое свойство всех узлов, называемых измененными.Могу ли я получить подобное магическое свойство для моих сущностей, и поможет ли это в моем сценарии, или мне лучше было бы просто применить свою собственную логику для этого.Производительность довольно критична, так как это, вероятно, станет ключевым узким местом.

1 Ответ

1 голос
/ 03 января 2012

Я думаю, что вы ошибаетесь по поводу «измененного» магического свойства, поскольку в этом нет ничего волшебного. Это просто обычное поле int в таблице узлов, которое заполняется меткой времени UNIX, во многом как то, которое вы предлагаете для своего варианта использования.

Неправильная интерпретация, вероятно, проистекает из документации hook_schema API, показывающей только часть определения таблицы узлов, как указано в коде:

function hook_schema() {
  $schema['node'] = array(
    // example (partial) specification for table "node"
[...]

Если вы посмотрите на полную реализацию node_schema(), вы найдете следующее определение для измененного поля:

[...]
'changed' => array(
  'description' => 'The Unix timestamp when the node was most recently saved.', 
  'type' => 'int', 
  'not null' => TRUE, 
  'default' => 0,
),
[...]

Так что никакой магии здесь нет, и вам, вероятно, стоит просто продолжить свою собственную логику, как и планировалось:)

...