Вопрос наверное не новый, но я что-то не нашла ответа своими силами.
Друпал все не перестает меня удивлять...
Я формирую ссылку программно но на выходе получаю с нижним подчеркиванием на конце ссылки.
$link_status = '/' . $current_langcode . '/node/' . $output ;
Результат - http://xxxx.com/ru/node/263_
, а нужно, чтобы без нижнего подчеркивания был адрес.
Что его подставляет и как тогда правильно формировать ссылку в строке друпал, чтобы он не подставлял это?
Комментарии
так лучше ссылки не формировать!
Если в рендер массиве, то вот пример:
<?php
'user_login' => [
'#type' => 'link',
'#title' => $this->t('Log in'),
'#url' => Url::fromRoute('user.login', [], $options_login)
],
?>
Если в твиге, то, можете использовать link
благодарю за ответ, но мне нужно просто в строке в качестве переменной указать nid, а этот вариант немного не подходит
Это только пример! ...
Вам надо понять принцип: ссылка должна формироваться из роута.
В вашем случае - это канонический роут для сущности нода с парамертро (node) == 263
вот эта конструкция тоже не рабочая, что я делаю не правильно?...
$link = Link::fromTextAndUrl($this->t('Read more'), $url);
$build['read_more'] = $link->toRenderable();
Вот так надо, например в кастомном блоке попробуйте:
<?php
// Additional options for our link.
$my_node = [
// Our nid.
$nid = 263;
$options_link = [
'attributes' => [
'class' => ['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.
Этот вариант тоже проверила.. не пошло, что-то не пойму, а вот этот, хоть и не правильный - работает,
$link = $current_langcode . '/node/' . $output;
Кстати посмотрела в базе то нормально запись, без нижнего прочерка, а через представление он подставляется, я уже все поля перепробовала для ссылок применить по очереди, прямо засада
Поставила в представлении галочку - URL на внешний сервер, черта исчезла..
Этот вариант в корне не верный и имеет тонну проблем, например, базовый путь, синонимы и т.д. и т.п.
Старайтесь решать задачи используя Drupal Way.
Мой вариант полностью рабочий. Не могу сказать что у вас не получается.
Если в представлении, то можно использовать link() твига, как я писал выше
Проверила еще раз, выходит - Array... ссылка не пишется. Может кроме use Drupal\Core\Url; нужно еще что-то подключить, я из своего модуля это проверяю.
Тип ноды: id_num
Так и должно выходить Array! - Это же рендер массив!
Я вам настоятельно советую, во избежании чего не хорошего, и тем уж, если код пишется не только для вас, ознакомиться что такое рендер массивы для начала, например, здесь https://niklan.net/blog/210
И более того, изучить другие API, т.к. вы испытываете колосальные проблемы с этим, судя по вашим вопросам на форуме.
Я только начала все это изучать.. читаю, пишу пока только для себя тестовый проект на котором учусь.
Мне надо эту ссылку записать в поле ноды в виде ссылки или просто текст)))
Это хорошо!
При использовании Drupal, важно понимать, что есть не просто/только PHP а ещё API Drupal.
Вот его вы и должны использовать, а не писать на обычном PHP, иначе вам тогда Drupal не нужен ))
Изучите для начала роутинг, рендер массивы и т.д.
И тогда у вас должна сложиться картина в целом, что и как верно делать в тех или иных моментах, чтобы это работало всегда правильно.
Если надо в поле ноды - лучше тогда используйте поле - есть же поле - ссылка. Ничего и писать не надо для этого.
в том то и дело, что я все поля перепробовала и ничего не записывает, потом просто вывела результат и увидела, что ссылки нет, а есть - Array.
Для того чтобы этот тип поля появился включите модуль Link
модуль включен..
значит тип поля есть! Добавляйте - выводите.