Перед созданием новой темы, пожалуйста, ознакомьтесь с FAQ по LinkorCMS

Изменение места и содержания строки "Изменено"

Супер пользователь
Сообщений: 95
Полагаю что это не очень сложно, но сам сообразить не могу. Строка "изменено имярек дата", которая появляется при каждом редактировании поста на форуме расположена (ИМХО) не очень удобно, ко всему она ещё "размножается" при каждом последующем редактировании. Не все догадываются стереть лишнее - так и множатся сущности... А можно ли так:
1. Перенести эту строку вверх - туда где дата создания поста и ip
2. Изменить содержание на "последнее редактирование имярек дата"
3. Чтобы записывалось ТОЛЬКО последнее редактирование
Не сочтите за наглость - хотелось бы готовое решение (если это не слишком сложно), ну или хоть бы ткните в нужном направлении в нужную группу файлов.
Супер пользователь
Сообщений: 171
Quatrix:
ну или хоть бы ткните в нужном направлении в нужную группу файлов.

Наверное Вы ищете это?

modules\forum\functions\savepost.php
строка 66
$post_text .= "\n\n".'-- Изменено "'.System::user()->Name().'": '. TimeRender(time(), true, false).' --';

templates\bootstrap\module\forum_post.html
строка 29 - 31
<article id="posttext{post.id}">
{post.text}
</article>

-- Изменено "MEN": 20.11.2013 19:19 --
Я думаю система не может сама редактировать. Она только сохроняет отредактированный текст и если в тексте уже написано ИЗМЕНЕНО, она это не удолит, а снова напишет - ИЗМЕНЕНО.
-- Изменено "MEN": 20.11.2013 19:20 --
Если Вам это не надо и Вас это напрягает, попробуйте убрать в forum_post.html всё что касается {post.text}

-- Изменено "MEN": 20.11.2013 19:24 --
Разработчик
Сообщений: 605
Ладно, переместить вверх текста поста не большая проблема. Но вообще эта отметка о редактировании сообщении просто надпись, которая добавляется в конец текста поста при его редактировании. То есть никакой организованности и структуры нет. Отследить что есть надпись о редактировании в тексте поста и какая из них последняя сложновато (утроить разбор текст поста можно, тем более надпись вполне имеет шаблонность. но 100% гарантию точности разбор не даст, ибо в тексте поста может встретится нечто похожее и будет коцание поста. еще она легко редактируется пользователем (сам обычно вырезаю все старые), что тоже может сбить с толку (да и сейчас ей слишком сильно верить нельзя)).

По-хорошему тут надо ввести отдельный столбец. Можно там даже без всякой структуры (вроде сериализации) вставлять готовый текст о последнем редактировании, который будет выведен при рендеринге поста. Делается несложно. Добавляете новый столбец в таблицу forum_posts, тип varchar, длины 255 вполне будет достаточно (если не используете сериализацию данных, например, о всех редактированиях поста).

Дальше мучаете два файла: addpost.php и addtopic.php из папки /modules/forum/functions/. В первом меняете
$vals = Values('', $topic_id, $uid, time(), $name, $site, $email, $hideemail, $icq, $text, getip(), 0);

на
$vals = Values('', $topic_id, $uid, time(), $name, $site, $email, $hideemail, $icq, $text, getip(), 0, '');

Во втором меняете
System::database()->Insert('forum_posts', Values('', $topic_id, $user_id, time(), $user_name, $site, $email, $hideemail, $icq, $text, getip(), 0));

на
System::database()->Insert('forum_posts', Values('', $topic_id, $user_id, time(), $user_name, $site, $email, $hideemail, $icq, $text, getip(), 0, ''));

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

Затем уже в файле savepost.php переделываете сохранение этой надписи. Меняем фрагмент:
// Добавляем метку об изменении сообщения
$post_text .= "\n\n".'-- Изменено "'.System::user()->Name().'": '. TimeRender(time(), true, false).' --';
System::database()->Update('forum_posts', "`message`='$post_text'", "`id`='$post_id'");

на
// Добавляем метку об изменении сообщения
$last_edit_info = 'Изменено "'.System::user()->Name().'": '. TimeRender(time(), true, false);
System::database()->Update('forum_posts', "`message`='$post_text', `last_edit_info`='$last_edit_info'", "`id`='$post_id'");

где `last_edit_info` - название добавленного столбца.

В теории так.
Супер пользователь
Сообщений: 95
MEN, Мартин, спасибо огромное.
Мартин, всё сделал по инструкции.
Мартин:
last_edit_info
Не стал мудрствовать лукаво - так и обозвал столбец.
Мартин:
addpost.php, addtopic.php и savepost.php
Отредактировал копипастом. (без смайлика )
Результат - ничего не сломалось, уже хорошо. Но пока желанной надписи не появилось - это уже хуже.
Насколько я понял чтобы всё зафурычило надо ещё подредактировать showtopic.php
писать подобные конструкции я, к сожалению, толком не умею (сознательно) на подсознании накорябал что-то такое:
$vars['last_edit_info'] = TimeRender($post['last_edit_info']);

