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:
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