Задать вопрос
  • Кек правильно выбрать единственный элемент массива, который тоже является массивом?

    Express777
    @Express777
    Если обобщить все вышесказанное, то получиться вот такой код:
    $arMoreFoto = $arResult["DISPLAY_PROPERTIES"]["MORE_PHOTO"]["FILE_VALUE"];
    if ( !empty($arMoreFoto["SRC"]) ){
        $arMoreFoto  = array( $arMoreFoto );
    }
    
    <? foreach ($arMoreFoto   as $PHOTO) {?> 
    <img  src="<?=$PHOTO["SRC"]?>"   />
    <? } ?>

    Плюс этого то, что вам даже не придется менять ваш foreach. В него всегда будет приходить коллекция.
    Конечно ваш foreach маленький, и в принципе можно было бы дублировать его в if-else. Но Я не приветствую любое дублирование. При том часто бывают foreach-и со сложной версткой и структурой.

    Если используете IDE советую отказатсья от endforeach и от любого альтернативного синтактиса end* и использовать фигурные скобки.

    if(isset($arResult["DISPLAY_PROPERTIES"]["MORE_PHOTO"]["FILE_VALUE"][0])){
    ...
    }

    ммм.. этот код всегда будет возвращать true если массив не пустой. То есть им нельзя проверить вложенность массива.
    Ответ написан
    Комментировать
  • После переноса сайта Modx на все внутренние ссылки ведут на предыдущий сайт?

    Express777
    @Express777 Автор вопроса
    Получилось отредактировать через контексты
    Система - Управления контекстами - выбираем контекст( в моем случае web ) - Меняем параметр site_url. Обязательно сохраняем кнопкой "сохранить"
    58958dfbeb.png20943de55c944f1fa9ed54f95de9963d.png
    Версия МодХ 2.2.16 Traditional
    Ответ написан
    Комментировать
  • Как отписаться от всех хабов?

    Express777
    @Express777
    Можно настроить здесь habrahabr.ru/feed/settings
    Снимите галочки со всех хабов.
    Ответ написан
    Комментировать
  • Прикрепить свою форму bitrix?

    Express777
    @Express777
    Я уже отвечал на этот вопрос: Как создать форму с отправкой на почту и записью в инфоблок?

    Вам нужна только первая часть из ответа:

    Это достаточно просто, если вас устроит стандартный функционал.

    Есть простой компонент в битриксе. Называется "форма добавления и редактирования элементов".
    joxi.ru/52aNjzZIRedxA0
    Подключаете, настраиваете, в частности в какой инфоблок добавлять элемент.

    И как раз, добавляете свою форму на бутстрапе в шаблон компонента.
    Нюанс может заключаться в именах инпутов. Обычно они выглядят так <input type=text name="PROPERTY[12][0]">

    12 в этом случае это ИД свойство элемента в инфоблоке. [0] обязательное условие.

    Посмотрите как сделана форма на этой странице:
    weinig.cy35428.tmweb.ru/contacts/obratnaya-svyaz
    Ответ написан
  • Как создать форму с отправкой на почту и записью в инфоблок?

    Express777
    @Express777
    Это достаточно просто, если вас устроит стандартный функционал.

    Есть простой компонент в битриксе. Называется "форма добавления и редактирования элементов".
    joxi.ru/52aNjzZIRedxA0
    Подключаете, настраиваете, в частности в какой инфоблок добавлять элемент.
    Шаблон у него, конечно, не ахти. Скорее всего, нужно будет поменять. Но это уже другая задача.
    С первой задачей справились.

    Отправка письма.
    Скопируйте стандартный компонент /bitrix/components/bitrix/iblock.element.add.form в папку /bitrix/components/my_components/
    Надеюсь, знаете про правило никогда не редактировать стандатные компоненты. Править только скопированнный.
    Открываете файл component.php компонента iblock.element.add.form.
    Ищите комментарий // add new element . Это один из редчайших файлов в битриксе, где есть комментарий. Ура!
    Вставляете в условие
    joxi.ru/12M7aYNTY1xBrJ
    https://dev.1c-bitrix.ru/api_help/main/reference/c...
    CEvent::SendImmediate
    (
    $event,
    $lid,
    $arFields,
    $Duplicate = "Y",
    $message_id=""
    )
    Если у вас нестандартный шаблон письма. Вам, скорее всего, нужно будет создать новые тип и шаблон почтового события. Но это, уже другая задача.

    Все. Добавляйте элементы
    Ответ написан
    Комментировать
  • Битрикс: Не могу авторизоваться. В чем моя ошибка?

    Express777
    @Express777
    Проверьте файлы init.php and dbcon.php в папке /bitrix/phpinterface.

    Удалите из этих скриптов закрывающий тег ?>
    То есть закрывающего тега ПХП ?> в конце файла не должно быть!

    Проверьте в файле init.php выводятся ли какие нибудь HTML теги.
    Пример:
    function showPopup(){?>
    <div class="popup"></div>
    <?}?>


    Попытайтесь перенести временно все такие скрипты в header.php или закомментировать в инит.
    Проверьте заработало ли авторизация.
    Ответ написан
    3 комментария
  • Как прописать id для hmtl тега в 1C-Bitrix?

    Express777
    @Express777
    Смотрел через редактирование страницы - 0.

    Открываете через редактирование страницы. HTML тега нету? Отлично.
    Смотриет какие компоненты подключены на странице. Они начинаются с метода
    $APPLICATION->IncludeComponent();
    https://dev.1c-bitrix.ru/api_help/main/reference/c...
    Смотрите первый параметр. Это имя компонента. Например Bitrix.news.list
    Если это нестандартный шаблон, то обычно он находится по пути /bitrix/tempates/mySiteTemplateName/components/bitrix/news.list/template/.default/template.php
    Если стандартный, то
    /bitrix/components/bitrix/news.list/
    Открываете его, правите.

    Если не нашли нужный шаблон компонента на странице, то смотрите шаблон хедера или футера.
    /bitrix/tempates/mySiteTemplateName/header.php or footer.php

    Советую почитать про пространство имен битрикса
    dev.1c-bitrix.ru/learning/course/?COURSE_ID=43&LES...
    Ответ написан
    Комментировать
  • Как заставить компонент правильно определять SITE_ID при многосайтовости на битрикс?

    Express777
    @Express777
    У вас многосайтовость настроено через разные поддомены или другой сайт это просто подпапка на основном. Например, mysite.com/m/.

    Рекомендую начать с Настройки-Настройки продукта - Сайты - список сайтов. Посмотреть, какие условия стоят у вас при подключении шаблонов. Действительно ли у вас несколько сайтов, а не несколько шаблонов.

    Про порядок подключение скриптов почитайте здесь Страница и порядок ее подключения

    Там как раз написано, на каком этапе определяется SITE_ID
    Ответ написан
  • Как выводить текст из каталога в 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С:

    Такой возможности нет. Нужно создавать отдельно под каждый инфоблок.
    Ответ написан
    Комментировать
  • Что послушать про программирование?

    Express777
    @Express777 Автор вопроса
    UPD: Нашел, аудио подкасты про PHP конкретно:
    5minphp.ru/page/2

    blog.yandex.ru/post/25068
    Прямые ссылки на видео
    Наибольшая общая мера последние 2500 лет, 1 часть video.yandex.ru/users/ya-events/view/129
    Наибольшая общая мера последние 2500 лет, часть2 video.yandex.ru/users/ya-events/view/128/?cauthor=...
    Как раз что то подобное я имел ввиду.
    Послушал первую часть "Наибольшая общая мера: последние 2500 лет". Честное слово, просто оторваться не мог.
    Примерно 80% этого видео можно послушать, а 20% это код алгоритмов, которые надо видеть. В принципе, вытащить пару раз телефон из кармана, за часовую поездку в автобусе, не состовляет особого труда.
    Главная моя мысль, слушать учителей уровня Дональда Кнута или Александра Степанова
    К сожалению, с английским на слух у я меня очень плохо, иначе можно было бы послушать Харольда Абельсона и Джеральд Сассмана ( geektimes.ru/post/103322 ).
    Ответ написан
    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>
    Ответ написан
    Комментировать
  • Какой SQL сертификат можно получить легко для начинающего?

    Express777
    @Express777
    Попробуй поискать на intuit.ru
    Регистрируйся и ищу по запросу SQL.
    Я там изучал Линукс. Получил сертификат. Для начинающего сертификат самое то. Работодатели видят что кандидат не прочь самообучаться. Но вот быстро и легко вряд ли, ХЗ. Зависит от того, сколько часов будешь уделять в день. У меня ушло почти 2,5-3 недели. Так же зависит от выбранного курса.
    Ответ написан