после строчек
// Сообщение
$vars['public'] = $forum_lang['added'].TimeRender($post['public']);
$vars['public_date'] = TimeRender($post['public']);

и в файле forum_post.html поставил {post.last_edit_info} после даты создания поста.
Результат - появление в желаемом месте надписи "нет данных" , что радует - значит я на верном пути, но и огорчает - я что-то делаю не так. Что?
Разработчик
Сообщений: 286
Попробуйте без TimeRender:
$vars['last_edit_info'] = SafeDB($post['last_edit_info'], 255, str);
Супер пользователь
Сообщений: 95
Агний, агроменное спасибо!
Заработало.
Причём высветились надписи в постах которые редактировал ещё несколько часов назад, проверяя опцию.

PS. Заметил одну вещь. Перестали объеденяться сообщения через установку чека и команду "выполнить" - доходит до собственно страницы с "назад" и "выполнить" - жмёшь выполнить и всё на том останавливается - не выполняет. Но удаляет пост тем же путём - нормально. Есть подозрение что баг связан с последними изменениями - но догадаться в чём собака порылась мне точно слабо...

-- Изменено "Quatrix": 21.11.2013 23:18 --

PPS. Мне кажется что такой вариант записи об изменении поста было бы совсем неплохо включить в новую сборку - кому как, а меня ленивые юзвери просто достают - не желают стирать лишние записи о редактировании. Особо ленивые ещё умудряются и цитировать с этими строчками. - такая каша получается - ужас. А так - никакого повода для раздражения. Всё чинно - мирно - благородно...

Только что заметил - исчезла кнопка "редактировать" во всех постах, созданных после произведённых изменений. Странно это. Где-то махонькая ошибка вкралась. Но где?

-- Изменено "Quatrix": 21.11.2013 23:39 --
Разработчик
Сообщений: 286
Объединение сообщений должно работать нормально. Может в шаблоне ошибка.
Супер пользователь
Сообщений: 95
Пытаюсь понять где мог накосячить. Кроме forum_post.html - никаких изменений не делал. Да и там - только {post.last_edit_info} вставил. Ничего больше не удалял и не изменял - ну кроме четырёх PHP...
Кстати, нашёл я причину исчезновения кнопки редактирования. Это я от великого ума, создавая новую колонку в таблице, воткнул её на предпоследнее место. Сейчас исправил - кнопка редактирования появилась, но, естественно только во вновь создаваемых постах. (где смайлик бъющийся головой о стену?)

Отдельным постом, дабы "завершить" тему под гром оркестра.
Ещё раз спасибо Мартин за готовое решение - я бы этого всего не сделал даже уткнувшись носом, MEN за подсказку насчёт шаблона и showtopic.php - именно ваш пост меня подтолкнул в нужном направлении и Агний за завершающую подсказку.
Насчёт объединения постов - это опять "я - дурак". Источник проблемы там же, где и исчезнувшая кнопка редактирования. Не объеденялись именно те посты, которые были созданы между созданием нового столбца в таблице в неправильном месте и исправлением его положения на правильное. Всё работает нормально. Чего и вам желаю.
Спасибо.
Разработчик
Сообщений: 605
Quatrix:
Но пока желанной надписи не появилось - это уже хуже.
Насколько я понял чтобы всё зафурычило надо ещё подредактировать showtopic.php

Да, вывод нужен. Что-то вылетело из головы к концу написания сохранения :(.

Quatrix:
Результат - появление в желаемом месте надписи "нет данных" , что радует - значит я на верном пути, но и огорчает - я что-то делаю не так. Что?

Так то вы вполне верно прокинули новую переменную в шаблон. Только вот функция TimeRender грубо говоря (у ней не один параметр) принимает на вход число (дату в виде unix timestamp, это число секунд с начала 1970 года) и превращает в наш привычный формат и возвращает строку в более привычном человеку формате отображения.
В функции есть проверка аргументов. Если ей дали не число, то она завершается со строкой "Нет данных". Но в данном случае она не нужна. Мы в тот столбец записали уже готовую строку для вывода в шаблон (там строка вроде "-- Изменено "Quatrix": 21.11.2013 23:39 --"), ее просто достаточно было прогнать через функцию вывода SafeDB, которая сделает вывод безопасным (вырежет теги, заэкранирует некоторые символы. у ней много опций).

Quatrix:
Причём высветились надписи в постах которые редактировал ещё несколько часов назад, проверяя опцию.

Значения все писались в базу, просто никто их не выводил корректно в тот момент.

Quatrix:
Мне кажется что такой вариант записи об изменении поста было бы совсем неплохо включить в новую сборку

В форум будет обновляться в части модерации. Это тоже думаю переделаем. Агний видимо во время рефакторинга форума решил сделать отметку о редактировании, добавив ее простым безболезненным путем.

-- Изменено "Мартин": 21.11.2013 21:08 --
Гости не могут отвечать на темы. Войдите или Зарегистрируйтесь.
Здесь присутствуют
(пользователей: 0, гостей: 1)
Быстрый переход: