Открыть ссылку в новой вкладке

Открыть ссылку в новой вкладке

от Ivan Gorbachev -
Количество ответов: 5
Доброго времени суток.

В PHP я чайник, только осваиваю. Добавил в PHP тестовый плагин (mod), для добавления нового элемента учебной темы. В качестве шаблога использую вот этот плагин https://github.com/moodlehq/moodle-mod_newmodule. Как я понимаю, открытие содержания происходит из grade.php, при вызове redirect. Необходимо сделать так, чтобы он открывался в новой вкладке.
В ответ на Ivan Gorbachev

Re: Открыть ссылку в новой вкладке

от Ivan Gorbachev -
Вот так я передаю значение target, но его почему-то нет в итоговой строке

$param = array('id' => $cm->id,'target' => '_blank');
$row[] = html_writer::link(new moodle_url('view.php', $param),

В ответ на Ivan Gorbachev

Re: Открыть ссылку в новой вкладке

от Vadim Tabunshchik -
Изображение пользователя Developers

Имхо, 'target' => '_blank' нужно использовать с классом html_writer, а не moodle_url, как написано у вас. И ещё в html_writer::link атрибуты - это третий параметр, первый - сама ссылка, второй - название ссылки.

Я бы попробовал такую конструкцию:

$row[] = html_writer::link(new moodle_url('view.php', array('id' => $cm->id)), 'название ссылки', array('target' => '_blank'))

Посмотрите lib/outputcomponents.php и lib/weblib.php

В ответ на Vadim Tabunshchik

Re: Открыть ссылку в новой вкладке

от Ivan Gorbachev -

Вы абсолютно правы, 'target' => '_blank' нужно использовать с классом html_writer, нашёл пример в исходниках. Переписал свой код вот так:

$param = array('target' => '_blank');
if (is_null($cm->visible))
    $param['class'] = 'dimmed';

$row[] = html_writer::link(new moodle_url('view.php', array('id' => $cm->id)),$cm->get_formatted_name(),$param);

И всё равно не работает =)))
В ответ на Ivan Gorbachev

Re: Открыть ссылку в новой вкладке

от Vadim Tabunshchik -
Изображение пользователя Developers
И всё равно не работает =

Что не работает?

Проверил специально на строке 244

$row[] = html_writer::link(new moodle_url('/admin/settings.php', array('section'=>'filtersetting'.$filter)), get_string('settings'));

из файла admin/filters.php, если изменить её так:

$row[] = html_writer::link(new moodle_url('/admin/settings.php', array('section'=>'filtersetting'.$filter)), get_string('settings'), array('target' => '_blank'));

то ссылка "Настройки" фильтра открывается в новом окне браузера. Единственное, нужно кеш Мудл почистить, чтобы изменения в коде стали действовать.

ЗЫ: непонятно, к какому объекту вы применяете класс "dimmed". К 'target' => '_blank', что ли?

Почему не к ссылке в целом? Есть же тоже примеры в исходниках:

                if ($cm->visible) {
                    $class = '';
                } else {
                    $class = 'dimmed';
                }
...............................
                $link = html_writer::link(new moodle_url("/mod/$cm->modname/view.php", array("id" => $cm->id)), $name, array('class' => $class));
В ответ на Vadim Tabunshchik

Re: Открыть ссылку в новой вкладке

от Ivan Gorbachev -
Код выглядит вот так:

$row[] = html_writer::link(new moodle_url('view.php', array('id' => $cm->id)), $cm->get_formatted_name(), array('target' => '_blank'));

и в плагине этот код не пашет. Ссылка всё равно открывается в этой же вкладке. Версия мудла 3.1.1.