Новый сервер, новый движок, новый дизайн!




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

14 Comments

  1. O-Planet

    МАГАЗИН?!!

    Reply
  2. O-Planet

    В общем, ничего получилось, но все-таки прегружено. Если мы более-менее ориентируемся в содержании сайта, поэтому, блочность можем воспринять, как механизм, помогающий что-то найти, то для нового посетителя оно может оказаться очень тяжеловесным.

    Почему бы не выдать на главной странице приветствие, типа http://infostart.ru/news.php?id=3 ? Разумеется, без комментов. Там же фотоэтюд команды сайта, Чебурашки, на пример, как победителя розыгрыша призов, несколько фоток с тусовки на катамаране, снабдив это текстом в стиле «о нас»…

    К левому столбцу претензий нет: удобно. А вот «Обсуждение программ», «Обсуждение новостей» я лично почти не пользуюсь. Пользуюсь, конечно, иногда. Но это — не повод, чтобы размещать их параллельно активным окнам. А что если их вниз бросить? Или вообще убрать, сделать двухярусный диз? То есть, обсуждение программ поместить на страницу программ, обсуждение статей — на страницу статей. В крайне случае, можно использовать выпадающие меню или блоки.

    Еще одно. Это, конечно, мелочь, но я лично оформлению много значения придаю. На мой взгляд, если бы вы не злоупотребляли этими полуовальными шапками в окнах-блоках, то дизайн легче бы воспринимался. Даже здесь: подчеркнутое «Новости портала» смотрится куда интереснее, чем заголовок «Новый сервер, новый движок, новый дизайн!». Уберите этот загоовок, в крайнем случае, разместите в контексте другим шрифтом. И блоки сразу же перестанут казаться тяжелыми. Они и блоками уже будут не столько будут восприниматься, как абзацами. А так оно чем-то смахивает на Win 3.11…

    У вас явно пробел с графикой. Вот пример: http://www.gigabyte.ru/ . Смотрите, как много всего на одной странице, но оно не чуствуется, что перегружено, потому что разбавлено картинками.

    Reply
  3. АЛьФ

    Если «теперь можно вытащить любой информационный блок на любую страницу сайта», то может имеет смысл в настройках пользователя задавать какие информационные блоки показывать?

    Reply
  4. support

    АЛьФ, да, такая идея была. Планировали сделать как на http://finam.ru или http://overclocker.ru/

    Reply
  5. Timesoft

    А почему с новым движком количество скачиваний разработок резко уменьшилось ?

    Обидно !

    http://infostart.ru/projects/index.php?id=254&ref=1110 вчера было больше 1500, а сегодня 349.

    Reply
  6. support

    Это все из-за качалок Download Master.

    С некоторых адресов по несколько сот (если не тысяч) заходов этим Download Masterом — то ли весь сайт выкачивали, то ли связь у них обрывалась (Download Master пишет про эти файлы, что «Докачка не поддерживается»), вот у них закачка и зацикливалась.

    Сделали не учитывать известные качалки при подсчёте скачиваний.

    При переходе на новый сервер, пересчитали закачки без учета Download Master.

    Добавили проверку на уникальный ip при скачивании.



    То, что уменьшились закачки, конечно обидно, мы сами были в неведении, но теперь цифра стала реальной, вот оказывается сколько «живых» посетителей скачали файл.

    Reply
  7. Timesoft

    Понял…

    Арифметика — это тоже наука !

    Reply
  8. SunShinne

    Почему я к своей проге не могу скриншот добавить?

    Reply
  9. support

    Все добавляется. Для это надо зайти в «Редактирование» проги, выбрать закладку «Изображения», добавить изображение.

    Reply
  10. acsent

    А можно ссылки без подчеркивания?

    Reply
  11. support

    Вот это точно нельзя :), ссылка должна быть подчеркнута, на то она и ссылка. Это уже у всех на уровне подсознания.

    Reply
  12. O-Planet

    Неужели только у меня одного вкус настолько извращен, что не приемлет прогрессирующую и преобладающую блочность в стиле Win 3.11? Интересно, все-таки. Я не спорю, это может быть удобно даже, но не для первой же страницы?! Суппорт промолчал. Не согласен? А сегодняшняя палитра утверждена тоже навеки?

    Reply
  13. support

    Спасибо, O-Planet, все верно. Только пока мы не готовы к глобальному редизайну. Так только по мелочи, блоки расятнули, сузили, одни добавили, другие убрали.

    Reply
  14. Спасибо за мастерство!

    Было бы здорово если бы немного выше, чем «Написать письмо»

    появилась возможность добавить строку в которой автор через «Настройки» мог бы

    при желании добавить что-то своё, например: реальное имя, девиз, адрес или прочее.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *