Информер курса валют ЦБ РФ   •   Магазин расширений
647 просм
30 комм
Поделиться:

Выводим информацию о новости в файле (attachment) в DLE

Как мне сообщил один из читателей блога, в DataLife Engine нельзя использовать теги от новости в шаблоне файла attachment, для того чтобы вывести необходимую информацию о самой новости, к которой привязан тот или иной файл.

Немного подумав и еще раз посмотрев, как устроен движок, я нашел решение его проблемы.

1. Подключитесь к вашему сайту по FTP.

2. Откройте файл «show.full.php» в папке /engine/modules/. В нем найдите строку:

$news_id = $row['id'];

и сразу после нее вставьте:

$row_malcov_id = $row['id'];
$row_malcov_autor = $row['autor'];
$row_malcov_title = $row['title'];
$row_malcov_xfields = $row['xfields'];

3. Здесь же найдите строку:

$tpl->result['content'] = show_attach( $tpl->result['content'], $news_id );

и также после нее вставьте:

// Copyright (c) 2017 Artem Malcov | https://artem-malcov.ru/haki/vyvodim-informaciyu-o-novosti-v-fayle-attachment-v-dle

$tpl->result['content'] = str_replace ('{id_news}', $row_malcov_id, $tpl->result['content']);
$tpl->result['content'] = str_replace ('{autor_news}', $row_malcov_autor, $tpl->result['content']);
$tpl->result['content'] = str_replace ('{title_news}', $row_malcov_title, $tpl->result['content']);

$xfields_1 = explode("images", $row_malcov_xfields);
$xfields_1 = explode("||", $xfields_1[1]);
$tpl->result['content'] = str_replace ('{xfields_news_1}', substr($xfields_1[0], 1), $tpl->result['content']);

Сохраняете изменения и отправляете файл обратно на сайт.

3. Чистите кэш сайта. Установка закончена.

Теперь в шаблоне вашего файла (attachment.tpl) вам доступны следующие теги для вывода информации:

{id_news} – ID новости.
{autor_news} – автор новости.
{title_news} – заголовок новости.
{xfields_news_1} – дополнительное поле.

Обратите внимание, что код, используемый в хаке для дополнительных полей, берет информацию только с одного конкретного поля «images». В вашем же случае вы меняете название нужного вам поля на свое, а при необходимости дублируете блок:

$xfields_1 = explode("images", $row_malcov_xfields);
$xfields_1 = explode("||", $xfields_1[1]);
$tpl->result['content'] = str_replace ('{xfields_news_1}', substr($xfields_1[0], 1), $tpl->result['content']);

и заполняете его своими данными, в таком случае вы сможете вывести несколько своих дополнительных полей.

Информация, которую можно вывести из новости в файле, приведена не вся, если чего-то вам не хватает – пишите об этом в комментариях и не забывайте поддерживать проект, если на его страницах вы почерпнули что-то новое и полезное для себя.

30
комментарий
Навигация:
1 2
Abasive
18.11 в 12:57
Артем, в актуальной версии код functions.php немножко отличается, как правильно заменить код?
Такой код у меня.
$db->query( "SELECT * FROM " . PREFIX . "_files WHERE $where" );
  • 1
Abasive, в вашем случае эту строку можно не заменять
  • 0
Abasive
18.11 в 16:07
Получилось, но работает хак только тогда когда в новости одна ссылка атача.

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

http://prntscr.com/hc27i2
  • 0
Abasive, а если не использовать хак - работают все прикрепленные файлы? Мне просто кажется что проблема не в хаке.
  • 0
Abasive
18.11 в 17:00
Артем, да работает без хака.
  • 0
Abasive, полностью переписал принцип работы метода. Пробуйте.
  • 0
Abasive
18.11 в 22:15
Артем, все работает. Спасибо
  • 1
Artem
14.12 в 04:02
По поводу вывода доп. полей не совсем смог разобраться, возможно из-за недостаточных знаний.
Есть поле с именем - hdd-after. Тип поля - одна строка. Как правильно прописать это поле по шаблону:
$xfields_1 = explode("images", $row_malcov_xfields);
$xfields_1 = explode("||", $xfields_1[1]);
$tpl->result['content'] = str_replace ('{xfields_news_1}', substr($xfields_1[0], 1), $tpl->result['content']);

Артём, надеюсь на вашу помощь ;)
  • 0
Artem, в вашем случае код такой:

$xfields_1 = explode("hdd-after", $row_malcov_xfields);
$xfields_1 = explode("||", $xfields_1[1]);
$tpl->result['content'] = str_replace ('{xfields_news_1}', substr($xfields_1[0], 1), $tpl->result['content']);
  • 0
Artem
14.12 в 23:07
Делал также первый раз ещё, но код не срабатывает и доп поле выводится в чистом виде, т.е просто код -
[xfvalue_hdd-after]. Версия DLE 12.0 sad
  • 0
Artem, нужно не [xfvalue_hdd-after] вставлять а {xfields_news_1}
  • 1
Artem
14.12 в 23:26
Спасибо. Сработало lol
Ещё вопрос есть по выводу - можно ли сделать условия вывода по аналогии как по стандарту вывод?:
[xfgiven_hdd-after]{xfields_news_1}[/xfgiven_hdd-after]
  • 0
Artem, типа вывод только в том случае когда поле заполнено?

$xfields_1 = explode("hdd-after", $row_malcov_xfields);
$xfields_1 = explode("||", $xfields_1[1]);

if($xfields_1[0] != "") {
$xfields_new_1 = substr($xfields_1[0], 1);
} else {
$xfields_new_1 = "";
}

$tpl->result['content'] = str_replace ('{xfields_news_1}', $xfields_new_1, $tpl->result['content']);
  • 1
Artem
15.12 в 00:24
Да, именно. Спасибо. А какие именно теги в шаблон прописывать?
  • 0
Artem
15.12 в 00:28
И ещё дополнительный вопрос. Извиняюсь за столько всего.
Чтобы вывести ещё доп поля. Какие именно параметры меняются в коде ниже после дублировании блока?:

$xfields_1 = explode("images", $row_malcov_xfields);
$xfields_1 = explode("||", $xfields_1[1]);
$tpl->result['content'] = str_replace ('{xfields_news_1}', substr($xfields_1[0], 1), $tpl->result['content']);
  • 0
Оставить комментарий:
Нажимая кнопку «Отправить» вы даете согласие на обработку своих персональных данных.
Ваше Имя
Ваш E-mail
Текст комментария