Страницы

Поиск по вопросам

пятница, 21 июня 2019 г.

Как поулучить элементы каталога из json строки?1с-Bitrix

Дано:
Сервер под управлением centos 6 , там я развернул малый битрикс Также есть http://gw.open.1688.com:80/openapi/param2/1/cn.ali... запрос по которому мы получаем список элементов с сайта 1688.com
Необходимо, на основе полученных данных, в торговом каталоге сайта создать раздел с элементами. Элемент должен содержать цену, свойства, изображения, одним словом все, что есть в выгрузке.
Например, я на чистом битриксе сделаю компонент "КАТАЛОГ", там выведу раздел с элементами, как я понял надо написать какой то скрипт, который берет этот json, проходит по нему циклом и кидает данные через api функции в базу, то бишь после того как скрипт отработал у меня в базе будут товары и строку мусолить больше не нужно?
Вообщем, ребят подскажите плиз как подступиться? как написать этот скрипт? Как правильно вывести каталог?, желательно подробно, с примерами кода если можно) Или документацией


Ответ

у битрикса есть класс Bitrix\Main\Web\HttpClient его можно использовать для получения строки json и затем декодировать
use Bitrix\Main\Web\HttpClient;
$httpClient = new HttpClient($options); $httpClient->get($url); $res = $httpClient->getResult();
try { $ar = json_decode($httpClient->getResult(), true); } catch (\Exception $e){
}
if(is_array($ar)) { # если данные непосредственно в $ar foreach($ar => $product) { # добавление в базу } }
добавление элемента в инфоблок https://dev.1c-bitrix.ru/api_help/iblock/classes/ciblockelement/add.php
$el = new CIBlockElement;
$PROP = array(); $PROP[12] = 11;
$arLoadProductArray = Array( "MODIFIED_BY" => $USER->GetID(), // элемент изменен текущим пользователем "IBLOCK_SECTION_ID" => false, // элемент лежит в корне раздела "IBLOCK_ID" => 18, "PROPERTY_VALUES"=> $PROP, "NAME" => "Элемент", "ACTIVE" => "Y", // активен "PREVIEW_TEXT" => "текст для списка элементов", "DETAIL_TEXT" => "текст для детального просмотра", "DETAIL_PICTURE" => CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"]."/image.gif") );
if($PRODUCT_ID = $el->Add($arLoadProductArray)) { # добавляем информацию для каталога # https://dev.1c-bitrix.ru/api_help/catalog/classes/ccatalogproduct/add.php
# цены # https://dev.1c-bitrix.ru/api_help/catalog/classes/cprice/add.php
}
для вывода можно воспользоваться стандартным компонентов bitrix:catalog

left join подсчитать значения

SELECT p.* FROM poll p LEFT JOIN poll_answer a ON p.id_poll = a.id_poll LEFT JOIN poll_answer_user au ON au.id_poll = p.id_poll WHERE `archive` = 1 AND `hide` = 0 OR `enddate` < CURDATE()
Нужно подсчитать кол-во совпадений, при склейки poll_answer_user и добавить новый столбец вывода с кол-во совпадений.


Ответ

Если я правильно понимаю, вы хотите посчитать количество ответивших пользователей для каждого опроса. Буквально так:
SELECT id_poll, COUNT(*) AS cnt FROM poll_answer_user GROUP BY id_poll
Чтобы добавить поля из таблицы "опросы", используем это как под-запрос:
SELECT p.*, IFNULL(gau.cnt, 0) AS cnt FROM poll AS p LEFT JOIN ( SELECT id_poll, COUNT(*) AS cnt FROM poll_answer_user GROUP BY id_poll ) AS gau USING(id_poll) WHERE p.`archive` = 1 AND (p.`hide` = 0 OR p.`enddate` < CURDATE())
Кстати, будте осторожны с сочетанием AND и OR. Если не учитывать приоритет операций, можно получить неожиданный результат. Скобки укажут что именно требуется.

Запуск приложения с правами администратора, Java

Есть ли возможность в Java запускать приложение с правами администратора? Программно


Ответ

Да, есть такая возможность. Для этого надо выполнить 2 шага:
Выяснить, как из консоли на целевой платформе запустить приложение от имени Администратора; При помощи ProcessBuilder-а выполнить эту команду из своего приложения (cм. тут: Запуск приложения с помощью java ).

Как работает система голосования как на stackoverflow?

Как реализовать такую же на jquery? Когда пользователь кликает по стрелочке, jquery добавляет к ней класс и отправляет ajax-запрос на сервер - стрелочка загорается, в БД записывается - с этим понятно. А как быть после обновления страницы? При выводе новостей делать запрос в БД и добавлять "класс подсветки" к соответствующей стрелочке или при голосовании в куки записывать id стрелочки и потом их подсвечивать javascript'ом, и как тогда при авторизации массив этот в куки помещать?


Ответ

Лучше всё, что можно сделать на сервере, — делать на сервере и не нагружать железо пользователя.
Посмотри, как ВКонтакте работает. Он присылает новости в ленту кусками сформированного HTML кода и не навязывает кучу обработчиков на лайки и репосты при каждом изменении DOM дерева; просто везде есть вызов функций onclick, onmouseenter и т. д., прямо inline. Это и позволяет так быстро работать.

Как найти и экспортировать ветки реестра содержащие определенное значение в ключах?

В общем нужно перенести с одного реестра на одном ПК в другой реестр другого ПК такие ветки, которые содержат определенное слово или фразу или предложение и т.д.
Например по фразе "Рамамбахарамамбуру" находит ветку
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Patches\1CB0F51845E7C003A9AC9C64F0FDF687\SourceList\Net
и еще пару-тройку сотен.
Что как и чем сделать так, чтоб можно было эти ветки экспортировать, а на другом ПК импортировать одним файлом?
Нашел программу reg organizer - можно осуществить поиск, высвечиваются все ветки:

но, к сожалению, их можно только удалить)))
Есть ли какие-то такие супер программы с поиском и экспортом конкретных веток? Или как чем такое вообще можно провернуть? Что использовать?


