Артём Мáлков

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

18 ноя40 комм

Как мне сообщил один из посетителей сайта, в 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 );

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

// © 2017 Artem Malcov | https://www.pandoge.com/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']);

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

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

Рекомендуем к просмотру
Выводим расширение файла (attachment) в DLE версий ниже 10.5
Хаки
Свой дизайн для каждого n-го файла (attachment) для DLE
Хаки
Как изменить формат даты редактирования новости {edit-date} в DLE?
Хаки
40
комментариев
Форма комментирования этого поста скрыта. Авторизуйтесь, чтобы расширить привилегии гостевого посещения и получить необходимую помощь от сообщества Pandoge.
    • 0
    11
      •  Проверенный
    20 апр в 02:25

    {xfields_news_1} - как не выводить доп. поле. Если оно не заполнено ?

    А если заполнено то выводить

      • 0
      11
        •  Проверенный
      20 апр в 02:28

      Хотелось бы такое. т.к. ещё текст нужно прятать определённый.

      [xfgiven_news_1] Текст: {xfields_news_1}[/xfgiven_news_1]

    • 1
    1
      •  Проверенный
    8 авг в 15:09

    Здравствуйте. Есть доп. поле с паролем от архива. Вывожу по вашей инструкции, с дополнением в комментах, чтоб если поле пустое, ничего не выводилось. Однако если пароль не задан, есть надпись "Пароль:" без дополнительного поля. Как реализовать функционал на подобие [xfgiven_password] и [xfnotgiven_password]? Заранее спасибо!

    • 1
    1
      •  Проверенный
    7 авг в 01:37

    Здравствуйте! Вопрос такого плана: А можно ли в файле attachment вывести какой либо текст только автору новости ( Например : тегами [mynews] и [not-mynews] )?

    • 2
    1
      •  Пользователь
    17 мая в 12:53

    Добрый день! Вопрос касающийся файла attachmen.tpl но не по данной теме (не нашел моего вопроса нигде). В общем решил вывести аттачмент в сайтбар, но не смог понять, как вывести верстку за рамки самой новости то есть в другой блок, который не входит в шорткод {content}

    • 1
    1
      •  Пользователь
    22 фев в 19:17

    Полезная штука. Не каждый пыхарь знает как решить эту проблему. Спасибо.

    • 0
    766
      •  Гости
    18 мая в 01:42

    Артём, а можно ли как-нибудь добавить в php код текст, чтобы он выводился вместе перед текстом из поля текстом из поля? Например, в поле добавляется год, только цифры, и вот, когда это поле заполнено, в аттаче появлялись не только цифры, но и слово "Год:".

      • 0
      766
        •  Гости
      18 мая в 02:27

      Делаю так:

      $tpl->result['content'] = str_replace ('Год:', '{xfields_news_2}', $xfields_new_2, $tpl->result['content']);

      Контент фуллстори пропадает, отображаются лишь комментарии :) Куда в коде нужно вставить, чтобы всё было норм?)

      • 0
      1067
        •  Команда Pandoge
      18 мая в 03:00

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

      if(isset($row_malcov_xfields)) {

      $xfields_1 = explode("images", $row_malcov_xfields);

      $xfields_1 = explode("||", $xfields_1[1]);

      $new_file = 'Год: '.substr($xfields_1[0], 1);

      $tpl->result['content'] = str_replace ('{xfields_news_1}', $new_file, $tpl->result['content']);

      }

      Данные только поменяйте для своего поля

      • 3
      766
        •  Гости
      18 мая в 03:53

      Вау, спасибо. А можно соединить с кодом, который выводит это поле только если оно заполнено?

      $xfields_2 = explode("god", $row_malcov_xfields);

      $xfields_2 = explode("||", $xfields_2[1]);

      if($xfields_2[0] != "") {

      $xfields_new_2 = substr($xfields_2[0], 1);

      } else {

      $xfields_new_2 = "";

      }

      $tpl->result['content'] = str_replace ('{xfields_news_2}', $xfields_new_2, $tpl->result['content']);

    • 0
    766
      •  Гости
    14 дек в 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']);

    Артём, надеюсь на вашу помощь ;)

      • 8
      1067
        •  Команда Pandoge
      14 дек в 12:49

      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
      766
        •  Гости
      14 дек в 23:07

      Делал также первый раз ещё, но код не срабатывает и доп поле выводится в чистом виде, т.е просто код -

      [xfvalue_hdd-after]. Версия DLE 12.0 sad

      • 8
      1067
        •  Команда Pandoge
      14 дек в 23:19

      Artem, нужно не [xfvalue_hdd-after] вставлять а {xfields_news_1}

      • 0
      766
        •  Гости
      14 дек в 23:26

      Спасибо. Сработало lol

      Ещё вопрос есть по выводу - можно ли сделать условия вывода по аналогии как по стандарту вывод?:

      [xfgiven_hdd-after]{xfields_news_1}[/xfgiven_hdd-after]

      • 10
      1067
        •  Команда Pandoge
      15 дек в 00:00

      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']);

      • 0
      766
        •  Гости
      15 дек в 00:24

      Да, именно. Спасибо. А какие именно теги в шаблон прописывать?

      • 0
      766
        •  Гости
      15 дек в 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']);

      • 5
      1067
        •  Команда Pandoge
      15 дек в 00:35

      Artem, везде _1 меняете на _2 и так далее

      • 0
      766
        •  Гости
      16 дек в 08:54

      Всё работает на ура. Спасибо Артём.

      Хочу спросить ещё об одном моменте! В новости у меня выводится всего 3 аттача, к каждому аттачу есть доп. поле с информацией которая указывается необходимой для этого поля. По вашему методу я сделал вывод этих доп. полей в файле attachment.tpl. Вся проблема что все 3 доп поля выводятся в полной новости к каждому аттачу. Т.е 3х аттача имеет 3х значения, вместо того чтобы к каждому иметь своё (по одному). Можно ли прописать какие либо теги в файле attachment.tpl - напр типа условий как у доп полей, чтобы был каждый код для 3х аттачей.

      Т.е например для 1 прикреплённого файла напр. такой

      [xfgiven_attach1]здесь html код для первого аттача[/xfgiven_attach1]

      [xfgiven_attach2]здесь html код для второго аттача[/xfgiven_attach2]

      [xfgiven_attach3]здесь html код для третьего аттача[/xfgiven_attach3]

      Дабы не запутать вас прикреплю скрин - http://joxi.ru/KAxnEn7uMoz7Rm

      P.s скрин после просмотра можете по желанию удалить..

      Думаю если поможете - этот хак многим пригодится кто выводит несколько аттачей в полной новости..

      • 0
      766
        •  Гости
      17 дек в 13:58

      Артём, помогите с вопросом выше wink

      • 5
      1067
        •  Команда Pandoge
      17 дек в 23:43

      Artem, чуть позже подумаю, что можно сделать

      • 0
      766
        •  Гости
      18 дек в 07:47

      Хорошо, спасибо огромное на отзывчивость такую, честно даже не ожидал. Буду вас читать, много полезных материалов у вас!

      • 5
      1067
        •  Команда Pandoge
      18 дек в 15:24

      Artem, я нашел следующее решение:

      1. Откройте файл functions.php в папке /engine/modules/

      2. Найдите:

      while ( $row = $db->get_row() ) {

      и выше вставьте:

      $mlc_numb = 1;

      3. Здесь же найдите:

      $tpl->result['attachment'] = '';

      и ниже вставьте:

      $mlc_numb++;

      4. Здесь же найдите:

      if( date( 'Ymd', $row['date'] ) == date( 'Ymd', $_TIME ) ) {

      и выше вставьте:

      $tpl->set_block( "'\\[numbattachment-".$mlc_numb."\\](.*?)\\[/numbattachment-".$mlc_numb."\\]'

      ;si", "\\1" );

      $tpl->set_block( "'\\[numbattachment-[0-9]\\](.*?)\\[/numbattachment-[0-9]\\]'si", "" );

      Все сохраняете, чистите кэш сайта.

      Далее, в шаблоне атачмента используете теги:

      [numbattachment-1] Текст для первого файла [/numbattachment-1]

      [numbattachment-2] Текст для второго файла [/numbattachment-2]

      [numbattachment-3] Текст для третьего файла [/numbattachment-3]

      и так далее.

      Как то так glass

      • 0
      766
        •  Гости
      18 дек в 17:58

      Блин) Вы наверное меня не так поняли, код то выше рабочий, но выполняет др функцию.

      Нужно чтобы теги numbattachment проверяли доп поле-аттач на присутствие в новости, и в случае если оно заполненно (есть этот аттач) то выводить. Всего в новости выводится от 1го-до 3х аттачей..

      Сможете допилить код? slim

      • 0
      766
        •  Гости
      18 дек в 17:59

      Я выше на скрине приводил пример

      • 6
      1067
        •  Команда Pandoge
      18 дек в 21:18

      Artem, то есть, если поле 1 заполнено - выводить первый аттач, если заполнено второе поле - второй аттач. Я правильно понял?

      • 0
      766
        •  Гости
      19 дек в 14:24

      Дело в том что может выводится как по одному аттачу, так и 3 сразу.

      Суть просто в том, чтобы сделать для аттача №1 - одну конструкцию из html, для второго - другую, и для третьего- третью.

      Вроде подключения разных шаблонов вывода для разных аттачей.

      • 5
      1067
        •  Команда Pandoge
      19 дек в 14:44

      Artem, дак вот чем выше код не подходит?

      [numbattachment-1] Вид 1 файла [/numbattachment-1]

      [numbattachment-2] Вид 2 файла [/numbattachment-2]

      [numbattachment-3] Вид 3 файла [/numbattachment-3]

      • 0
      766
        •  Гости
      20 дек в 07:44

      Аттачи после этих правок не выводятся вообще.

      Может моя ошибка что я не рассказал как идёт добавление аттача?

      - Загружается через доп. поле - тип. загружаемый файл. 3 таких поля

      название полей - load1 load2 load3

      • 6
      1067
        •  Команда Pandoge
      20 дек в 13:53

      Хм, в таком случае нужен доступ к сайту чтобы посмотреть (админка + ftp)

      • 5
      1067
        •  Команда Pandoge
      20 дек в 13:54

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

      Способ выше идет четко для аттача.

      • 0
      766
        •  Гости
      29 дек в 14:27

      Хм, именно вывод через аттач идёт, всё оформление и структура через него (attachment.tpl)

      Артём, можно ваш любой мессенждер для связи, всё подробно обьясню со скринами и пруфами, много времени не займёт, но надеюсь на вашу помощь)

    • 1
    766
      •  Гости
    18 ноя в 12:57

    Артем, в актуальной версии код functions.php немножко отличается, как правильно заменить код?

    Такой код у меня.

    $db->query( "SELECT * FROM " . PREFIX . "_files WHERE $where" );

      • 9
      1067
        •  Команда Pandoge
      18 ноя в 14:30

      Abasive, в вашем случае эту строку можно не заменять

      • 0
      766
        •  Гости
      18 ноя в 16:07

      Получилось, но работает хак только тогда когда в новости одна ссылка атача.

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

      http://prntscr.com/hc27i2

      • 8
      1067
        •  Команда Pandoge
      18 ноя в 16:39

      Abasive, а если не использовать хак - работают все прикрепленные файлы? Мне просто кажется что проблема не в хаке.

      • 0
      766
        •  Гости
      18 ноя в 17:00

      Артем, да работает без хака.

      • 5
      1067
        •  Команда Pandoge
      18 ноя в 20:47

      Abasive, полностью переписал принцип работы метода. Пробуйте.

      • 1
      766
        •  Гости
      18 ноя в 22:15

      Артем, все работает. Спасибо

Подняться наверх
«Pandoge» - помощник вебмастера