Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

коментария к инфоблокам через форум. не работает

00 голосов
4
UP...

Есть инфоблок новости у этого инфоблока есть дополнительное поле выподающий список из элементов списк форумов.
При добавление новости выбирается нужный из списка форумов, форум.

в файле оброботчика события /bitrix/php_interface/init.php
след. код:
Код
AddEventHandler("iblock", "OnAfterIBlockElementAdd",   array("ComentComponentForum", "CreateTopic") );
   
class ComentComponentForum {
   //Создаем топик 
   function CreateTopic(&$arFields){
      include_once $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/forum/include.php';
      $ElemValue = '';
      //Найти ID_TOPIC ID
      $properties = CIBlockProperty::GetList(Array("sort"=>"asc", "name"=>"asc"), Array("IBLOCK_ID"=>$arFields['IBLOCK_ID']));
      $IDProperty = '';
      $IDPropertyFORUM = '';

      while ($prop_fields = $properties->GetNext()){
         if($prop_fields['CODE']=='ID_TOPIC') $IDPropertyTOPIC = $prop_fields["ID"];
            
         if($prop_fields['CODE']=='FORUM_FID')
            $IDPropertyFORUM = $prop_fields['ID'];
      }
      
      foreach($arFields['PROPERTY_VALUES'] as $key=>$item){
            if($key==$IDPropertyFORUM){ 
               //$Propertys[] = 'PROPERTY_'.$IDPropertyFORUM.'_ID'; 
               $ElemValue = $item['n0']['VALUE'];      
            }            
         }

      
      //Если получили ID элемента нужно выдернуть ID Форум группы из значения.   
      if(!empty($ElemValue)){   
         $res = CIBlockElement::GetList(Array("SORT"=>"ASC"),  Array("IBLOCK_ID"=>19, "ID"=>$ElemValue , "ACTIVE"=>"Y") ,
         false, false,  array('PROPERTY_9_ID'));
         $arFiel = $res->GetNext();
         //Получаем ID Форума...
         $FID = $arFiel['PROPERTY_9_ID_VALUE'];
      }

   
      global $USER , $DB; 
      $UserName = $USER->GetFullName();

      $arFieldsM = array( 
            'POST_MESSAGE' => "Обсуждение статьи ".$arFields['NAME'] . "<br> URL: ".$arFields['DETAIL_PAGE_URL'] , 
            'TITLE'=> $arFields['NAME'],
            'AUTHOR_NAME'=>$UserName,
            'DESCRIPTION'=> "Обсуждение статьи ".$arFields['NAME'] ,
            'USE_SMILES'=>'Y',
         );


      
         
         
         //if($_SESSION[IDART]==$arFields['ID']) return false;
         
            if(!empty($FID) and $_SESSION[IDART]==''){
               $testtext = "Обсуждение статьи ".$arFields['NAME'] ."<br> URL: ".$arFields['DETAIL_PAGE_URL'];
         
         
         
         $result = ForumAddMessage('NEW' , $FID , 0, 0, $arFieldsM, $strErrorMessage , $strOKMessage);   //тема создается но без текста 
         
            $_SESSION[IDART]= $result;
            $_SESSION[IDART_TEXT]=  $testtext;      
            //AddMessage2Log($SQL);   
            
            //   $SQL = "UPDATE `b_forum_message` SET `POST_MESSAGE` = '".$_SESSION[IDART_TEXT]."' WHERE `ID` =".$_SESSION['IDART'].";";
            //CIBlockElement::SetPropertyValueCode($arFields["ID"], "ID_TOPIC", $result);
             //   return true 
            //   mysql_query($SQL);
            //   return true;
         }

      
      
      return false;   
   }
}


Раньше все работало, сейчаз создается тема форума как и должно но без текста .
Я пробывал создовать вручную через запрос но текс темы не вставлялся, я пробовал создать тему и потом обновить сообщение чезер запрос или функцию но также безрезультатно.
Выполняешь в ручную запрос к phpmyadmin все меняется. парадокс?

$_SESSION[IDART] я обнуляю в файле /bitrix/header.php иначе битрикс прогонит код 2 раза.
спросил 08 Фев, 14 от hAWPeN (640 баллов)

4 Ответы

00 голосов
ну кто нибуть знает почему не вносятся в базу данные?
ответил 23 Июнь, 14 от hAWPeN (640 баллов)
00 голосов
Цитата
Александр Тутик пишет:
ну кто нибуть знает почему не вносятся в базу данные?

Модуль форума попробуйте подключить, врядли поможет, но стоит попробовать
Код
CModule::IncludeModule('forum');
ответил 22 Окт, 14 от Almarea (3,760 баллов)
00 голосов
попробывал без результатно, до этого тоже пробывал.
также опробывал вот такой вариант но он чето вообще не запахал
Код
...
CModule::IncludeModule('forum');

global $USER , $DB; 
$UserName = $USER->GetFullName();
$AUTHOR_ID = $USER->GetID();

$arFields1 = Array(
  "POST_MESSAGE" => $testtext,
  "USE_SMILES" =>  "Y",
  "APPROVED" => "Y",
  "AUTHOR_NAME" => $UserName,
  "AUTHOR_ID" => $AUTHOR_ID,
  "FORUM_ID" => $FID,
  "TOPIC_ID" => 0,
  "AUTHOR_IP" => ($AUTHOR_IP!==False) ? $AUTHOR_IP : "<no address>",
  "NEW_TOPIC" => "Y"
);
$ID1 = CForumMessage::Add($arFields1); if (IntVal($ID1)<=0)  AddMessage2Log( "Error!");

вообще игнорирует.

меня еще интресует почему он игнорирует явные запросы к бд?
Код
$SQL = "UPDATE `b_forum_message` SET `POST_MESSAGE` = '".$_SESSION[IDART_TEXT]."' WHERE `ID` =".$_SESSION['IDART'].";";
ответил 21 Фев, 15 от hAWPeN (640 баллов)
00 голосов
все так прсто было...

страница была в cp1251 а сообщение в утф8 и две страки разной кодировки пытались записатся в базу в результате облом, текст сообщения не записывался в базу.

также заметил особенось при получении нового ID через GetBYID ссылка на детальный просмотр (DETAIL_PAGE_URL) была ID на 1 больше почему так не известно.

Обошол просто
Код
$res = CIBlockElement::GetByID($arFields[ID]);
$ar_res = $res->GetNext();
if(isset($FID) and $_SESSION[IDART]==''){
$urlPage = str_replace($ar_res[ID], intval($ar_res[ID] - 1)  , $ar_res[DETAIL_PAGE_URL]);

...
}
ответил 31 Май, 15 от hAWPeN (640 баллов)

Похожие вопросы

0 голосов
3 ответов
спросил 26 Фев, 14 от Sekis (180 баллов)
0 голосов
6 ответов
спросил 13 Июнь, 13 от EDKA (980 баллов)
0 голосов
1 ответ