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




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *