Przejdź do treści

Drupal 8 - jak usunąć pomoc dotycząca wyszukiwania

Dzisiaj chciałem przygotować prostą stronę z wyszukiwarką, z usuniętymi wszystkimi dodatkami poza polem tekstowym. O ile zaawansowane wyszukiwanie można bez problemu wyłączyć dla gości przy pomocy uprawnień, to odnośnik do pomocy pozostaje. Oczywiście możesz go ukryć z poziomu CSS jak jesteś leniem, ale usuńmy to na dobre.

Na początku musiałem sprawdzić skąd się wziął ten odnośnik i jak jest załączany. Cały formularz jest generowany w tej klasie:

// /core/modules/search/src/Form/SearchPageForm.php
[...]
$form['help_link'] = [
    '#type' => 'link',
    '#url' => new Url('search.help_' . $this->entity->id()),
    '#title' => $this->t('Search help'),
    '#options' => ['attributes' => ['class' => 'search-help-link']],
];

Jak widać nie ma tutaj żadnej opcji, aby ukryć ten odnośnik (albo przynajmniej ja nie znalazłem). Jest po prostu na stałe dodawany do formularza i mnie osobiście denerwuje.

Usuńmy to! W Twoim szablonie, dodaj tą funkcję i zamień scriptun na Twoją nazwę szablonu:

function scriptun_form_alter(&$form, $form_state, $form_id) {
    switch ($form_id){
        case 'search_form':
            unset($form['help_link']);
            break;
    }
}

I to wszystko. Odnośnik nie powinien Ci się już wyświetlać. Możesz tu wykorzystać zwyczajny warunek if. Ja zawsze wstawiam tam switch, ponieważ w form_alter często nadpisuje się sporo formularzy i jest wygodniej.

Całkowite usunięcie strony z pomocą

Odnośnik usunięty, ale jeśli przejdziesz na stronię /search/node/help to zobaczysz, że ona dalej działa. Usuńmy ją! :)

W Twoim module, dodaj plik yaml z usługami (services), jeśli go jeszcze nie stworzyłeś, lub dodaj odpowiedni fragment:

# /modules/scriptun_module/scriptun_module.services.yml
services:
  scriptun_module.route_subscriber:
    class: Drupal\scriptun_module\Routing\RouteSubscriber
    tags:
      - { name: event_subscriber }

scriptun_module to przykładowa nazwa modułu, odpowiednio nazwij plik. Linijka z nazwą usługi jest przykładowa, najważniejsze są klucze: class, w którym podajemy pełną nazwę klasy oraz tag, w którym podpinamy się w eventy.

Mamy stworzony service i kieruje do klasy RouteSubscriber, powinna wyglądać tak:

<?php
// /modules/scriptun_module/src/Routing/RouteSubscriber.php
namespace Drupal\scriptun_module\Routing;

use Drupal\Core\Routing\RouteSubscriberBase;
use Symfony\Component\Routing\RouteCollection;

/**
 * Listens to the dynamic route events.
 */
class RouteSubscriber extends RouteSubscriberBase {

    /**
     * {@inheritdoc}
     */
    protected function alterRoutes(RouteCollection $collection) {
        if ($collection->get('search.help_node_search')) {
            $collection->remove('search.help_node_search');
        }
    }
}

Pamiętaj, aby zmienić scriptun_module na samym początku w przestrzeni nazw, zależnie od systemowej nazwy Twojego modułu.

Wyczyść cały cache i jeśli otworzysz stronę /search/node/help, powinieneś zobaczyć błąd 404.

Pamiętaj, że jeśli nie usuniesz odnośnika w formularzu w Twoim szablonie za pomocą form_alter, możesz zobaczyć taki krytyczny błąd:

Route "search.help_node_search" does not exist.

Wróć wtedy na początek tej strony i odpowiednio zmodyfikuj plik .theme w Twoim szablonie.

Oczywiście to jest mój sposób na usunięcie tej strony i odnośnika, jeśli masz inny pomysł, napisz o tym w komentarzu.

 

Dodaj komentarz

CAPTCHA

To pytanie sprawdza czy jesteś człowiekiem i zapobiega wysyłaniu spamu.

Wykorzystujemy cookies na naszej stronie, aby była łatwiejsza w obsłudze i nawigacji. Dodatkowo korzystamy z usług Google takie jak Analytics i Ads.

Dowiedz się więcej Już czytałem