Убрать нижнее подчеркивание при формировании ссылок программно

Главные вкладки

Аватар пользователя natalikarn natalikarn 31 октября 2020 в 21:19

Вопрос наверное не новый, но я что-то не нашла ответа своими силами.
Друпал все не перестает меня удивлять...

Я формирую ссылку программно но на выходе получаю с нижним подчеркиванием на конце ссылки.

$link_status = '/' . $current_langcode . '/node/' . $output ;

Результат - http://xxxx.com/ru/node/263_ , а нужно, чтобы без нижнего подчеркивания был адрес.
Что его подставляет и как тогда правильно формировать ссылку в строке друпал, чтобы он не подставлял это?

Комментарии

Аватар пользователя vlucas vlucas 31 октября 2020 в 21:39

Если в рендер массиве, то вот пример:

<?php
      
'user_login' => [
        
'#type' => 'link',
        
'#title' => $this->t('Log in'),
        
'#url' => Url::fromRoute('user.login', [], $options_login)
      ],
?>

Если в твиге, то, можете использовать link

Аватар пользователя natalikarn natalikarn 31 октября 2020 в 21:45

благодарю за ответ, но мне нужно просто в строке в качестве переменной указать nid, а этот вариант немного не подходит

Аватар пользователя vlucas vlucas 31 октября 2020 в 21:55
1

Это только пример! ...
Вам надо понять принцип: ссылка должна формироваться из роута.
В вашем случае - это канонический роут для сущности нода с парамертро (node) == 263

Аватар пользователя natalikarn natalikarn 31 октября 2020 в 22:23

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

    $url = Url::fromRoute('entity.node.canonical', ['node' => $output]);
    $link = Link::fromTextAndUrl($this->t('Read more'), $url);
    $build['read_more'] = $link->toRenderable();
Аватар пользователя vlucas vlucas 31 октября 2020 в 22:29

Вот так надо, например в кастомном блоке попробуйте:

<?php
    
// Our nid.
    
$nid 263;

    

// Additional options for our link.
    
$options_link = [
      
'attributes' => [
        
'class' => ['my-node']
      ]
    ];

    

$my_node = [
        
'#type' => 'link',
        
'#title' => $this->t('My node'),
        
'#url' => Url::fromRoute('entity.node.canonical', ['node' => $nid], $options_link)
      ];
?>

естественно что надо подключить Url:
use Drupal\Core\Url;

Проверьте также, что у вас в $output.

Аватар пользователя natalikarn natalikarn 31 октября 2020 в 23:39

Этот вариант тоже проверила.. не пошло, что-то не пойму, а вот этот, хоть и не правильный - работает,
$link =  $current_langcode . '/node/' . $output;
Кстати посмотрела в базе то нормально запись, без нижнего прочерка, а через представление он подставляется, я уже все поля перепробовала для ссылок применить по очереди, прямо засада

Поставила в представлении галочку - URL на внешний сервер, черта исчезла..

Аватар пользователя vlucas vlucas 1 ноября 2020 в 10:16

Этот вариант в корне не верный и имеет тонну проблем, например, базовый путь, синонимы и т.д. и т.п.
Старайтесь решать задачи используя Drupal Way.
Мой вариант полностью рабочий. Не могу сказать что у вас не получается.
Если в представлении, то можно использовать link() твига, как я писал выше

Аватар пользователя natalikarn natalikarn 1 ноября 2020 в 17:32

Проверила еще раз, выходит - Array... ссылка не пишется. Может кроме use Drupal\Core\Url; нужно еще что-то подключить, я из своего модуля это проверяю.
Тип ноды: id_num

Аватар пользователя vlucas vlucas 1 ноября 2020 в 17:31

Так и должно выходить Array! - Это же рендер массив!
Я вам настоятельно советую, во избежании чего не хорошего, и тем уж, если код пишется не только для вас, ознакомиться что такое рендер массивы для начала, например, здесь https://niklan.net/blog/210

И более того, изучить другие API, т.к. вы испытываете колосальные проблемы с этим, судя по вашим вопросам на форуме.

Аватар пользователя natalikarn natalikarn 1 ноября 2020 в 17:36

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

Аватар пользователя vlucas vlucas 1 ноября 2020 в 17:37
1

Это хорошо!
При использовании Drupal, важно понимать, что есть не просто/только PHP а ещё API Drupal.
Вот его вы и должны использовать, а не писать на обычном PHP, иначе вам тогда Drupal не нужен ))
Изучите для начала роутинг, рендер массивы и т.д.
И тогда у вас должна сложиться картина в целом, что и как верно делать в тех или иных моментах, чтобы это работало всегда правильно.

Аватар пользователя vlucas vlucas 1 ноября 2020 в 17:40

Если надо в поле ноды - лучше тогда используйте поле - есть же поле - ссылка. Ничего и писать не надо для этого.

Аватар пользователя natalikarn natalikarn 1 ноября 2020 в 17:43

в том то и дело, что я все поля перепробовала и ничего не записывает, потом просто вывела результат и увидела, что ссылки нет, а есть - Array.