Jeśli węzeł kanałów nadrzędnych (import) nie jest publikowany, jak mogę go nie uwzględnić w harmonogramie importu?

11

Jeśli nadrzędny plik danych importuje węzeł (formularz / węzeł do wprowadzenia adresu URL kanału, a nie importera kanałów), który nie został opublikowany, chciałbym, aby nie był uwzględniany (adres URL kanału) w harmonogramie cron w celu aktualizacji / importu elementy kanału. Jak to się robi? Na przykład użytkownik przesyła kanał, ale administrator musi go zweryfikować przed opublikowaniem i zaimportowaniem.

Zobacz także Nie importuj elementów, jeśli kanał nadrzędny nie jest opublikowany .

hellomobe
źródło
Czy miałeś jakieś szczęście, wymyślając ten? Próbowałem tego z domyślnym importerem kanałów RSS i wydawało się, że działa ono zgodnie z oczekiwaniami - nie importowało się, gdy węzeł kanału nie został opublikowany.
Jan Tomka,
Hmm, to dziwne. Jeden z moich importerów kanałów jest skonfigurowany do używania wspólnego analizatora składni syndykatu, a drugi używa analizatora składni QueryPath. Potwierdziłem, że węzeł kanału (rodzic) nie został opublikowany. Widziałeś notatkę, że importuje ona dane z pamięci podręcznej - czy to dziwne czy normalne? Nie powinno tego robić bez względu na status, prawda? Jestem na miejscu, więc cron jeszcze nie jest skonfigurowany.
hellomobe,
1
Linkowany artykuł zawiera znacznie lepsze informacje, a nawet przykładowy kod. Proszę rozważyć dodanie tego do pytania tutaj.
berkes

Odpowiedzi:

1

Wygląda na to, że kiedy węzeł zostanie zapisany, moduł Feeds zaczyna importować kanał z tego węzła.

function feeds_node_insert($node) {
  // Source attached to node.
  feeds_node_update($node);
  if (isset($node->feeds) && $importer_id = feeds_get_importer_id($node->type)) {
    $source = feeds_source($importer_id, $node->nid);
    // Start import if requested.
    if (feeds_importer($importer_id)->config['import_on_create'] && !isset($node->feeds['suppress_import'])) {
      $source->startImport();
    }
    // Schedule source and importer.
    $source->schedule();
    feeds_importer($importer_id)->schedule();
  }
}

Na stronie ustawień importera dostępna jest opcja o nazwie Importuj po przesłaniu . Jeśli odznaczysz to pole, mam nadzieję, że Twój plik danych nie zostanie zaimportowany. Opiekun kanałów wciąż musi wprowadzić zmiany w feed_cron (), aby nie pobierał niepublikowanych węzłów.

Podczas oczekiwania na lepszą poprawkę od opiekunów modułu możesz szybko naprawić ten kod, zmieniając pierwszą instrukcję if, aby dodać warunek $ node-> status == 1 w następujący sposób:

if ($node->status==1 && isset($node->feeds) && $importer_id = feeds_get_importer_id($node->type))
Ajinkya Kulkarni
źródło