Правил в коде движка, не знаю к сожалению, где править в плагине.
а правили в коде движка или плагина? Этот плагин дополняет класс топика
  • avatar ramjke
  • 0
Тебе нужно править JS функцию ls.subscribe.toggle, потому что ты передаешь в нее аргумент this.checked, а тег не может быть checked в отличии от input.
Да, это я сделал. Отключил на время плагин AceblogExtender и топик сохранился.В шаблоне топика add.tpl было поле с указанием категории куда сохранять топик.
Теперь другая проблема, как понять что в этом плагине не так, почему не сохраняется значение автора.
Да нет, не работает ни с пробелом, ни без
  • avatar ramjke
  • 0
class="sublink {if $oSubscribeComment and $oSubscribeComment->getStatus()}active{/if}

Забыли пробел
На чекбоксе работает на кнопке нет. Исходный код шаблона выше. То, что есть сейчас

{if $bAllowSubscribe and $oUserCurrent}
				
<a href="#" onclick="ls.subscribe.toggle('{$sTargetType}_new_comment','{$iTargetId}','',this.checked); return false;" id="comment_subscribe" class="sublink{if $oSubscribeComment and $oSubscribeComment->getStatus()}active{/if}"><span class="icon-heart"></span></a>
							
					
			{/if}


Остальной код наверное в ядре
  • avatar ramjke
  • 0
Если все работает тогда что еще нужно? Или дайте весь код всех файлов.
  • avatar ramjke
  • 0
Ты не передал значение формы в скрипт. В файле /classes/actions/ActionTopic.class.php в функциях SubmitEdit и SubmitAdd добавь после
$oTopic->setTags(getRequestStr('topic_tags'));

$oTopic->setAuthor(getRequestStr('topic_author'));
код смотрите внимательнее
<input {if $oSubscribeComment and $oSubscribeComment->getStatus()}checked=«checked»{/if} type=«checkbox» id=«comment_subscribe» class=«input-checkbox» onchange=«ls.subscribe.toggle('{$sTargetType}_new_comment','{$iTargetId}','',this.checked);»>
  • avatar ramjke
  • 0
$oUserCurrent и $oTopic работают потому что они переданы в шаблон, а $oSubscribeComment это совсем другой объект. Было бы не разумно передавать на каждую страницу все объекты движка.
Шаблон maxone. В исходном коде шаблона условие if $oUserCurrent && $oTopic->getIsFavourite() прописано и работает

{if $bAllowSubscribe and $oUserCurrent}
				<div class="hidden-xs text-muted subscribe">
					<div class="checkbox">
						<label>
							<input {if $oSubscribeComment and $oSubscribeComment->getStatus()}checked="checked"{/if} 
type="checkbox" id="comment_subscribe" class="input-checkbox" onchange="ls.subscribe.toggle('{$sTargetType}_new_comment','{$iTargetId}','',this.checked);">
							{$aLang.comment_subscribe}
						</label>
					</div>
				</div>
			{/if}
Исправил обратно на
public function getAuthor() {
return $this->_getDataOne('topic_author');
Ругается, что поле topic_author — NULL
SQL Error: Column 'topic_author' cannot be null at /home/k/konstaih/poety.su/public_html/classes/modules/topic/mapper/Topic.mapper.class.php line 51
Array ( [code] => 1048 [message] => Column 'topic_author' cannot be null [query] => INSERT INTO prefix_topic (blog_id, user_id, topic_type, topic_title, topic_author, topic_tags, topic_date_add, topic_user_ip, topic_publish, topic_publish_draft, topic_publish_index, topic_cut_text, topic_forbid_comment, topic_text_hash ) VALUES(36, 1, 'topic', 'Лермонтов',NULL, 'Лермонтов', '2018-11-29 21:19:47', '109.252.53.252', 1, 1, 0, NULL, '0', 'f87877f6b4006ad0f221e44ccb3152c8') [context] => /home/k/konstaih/poety.su/public_html/classes/modules/topic/mapper/Topic.mapper.class.php line 51 ).
  • avatar ramjke
  • 0
Либо вы можете сделать костыль и менять его вручную для каждого топика пока не хватает знаний, выглядить будет так:
public function getAuthor() {
    switch ($this->_getDataOne('topic_id')) {
    case 1:
        return "Пушкин";
        break;
    case 2:
        return "Лермонтов";
        break;
    case 23:
        return "Есенин";
        break;
    default:
       return "Неизвестный поэт";
    }
}

В таком случае для топика с ID=1 установлен автор «Пушкин», ID=2 «Лермонтов». ID=23 «Есенин». Все что не входит в этот список будет «Неизвестный поэт».
  • avatar ramjke
  • 0
Это хорошо что попробовали. В таком случае очевидно что в файл шаблона (.tpl) не передается объект $oSubscribeComment.
Так как вы не написали что за шаблон редактируется, то я не могу написать конкретно что сделать.
Вариантов 2:
1. Если шаблон includ'ится в другой шаблон, где использование $oSubscribeComment работает, то нужно поменять инклуд на следующий:
{include file='конечный шаблон.tpl' oSubscribeComment=$oSubscribeComment}

2. Если это сделать невозможно, то нужно получить и передать этот объект из PHP кода, ответственного за вывод этого шаблона, методом
$this->Viewer_Assign("oSubscribeComment",$oSubscribeComment);
  • avatar ramjke
  • 0
Дело в том, что в таблицу в таком случае ничего не записывается. В этой ситуации getAuthor() ВСЕГДА и для всех топиков будет возвращать «Пушкин». А, что если нужно написать для одних топиков «Пушкин», а для других «Лермонтов»? В таком случае вам нужно добавлять полноценное поле в таблицу topic базы данных и менять все функции как я описал.
Здесь у меня второй случай, 1 пользователь публикует разных авторов
Спасибо, я уже прописал эти пункты.
Покопавшись, вот эта функция работает только таким образом, только так добавляется топик на страницу.
То есть записывается в таблицу значение «Пушкин» или любое другое указанное как константа и выводится на страницу.
public function getAuthor() {
/*return $this->_getDataOne('topic_author');
*/
return «Пушкин»;
Это первое, что попробовал, но не работает
  • avatar ramjke
  • 0
Я так понимаю вы ходите добавить в базу данных, а имено в таблицу topic информацию об авторе. В таком случае если автор = создатель топика будет проще получть его логин с помощью такой конструкции:
$oUser = $this->User_GetUserById($oTopic->getUserId());
echo ($oUser->getLogin()); //выводит логин автора топика


Если у вас другие задачи, то по вашей проблеме:
$this->aValidateRules[]=array('topic_author','string','max'=>500,'min'=>2,'allowEmpty'=>false,'label'=>$this->Lang_Get('topic_create_author'),'on'=>array('topic'));

Эта строчка проверяет не форму, а поле в таблице topic. Так как судя по тому что вы написали, вам также необходимо:
1. Добавить новое поле в таблицу topic (topic_author)
2. Добавить поле в функции InsertTopic и UpdateTopic, чтобы это значение записывалось в базу данных при добавлении нового топика и при его редактировании.
3. Получить это поле из формы и записать в объект методом который вы уже создали в topic.entity.class.php
Вставить в функции TopicEdit и TopicAdd
$oTopic->setAuthor(getRequestStr('topic_author'));


В общем, лучше присмотритесь к первому варианту.