• Как опубликовать сообщение в группе с помощью API?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Чтобы отправить сообщение в живую ленту нужно еще более изощренный метод.

    Подключаем модуль Соц.сети:
    CModule::IncludeModule("socialnetwork");

    Чтобы отправить сообщение в ленту, нужно чтобы существовал пост, который будет отправлен в ленту, поэтому создаем сначала пост:

    $arFields = array(
     "TITLE" => "Заголовок записи",
     "DETAIL_TEXT" => "Тело сообщения",
     "BLOG_ID" => 1, //ID отправителя
     "AUTHOR_ID" => 1, //ID блога, в котором будет запись
     "DATE_PUBLISH" => '11.02.2014 09:08', // дада
     "PUBLISH_STATUS" => BLOG_PUBLISH_STATUS_PUBLISH, // Читаем в API
     "ENABLE_TRACKBACK" => 'N',
     "ENABLE_COMMENTS" => 'Y'
    );


    При успешном добавлении ($ID = CBlogPost::Add($arFields);) получим ID blogPost записи

    Затем необходимо отправить это сообщение в ленту, для нам нужен фрагмент кода (заменить соответствующим образом):

    $arEvent = array (
    	'EVENT_ID'     => 'blog_post',
    	'=LOG_DATE'    => 'now()',
    	'TITLE_TEMPLATE' => '#USER_NAME# добавил(а) сообщение "#TITLE#" в блог',
    	'TITLE'    => "Заголовок записи",
    	'MESSAGE'  => "Текст записи",
    	'TEXT_MESSAGE'  => "Текст записи",
    	'MODULE_ID'     => 'blog',
    	'CALLBACK_FUNC' => false,
    	'SOURCE_ID'     => $ID,
    	'ENABLE_COMMENTS'  => 'Y',
    	'RATING_TYPE_ID'   => 'BLOG_POST',
    	'RATING_ENTITY_ID' => $newID,
    	'ENTITY_TYPE' => 'U',
    	'ENTITY_ID'   => '1',
    	'USER_ID'     => '1',
    	'URL' => '/company/personal/user/1/blog/'.$ID.'/',
    );


    Создаём запись в ленте через: CSocNetLog::Add, на выходе получаем eventID (в случае успеха)

    Если все прошло хорошо, то выставляем права на пост (в премере отправляем ВСЕМ ПОЛЬЗОВАТЕЛЯМ G3)

    // Выдает права
    CSocNetLogRights::Add ( $eventID, array ("G3") );
    // Отправляет уведомление о новом сообщении
    CSocNetLog::SendEvent ( $eventID, 'SONET_NEW_EVENT' );


    Радуемся =)

    Все параметры получаются по средствам GetList например.
    Ответ написан
    4 комментария
  • Как вывести статистику яндекс метрики на сайт?

    @n1ger
    html+css
    <div class="table-title">
            <h3>Статистика посещений за последний месяц c <?php echo date('d-m-Y', strtotime('-1 month')); ?> по <?php echo date("d-m-Y"); ?>  из разных поисковых систем:</h3>
        </div>
        <table class="table-fill">
            <thead>
            <tr>
                <th class="text-left">Откуда</th>
                <th class="text-left">Количество визитов</th>
                <th class="text-left">Показатель отказов</th>
            </tr>
            </thead>
            <tbody class="table-hover">
    
            <?php
            $today=date("Ymd");
            $month_ago=date('Ymd', strtotime('-1 month'));
            $metrika_url = "http://api-metrika.yandex.ru/stat/sources/marketing.json?id=метрика&date1=$month_ago&date2=$today&sort=date&per_page=1000&oauth_token=токен";
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $metrika_url);
            curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
            $metrika = curl_exec ($ch);
            curl_close ($ch);
            $metrika_o = json_decode($metrika,true);
            
            foreach($metrika_o['data'] as $key=>$value){
                echo "<tr><td class='text-left'>".$value['name']."</td><td class='text-left'>".$value['visits']."</td><td class='text-left'>".($value['denial']*100)."%</td></tr>";
            }
            
            ?>
    </tbody>
            </table>
    Ответ написан
    3 комментария
  • SQL. Выборка или все записи. Что быстрее?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Вопрос либо не полный/не точный, либо бессмысленный.
    на 1000 записей таблица - выборки по таким таблицам с любыми параметрами занимают 0,0001-0,001 , зависит от железа.
    Логично предположить что выборка 2 полей не будет занимать больше времени чем выборка всех полей.
    2 поля выберутся быстрее(бд "знает" где эти значения лежат из индекса, а 1000 полей подряд будет пихать в результат тупо дольше).
    Вопрос скорости встает при передаче данных от бд к приложению, и тут опять же очевидно что разница в размере - пару десятков байт против пару килобайт, (не критично, но разница есть) говорит в пользу выборки по условию.
    В целом на представленных условиях разница в скорости выборки за все время существования данной таблицы не превысит времени потраченного на написание этого ответа.
    Ответ написан
    Комментировать
  • Сортировка getList битрикс. Стоит ли применять фильтр?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Если в инфоблоке несколько тысяч записей, какой запрос CIBlock::getList отработает быстрее, с применением arFilter или выборка всех записей?


    Если брать исходную постановку запроса: для CIBlock::getList без разницы сколько записей в самом инфоблоке, потому как Вы выбираете не элементы, а сами инфоблоки.
    Если речь идет о CIblockElement::getList(), то запрос не корректный.

    1) Для начала нужно понять что Вы делаете с записями. Время запроса сильно не изменится, а вот время обработки результата может "гулять" значительно.
    То есть, если Вы выводите на экран 1 тысячу значений и 1 миллион значений, то время будет существенным.

    2) Затем нужно понять, используете Вы сложный фильтр или простой.
    Например в инфоблоке у Вас 1 тысяча записей. Скажите, проще будет достать все? Или достать все, у которых этот параметр такой, такой или такой, а вот это параметр такой и такой, но только если дата в диапазоне от такого-то до такого-то и сегодня четверг.
    При небольших объемах, выбрать все элементы будет быстрее чем использовать фильтр по элементу, особенно если там есть логические операторы AND/OR, при этом с LIKE, да еще и множественными свойствами по инфоблоку 1.0
    Ответ написан
    Комментировать