Вы здесь

Периодически появляется пустая нода, только с заголовком. (проблема кэша?)

1

Добрый день! Повторяю вопрос, надеюсь не сильно нарушаю правила, ибо как апнуть старую тему не знаю.
Вот старая тема - http://dru.io/question/4022, после публикации я нашел пару новых фактов, может с ними кто-то подскажет.

Значит есть проблема - ПЕРИОДИЧЕСКИ публикуется пустая нода. Работает на сайте человек 10, публикуют материалы, и у каждого бывает этот глюк, у всех, естественно разные ОС и браузеры.

Что я точно знаю:

  • Если снимать галочку "опубликовано" и сохранить в черновик и потом опубликовать, все ок.
  • Когда происходит глюк и нода публикуется только с заголовком, НО в базе данные ЕСТЬ, однако, если нажать редактирование материала все поля пусты. В том числе таксономия, боди, и прочее.
  • Если после такой публикации сбросить кэш, то нода появляется!

Из чего я делаю вывод - проблема как-то связана с кэшем, как ее отловить я не знаю. Кэширование стандартное, без memcached и прочих.

Пробовал ставить Cache Expiration, делать сброс кэша после публикации, не помогло.

Модули которые затрагивают node_insert и node_update:

xmlsitemap
vkxp
twitter
scheduler
rate_expiration
pathauto
metatag
expire
disqus

Все модули без модификаций. Пробовал отключить vk и xmlsitemap ничего не поменялось.
Еще глупый вопрос - не может ли кривая тема как-то мешать тут? Может из-за нее попадает в кэш левые данные?

Буду рад любой помощи!

Версия Drupal: 
7.x
Категория: 
Node API
Вопрос задан 30.10.2015 - 15:34
Аватар пользователя Sora
Sora
92

глупый вопрос, _form_node_form_alter где встречается? может проблема на уровне формы?

Комментарий оставлен 30.10.2015 - 20:42

В основной теме:

/**
 * hook_form_BASE_FORM_ID_alter()
 * Modify field classes on node forms.
 */
function adaptivetheme_form_node_form_alter(&$form, &$form_state, $form_id) {
  // Remove if #1245218 is backported to D7 core.
  foreach (array_keys($form) as $item) {
    if (strpos($item, 'field_') === 0) {
      if (!empty($form[$item]['#attributes']['class'])) {
        foreach ($form[$item]['#attributes']['class'] as &$class) {
          if (strpos($class, 'field-type-') === 0 || strpos($class, 'field-name-') === 0) {
            // Make the class different from that used in theme_field().
            $class = $class . '-form';
          }
        }
      }
    }
  }
}

В модуле xmlsitemep:

/**
 * Implements hook_form_alter().
 *
 * Add the XML sitemap individual link options for a node.
 *
 * @see xmlsitemap_add_form_link_options()
 */
function xmlsitemap_node_form_node_form_alter(array &$form, array &$form_state) {
  // Add the link options.
  module_load_include('inc', 'xmlsitemap', 'xmlsitemap.admin');
  xmlsitemap_add_form_link_options($form, 'node', $form['type']['#value'], $form['nid']['#value']);
  $form['xmlsitemap']['#weight'] = 30;
}

vkxp:

/**
 * Implements hook_form_FORM_ID_alter().
 * Alters node add/edit form.
 */
function vkxp_form_node_form_alter(&$form, &$form_state) {

    // Do not process node form if it is not contains node type.
    if (empty($form['#node']->type)) {
        return;
    }

    // Check node type and user access to see whether we should process a node form.
    $type_enabled = variable_get('vkxp_node_enabled_' . $form['#node']->type);
    $user_access = user_access('post to vkontakte');

    // If node type matches all requirements we have to add new fields to form.
    if ($type_enabled && $user_access) {
        form_load_include($form_state, 'forms.inc', 'vkxp');
        _vkxp_process_node_form($form);
    }
}

pathauto:


/** * Implements hook_form_BASE_FORM_ID_alter(). * * Add the Pathauto settings to the node form. */ function pathauto_form_node_form_alter(&$form, &$form_state) { $node = $form_state['node']; $langcode = pathauto_entity_language('node', $node); pathauto_field_attach_form('node', $node, $form, $form_state, $langcode); }

Короче ничего вроде подозрительного. Разве тема только, но вроде просто класс добавляет.

Комментарий оставлен 30.10.2015 - 21:15

Если после такой публикации сбросить кэш, то нода появляется!

Пробовал ставить Cache Expiration, делать сброс кэша после публикации, не помогло.

Тут не понял. Если вручную сбросить кэш, то содержимое появляется? А если автоматически, то не появляется?

Комментарий оставлен 31.10.2015 - 10:08

Да, как ни странно это звучит, сейчас еще раз удалил его, поставил обратно, проставил настройки, посмотрю, будет ли еще раз эта штука, настройки такие:

Комментарий оставлен 31.10.2015 - 10:14

Можно попробовать в таком случае написать свой модуль, который бы сбрасывал кэш после добавления определённого типа материала.
Либо с помощью модуля rules, очищать кэш по правилу - так же после добавления материала.

Ещё в модуле в этом написано, что он сбрасывает page cache. Тогда, возможно, что проблема в другом типе кэша. Тогда можно вручную поочищать виды кэша и посмотреть, какой именно тип кэша даёт этот глюк.

Комментарий оставлен 31.10.2015 - 10:35

Спасибо, глюк только что повторился, снял дамп базы :) Буду ковырять!

Комментарий оставлен 31.10.2015 - 11:03

Пока обнаружил, что в базе нету ноды в таблице cache_page. Больше никаких различий с другими нодами нету :(
UP: Кэш полей выглядит так:

a:15:{s:22:"taxonomy_vocabulary_17";a:0:{}s:21:"taxonomy_vocabulary_3";a:0:{}s:4:"body";a:0:{}s:16:"field_annotation";a:0:{}s:11:"field_image";a:0:{}s:14:"field_fototext";a:0:{}s:10:"field_tags";a:0:{}s:15:"field_rubriks_2";a:0:{}s:11:"field_story";a:0:{}s:19:"field_include_video";a:0:{}s:19:"field_in_top_scroll";a:0:{}s:10:"field_mark";a:0:{}s:22:"field_in_top_important";a:0:{}s:24:"field_in_top_interesting";a:0:{}s:14:"field_gal_lite";a:0:{}}

Т.е. он пуст, я так понял.

Комментарий оставлен 31.10.2015 - 17:29

Появилось одно предположение - я обратил внимание, что помимо отсутствия кэша полей и страницы, отсутствует кэш блока disqus, дело в том, что я его вызываю шаблоне ноды:

<?php if($view_mode == 'full'): ?>
    <?php $block = module_invoke('disqus', 'block_view', 'disqus_comments'); echo render($block['content']); ?> 
<?php endif; ?>

Вот сейчас убрал этот кусок, тестирую. Вызываю этот блок так, потому, что надо в определенном месте его вызывать по условию. Может лучше вызывать регион и туда его? Короче, пока снял, люди пробуют, вылезет глюк или нет.

UP: Disqus ни при чем. Глюк вылез. Пробовал чистить кэш drush'ем только с ключем all материал появляется. На остальные ключи не реагирует.

Комментарий оставлен 01.11.2015 - 15:40

Вроде нашел виновника - Twitter. С отключенным модулем, уже второй день все тихо, тьфу 3 раза :) Еще наблюдаю пару дней, для точности.

Комментарий оставлен 06.11.2015 - 10:22

Ответы

0

deleted

Ответ дан 02.11.2015 - 05:52