Быстрый и надёжный хостинг на SSD-дисках от 165р в месяц   •   Реклама
2 863 просм
36 комм
Поделиться:

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

18 ноя
Хаки

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

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

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

36
комментариев
Форма комментирования этой статьи скрыта. Авторизуйтесь, чтобы расширить привилегии гостевого посещения и получить необходимую помощь от сообщества Pandoge.
    • 0
    1
      •  Пользователь
    17 мая в 12:53

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

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

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

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

    • -1
    828
      •  Администратор
    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']);

    }

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

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

    Делаю так:

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

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

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

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

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

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

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

    • 5
    828
      •  Администратор
    20 дек в 13:54

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

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

    • 6
    828
      •  Администратор
    20 дек в 13:53

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

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

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

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

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

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

    • 5
    828
      •  Администратор
    19 дек в 14:44

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

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

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

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

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

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

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

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

    • 6
    828
      •  Администратор
    18 дек в 21:18

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

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

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

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

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

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

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

    • 5
    828
      •  Администратор
    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 дек в 07:47

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

    • 5
    828
      •  Администратор
    17 дек в 23:43

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

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

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

    • 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 скрин после просмотра можете по желанию удалить..

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

    • 5
    828
      •  Администратор
    15 дек в 00:35

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

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

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

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

    • 10
    828
      •  Администратор
    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
      •  Гости
    14 дек в 23:26

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

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

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

    • 8
    828
      •  Администратор
    14 дек в 23:19

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

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

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

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

    • 8
    828
      •  Администратор
    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 дек в 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']);

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

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

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

    • 5
    828
      •  Администратор
    18 ноя в 20:47

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

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

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

    • 8
    828
      •  Администратор
    18 ноя в 16:39

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

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

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

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

    http://prntscr.com/hc27i2

    • 9
    828
      •  Администратор
    18 ноя в 14:30

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

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

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

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

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

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