Ответ

Поскребя в интернете по мануалам команд батника сделал такую программку:
@echo OFF
set counter=0 setlocal enableextensions enableDelayedExpansion
set TEMP_FOLDER_DIR=%temp%
egParts set SECTION_LIST=(HKEY_CLASSES_ROOT,HKEY_CURRENT_USER,HKEY_LOCAL_MACHINE,HKEY_USERS,HKEY_CURRENT_CONFIG)
if [%1]==[] (set KEY_NAME=HKLM\SOFTWARE\Classes\Applications) else (set KEY_NAME=%1) if [%2]==[] (set VALUE_NAME="Internet Explorer") else (set VALUE_NAME=%2) if [%3]==[] (set TMP_EXPORT=%TEMP_FOLDER_DIR%) else (set TMP_EXPORT=%3) if [%4]==[] (set DEST_MEEGED_FILE=%userprofile%\desktop) else (set DEST_MEEGED_FILE=%4)
if not exist %TEMP_FOLDER_DIR% mkdir "%TEMP_FOLDER_DIR%"
for /f "usebackq skip=1 tokens=1-2*" %%a in (`reg query %KEY_NAME% /f %VALUE_NAME% /s 2^>nul`) do ( set ValueName=%%a set ValueType=%%b set ValueValue=%%c
set TRUE=
if defined ValueName ( FOR %%G IN %SECTION_LIST% DO ( if not "!ValueName!"=="!ValueName:%%G=!" ( set TRUE=1 ) )
if defined TRUE ( set /a counter=counter+1 echo !counter! - !ValueName! c:\Windows\SysWOW64
eg.exe export !ValueName! "%TMP_EXPORT%\test!counter!.reg" ) ) )
copy /b "%TMP_EXPORT%\*.reg" "%DEST_MEEGED_FILE%\mergedFile.reg" rmdir %TEMP_FOLDER_DIR% /s /q
endlocal pause
где можно передать входные параметры:
1 - раздел где ищем 2 - значение, которое ищем 3 - временная папка для всех найденных веток 4 - финальная папка, где будет хранится общий файл со всеми слитыми кусками usebackq - возможность командного исполнения того, что заключено в обратные кавычки tokens - Задает элементы, передаваемые из каждой строки в тело цикла for при каждой итерации. В результате "tokens=1-2*" мы получаем название ключа, тип и значение ключа в ветке итерации
По умолчанию при отсутствии какого либо параметра ищет в HKLM\SOFTWARE\Classes\Applications (HKLM - HKEY_LOCAL_MACHINE), строку Internet Explorer, складирует куски в temp директорию, а окончательный результат кладет на рабочий стол

Кнопка для удаления yii2?

Есть ActiveForm в index.php, в контроллере получаю данные с формы и далее работаю уже с данными. Как передать в форму понятно, но вопрос, как в эту форму добавить кнопку удаления записи?


Ответ

Во View:
Удалить
Или
$model->id])) ?>
В контроллере:
use app\models\TestModel; class TestController extends Controller { public function actionDelete($id = false) { if (isset($id)) { if (TestModel::deleteAll(['in', 'id', $id])) { $this->redirect(['index']); } } else { $this->redirect(['index']); } } }
P.S. Где TestModel - имя модели Тут есть примеры по удалению записей: Перейти

Определить причину падения приложения без отладки

Приложение протестировано на большом количестве девайсов, но у клиента на его телефоне падает приложение при запуске. В проекте используется HockeyApp Bug Tracker, но даже он не успевает инициализоваться и отправить отчет. Отладить приложение соотвествено мы тоже не можем по причине того что клиент находится далеко, а как Вы поступаете в таких ситуациях? Хотелось бы услышать Ваше мнение


Ответ

Попробовать другой ловитель крашей, например ACRA Попробовать провести удаленную отладку: Так, или погуглить по запроссу adb remote debug Купить такой же дивайс, как у клиента. Указать тут, что у клиента за дивайс. Есть проблеммные дивайсы, возможно кто-нибудь уже сталкивался с проблемой определенного дивайса. Уточнить, оригинальная ли прошивка установлена у клиента. Есть ли у него Google Play Services?