Ответы пользователя по тегу 1С-Битрикс
  • Как выводить текст из каталога в Bitrix?

    Express777
    @Express777
    Откройте в текстовом редакторе шаблон компонента и поищите массив с ключом "PREVIEW_TEXT" or "DETAIL_TEXT". Например, $arSection["PREVIEW_TEXT"].

    Если такого нету, значит вывод текста в шаблоне убран.
    Ответ написан
    Комментировать
  • CFile::ResizeImageGet не работает со свойствам раздела UF?

    Express777
    @Express777
    В CFile::ResizeImageGet первым параметром нужно передавать ИД файла-картины:
    <?foreach($arResult["SECTION"]["PORTFOLIO"] as $arPortfolio){
            $resizePhoto = CFile::ResizeImageGet($arPortfolio, array('width'=>500, 'height'=>450), BX_RESIZE_IMAGE_PROPORTIONAL, true);
          ?>
            <img src="<?=$resizePhoto['src'];?>">
          <?}?>

    $arPortfolio, судя по дампу, массив с двумя ключами Ид и путь картинки( ID & SRC соотвветственно).
    Функция такой параметр не поймет.
    Можно было написать вот так:
    <?foreach($arResult["SECTION"]["PORTFOLIO"] as $arPortfolio){
            $resizePhoto = CFile::ResizeImageGet($arPortfolio["ID"], array('width'=>500, 'height'=>450), BX_RESIZE_IMAGE_PROPORTIONAL, true);
          ?>
            <img src="<?=$resizePhoto['src'];?>">
          <?}?>
    Ответ написан
    Комментировать
  • Не работает ссылка для скачивания в bitrix?

    Express777
    @Express777
    Сначала, проверьте, что у вас в $arResult['PROPERTIES']['PDF']['VALUE'] передается ИД файла.
    <?= $arResult['PROPERTIES']['PDF']['VALUE'] ?>
    Если все норм и передается интегер( например "33" и т.д), то попробуйте так:
    <?$pdf = CFile::GetFileArray($arResult['PROPERTIES']['PDF']['VALUE']);?> 
    
    <a href="<?=$pdf["SRC"];?>" class="file-types-link" download>pdf</a>
    Ответ написан
    Комментировать
  • Какую бесплатную IDE выбрать для bitrix?

    Express777
    @Express777
    Использую PHPStorm. Пока нареканий никаких нету, кроме большего количества потребления ресурсов.
    Особенно, когда открыто по 10-15 вкладок в браузере + PHPStorm + OpenServer. Опертивки должно быть не менее 4 Гб.

    Для быстрых правок маленьких скриптов использую Sublime text 3.
    Говорят, с помощью плагинов, из него тоже можно сделать ИДЕ.
    Ответ написан
    Комментировать
  • Как создать пользовательское поле доступное во всех инфоблоках?

    Express777
    @Express777 Автор вопроса
    Вот ответ из тех поддержки 1С:

    Такой возможности нет. Нужно создавать отдельно под каждый инфоблок.
    Ответ написан
    Комментировать
  • Как перенести БД пользователей из WordPress в 1С Битрикс?

    Express777
    @Express777 Автор вопроса
    Наконец то смог импортировать пользоватлей из вордпресса в битрикс.
    Я уже достаточно написал в обновлениях, чтобы можно было самому уже написать весь код.
    Но, на всякий случаи привожу свою версию с комментариями. Может и пригодится:

    1. Пользователей мы будем импортировать через стандатный сервис битрикса "импоритровать пользователей". Через него можно импортировать практический все, что относиться к юзерам:
    Импорт пользователей через CSV
    2. Если хотите импортировать пользовательское свойство, просто укажите название колонки с доп свойством, например UF_USER_FIELD и значения в нем, ( если это не множественное свойство, о множественных ниже).
    Если картинку (аватар), просто укажите в колонке PERSONAL_PHOTO относительный путь до картинки. Папку, с которой будут браться картинки, указываете в админ панели при импорте юзеров: "Путь к картинкам относительно корня сайта ".

    Теперь к конкретике.
    информация о юзерах в вордпрессе хранится в таблицах:
    wp_users - логин, пароль, емаил
    wp_bp_xprofile_data - аналогия с пользовательскими свойствами битрикса, хранятся значения
    wp_bp_xprofile_fields - названия пользовательских свойств

    Нужно в запросе связать эти таблицы и создать CSV file.
    Example:
    //  Подключение к БД вордпресса
    $mysqli = new mysqli("localhost", "root", "", "wp") or die("Not connected"); 
    if ($mysqli->connect_errno) {
        printf("Connect failed: %s\n", $mysqli->connect_error);
        exit();
    }
    $query = "select 
    	t_users.ID as `UF_OLD_USER_ID` /*Заранее создал поль 
            свойство с таким именем. Понадобится при импорте аватарок, 
            да и лучше сохранить старые ИД. На всякий случаи. */
    	, '1.jpg' as `PERSONAL_PHOTO`
    	, t_users.user_login as `LOGIN`
    	, t_users.user_pass as `PASSWORD`
    	, t_users.user_email as `EMAIL`
    	, t_users.user_registered as `DATE_REGISTER`
    	, SUBSTRING_INDEX(t_users.display_name, ' ', 1) as `NAME`
    	, SUBSTRING_INDEX(t_users.display_name, ' ', -1) as `LAST_NAME`
    	, max(CASE WHEN t2.name = 'Телефон'
    		THEN t1.value ELSE null END) as `PERSONAL_PHONE` 
    	, max(CASE WHEN t2.name = 'Город'
    		THEN t1.value ELSE null END) as `PERSONAL_CITY` 
    	, max(CASE WHEN t2.name = 'Адрес студии'
    		THEN t1.value ELSE null END) as `UF_ADDRESS` 
    	, max(CASE WHEN t2.name = 'Сайт'
    		THEN t1.value ELSE null END) as `PERSONAL_WWW` 
    	, max(CASE WHEN t2.name = 'Образ'
    		THEN t1.value ELSE null END) as `MASTER_SERVICE_1` 
    	, max(CASE WHEN t2.name = 'Визажист'
    		THEN t1.value ELSE null END) as `MASTER_SERVICE_2` 
    	
    
    	
    FROM wp_bp_xprofile_data as t1
    INNER JOIN  wp_bp_xprofile_fields as t2
    	on t1.field_id = t2.id
    INNER JOIN wp_users t_users
    	ON t_users.ID = t1.user_id 
    #where user_id = 3
    group by t1.user_id
    ";
    
    if( !$mysqli->query( $query ) )
    {
    	printf("Error: %s\n<br />", $mysqli->error);	
    }
    
    $create_q = "";
    $res = $mysqli->query( $query);
    $fp = fopen('file.csv', 'w+'); // Создание csv файла
    
    while ( $row = $res->fetch_assoc())
    {
    	// Некоторые значения хранятся в сериализированном виде. Преобразуем в массив.
    	$tmp1 = unserialize($row["MASTER_SERVICE_1"]) ? unserialize($row["MASTER_SERVICE_1"])  : array(); 
    	$tmp2 = unserialize($row["MASTER_SERVICE_2"]) ? unserialize($row["MASTER_SERVICE_2"])  : array();
    	// в Битриксе в сер виде хранятся значения множественных свойств.
    	$tmp = array_merge( $tmp1, $tmp2);


    Есть два пути сохранить значения множ свойств в Битриксе.
    Первый, по битриковский: Для каждого значения нужно создать новую строку в CSV.
    То есть, в каждой новой строчке должный быть те же данные
    у простых типов и меняться значение только у множественного свойства.
    И так, пока не переберешь все значения.


    Второй, через костыль.
    Сохранить все значения множ свойства в массив и:
    2.1 Записать значения напрямую в БД битрикса
    2.2 Через метод Cuser::update обновить значения у уже созданного пользователя. В качестве значения, нужно передавать как раз массив.
    По незнанию я выбрал метод 2.1


    Если нужно, подправляем данные в массиве tmp.

    Импортируем старые аватарки.
    Как я уже писал автарки хранятся как /uploads/avatars/[member_id]/[avatar file]

    $pathName = "./uploads-portfolio/avatars/".$row["UF_OLD_USER_ID"]."/";
    	$entries = scandir( $pathName );
    	$pattern = "#[\w\d]*-bpfull\.(png|jpg)$#";
    	
    	foreach($entries as $entry) 
    	{
    	    if ( preg_match($pattern, $entry)) 
    	    {
    	        $row["PERSONAL_PHOTO"] = "/".$row["UF_OLD_USER_ID"]."/".$entry;
    	    }
    	}
    
    	$tmp = array_unique( $tmp );
    // У меня UF_MASTER_SERVICE поль свойство множественного значения
    	$row["UF_MASTER_SERVICE"] = serialize($tmp);
    	fputcsv($fp, $row, ";", '"');
    	
    }

    Файл для импорта почти готов. Не забудьте добавить названия колонок. Сделать можно в Экселе или Libre Calc.

    Теперь в init.php добавляем события:
    Про сохранение паролей, прочитайте здесь:
    dev.1c-bitrix.ru/community/webdev/user/42405/blog/... ( Petr Zhuchkov Petr Zhuchkov )
    AddEventHandler("main", "OnAfterUserAdd", "__afterUserAdd");
    function __afterUserAdd( $arParams )
    {
         if(defined("USER_IMPORT_EXECUTION_TIME"))
         {
             // Adding multiply property for imported User
             // MY_MASTER_SERVICE - название колонки с множественным свойством
             // RESULT - ИД только, что созданного пользователя
             $mysqli = new mysqli("localhost", "root", "", "bitrix_db");
             $sql = "UPDATE b_uts_user SET UF_MASTER_SERVICE = '"
                    .$arParams["MY_MASTER_SERVICE"]
                    ."' WHERE VALUE_ID =".$arParams["RESULT"];
             $result = $mysqli->query( $sql);
             if( !$result )
             {
                 echo $mysqli->error;
             }
         }
    }

    Будье осторожны при этом методе. Внесенные данные видны в профиле пользователя. Даже берутся методом Getlist. Но, почему то не работают в поиске. А мне как раз нужен был поиск по этому свойству. Выход в цикле обновить значения множ свойства всех пользователей через Cuser::update.

    Все.
    Ответ написан
    1 комментарий
  • Как научиться программировать на основе 1С-Bitrix?

    Express777
    @Express777
    Мне очень помогли уроки от Михаил Базарова.
    Хороший учитель, внятная дикция, приятно слушать, без воды, также преподает основы. Новичкам очень поможет
    Видеуроки
    Ответ написан
    Комментировать
  • Что лучше XAMPP или Denwer, для дальнейшей установки битрикса и вордпресса?

    Express777
    @Express777
    Для локального развертывания очень удобен openserver. Open-server.ru

    Намного удобней по функционалу чем денвер. Быстрая смена версии пхп, в пару кликов, подключение к бд в гуи, куча разного софта из под коробки. Единственный минус, нету версии под линукс.
    Ответ написан
    Комментировать
  • Как автоматически генерировать ссылку на элемент в 1С Битрикс?

    Express777
    @Express777 Автор вопроса
    Пока сделал такой костыль:
    <?//Доделать проверку на соответвие шаблону, только тогда менять
    			$string = $arItem["PROPERTIES"]["LINKS"]["VALUE"];
    			$pattern = '/\?ELEMENT_ID=[0-9]+/';
    			$replacement = $arItem["CODE"]; // символьный код хранится в массиве с ключом "CODE"
    			$href_string = preg_replace($pattern, $replacement, $string);
    						
    			?>
                <a href="<?=$href_string."/"?>" class="client_<?=$arItem['ID']?>">
                <?echo CFile::ShowImage($imgID, 100, 100, 'border="0" style="float:left;height: 56px;" ');?>
                </a>
    Ответ написан
    Комментировать