Поэтому представляю на ваш суд код и прошу указать на недочеты и возможные подводные камни.
Преамбула: у нас в организации есть оборудование, установленное в помещении, где компьютеров нет. А информацию по оборудованию получить надо.
Но у работников есть смартфоны! А у некоторых еще и планшеты!
И я подумал, что можно сделать так, чтобы отсканировав код сотрудник попадал на карточку оборудования, из которой бы получил все необходимые сведения - ТТХ, инструкцию или что ещё ему нужно, то есть ту информацию об оборудовании что хранится в базе.
Для генерации кода решил использовать API от Google. Да, понимаю, что если вдруг Гугл закроет API, то я останусь с носом, и лучше бы использовать для этих целей локальный генератор на сервере, но лень.
За основу был взят код от wondertalik из этой темы, а так же кусок отсюда.
В результате получился код, который отсылает запрос Гуглу, получает картинку и кладёт её в базу. Можно, конечно, было бы и не класть картинку в КБ, но дикое количество запросов на генерирование картинок, которое будет выполняться каждый раз при отображении кодов может привести к тому, что, как бы это странно ни звучало, Гугл меня забанит.
Итак, нужно создать поле с типом "Изображение", размером 150*150 (этот размер в соответствии с кодом отдает нам Гугл).
Также, нужно создать вычилсение с условием срабатывания, необходимым Вам (у меня это - сохранение, т.к. массовых сохранений не предвидится, главное - не стОит делать срабатывание на "отображение поля")
//Присваиваем переменной ссылку на просмотр текущей записи. //Следует учитывать, что символ "&" Гугловский парсер скушает и не отдаст ничего после него, поэтому его следует записать в URL-кодировке как "%26" $url = "http://base.bing-online.ru/view_line2.php?table=".$table_id."%26line=".$line_id; //Присваиваем переменной значение, которое отправит запрос на создание QR-кода размером 150*150 $srcImgUrl = "https://chart.googleapis.com/chart?chs=150x150&chld=M|0&cht=qr&chl=".$url; //Гугл отдает PNG, поэтому явно указываем расширение. $typeFile = png; //Гугл не отдает названия файла в удобочитаемом виде, поэтому для генерируемого изображения берем значение ID таблицы и значение ID строки $nameFile = $table_id."_".$line['ID'].".".$typeFile; //Удаляем запись об имеющемся (старом) файле $line['Фото товара'] = ""; //Удаляем имеющийся файл drop_data_file($table_id, $line_id, $nameFile); //Удаляем предпросмотр из папки cache //!!!! Следует обратить внимание, что здесь и далее в коде используется идентификатор поля, в котором будет храниться изображение "QR-код" (11260), и его нужно сменить! $name_cache_file = "cache" . "/" . $table_id . "_" . "11260" . "_" . $line_id . "_" . utf2eng($nameFile) . ".png"; unlink($name_cache_file); //Генерируем имя временного файла $file_hash = get_file_hash($field_id, $line_id, $nameFile); $path_tmp_name = "temp/" . $file_hash; //Создаем дескриптор по указанному файлу. $fp = fopen($path_tmp_name, 'w+'); //Качаем файл по ссылке. //PHP должен быть с поддержкой curl, иначе словим ошибку! $ch = curl_init($srcImgUrl); curl_setopt($ch, CURLOPT_FILE, $fp); $data = curl_exec($ch); curl_close($ch); fclose($fp); //Определяем путь к загружаемому файлу в КБ $file_path = get_file_path(11260, $line['ID'], $nameFile); //Создаем необходимую структуру директорий create_data_file_dirs(11260, $line['ID'], $nameFile); //Копируем скаченный файл copy($path_tmp_name, $file_path); //удаляем временный файл unlink($path_tmp_name); //Перезаписываем изображение, хранящееся в поле "QR-код" $line['QR-код']=$nameFile; // Формируем предпросмотр изображения в папке cache $cur_line = $line; $cur_table = $table; $cur_field = get_table_fields($table); $cur_field = $cur_field[11260]; $t = form_display_type($cur_field, $cur_line);
Дальше планирую создать шаблон, по которому будут печататься этикетки с QR-кодом и инвентарником оборудования. Печатаем на липкой бумажке, и клеим на нужный аппарат.
Еще раз напомню, что я "не настоящий сварщик"©, и буду рад замечаниям и предложениям по оптимизации и универсализации кода.
Сообщение отредактировал Илья: 21 Август 2015 - 20:21