Преобразование SQL даты в PHP дату

Эта записка о частой необходимости программиста, создающего сайты. Все выглядит так: в базе данных тип DATE, который в РНР выглядит как обычная строка “2011-06-13”. Наша цель преобразовать эту дату в формат, пригодный для использования функцией date(). А с помощью этой функций мы сможем получить все что угодно:

  • день
  • месяц буквами (полный, 3 буквы)
  • год
  • високосный год?
  • день недели
  • номер месяца

Все настолько просто

$phpdate = strtotime( $mysqldate );

Используем так

$pattMonth = ‘M’;
$pattDay = ‘j’;
$pattYear = ‘Y’;
$phpdate = strtotime($sqlDate);
$day = date($pattDay, $phpdate);
$mon = date($pattMonth, $phpdate);
$year = date($pattYear, $phpdate);

Реальный пример, как получить дату вида 27 декабря, 2011

$phpdate = strtotime($date);
$day = date(‘j’, $phpdate); // day
$mon = getRusDate(date(‘M’, $phpdate)); // month
$year = date(‘Y’, $phpdate); //year 2011
$tdate = “$day $mon, $year”;
echo $tdate;

На всякий случай код для обратного действия – записи из РНР в базу данных

$mysqldate = date( ‘Y-m-d’, $phpdate );
$mysqldatetime = date( ‘Y-m-d H:i:s’, $phpdate );

Получение полной временной метки

$mysqldate = $arrayData[$id][‘date’].’ ‘.$arrayData[$id][‘time’];
$phpdate = strtotime($mysqldate);
$need = date(‘r’, $phpdate);

На входе у нас “2011-04-29 02:54:00”, на выходе “Thu, 14 Jul 2011 22:14:00 +0400”. Это живой пример для RSS.

Вывод в списке категорий, так называемый roster или lister

Для передачи данных используем функцию:

$D[‘materials’] = $this->data->getMaterialsByCategory($category, $neededMaterialsCount, $start);

Для вывода используем код по образцу:

$m = $materials;
if (is_array($m)) foreach ($m[‘idS’] as $id)
{
$image_properties = array(
‘src’ => $m[$id][‘imgSrc’],
‘alt’ => $m[$id][‘imgAlt’],
‘width’ => ‘140’,
‘height’ => ‘140’,
‘title’ => $m[$id][‘imgTitle’]
);

echo’

‘;
}
echo $paging;
?>

$paging выведет постраничную навигацию, согласно тем настройкам, которые в контроллере.

А теперь посмотрим более оптимизированный код, и выводящий зоны. Зоны это когда нужно допустим вывести список новостей в 2 разных блока, в каждый допустим по 15. В первый блок будем выводить с 0 элемента по 14, во второй с 14 по 29. Показан код только для второго блока:

$start = 14;
$end = 29;
$counter = 0;
if (is_array($m)) foreach ($m[‘idS’] as $id)
{
$counter++;
if (!(($counter > $start) AND ($counter < $end))) continue;
$row = $m[$id];
$image_properties = array(
‘src’ => $row[‘bigImgSrc’],
‘alt’ => $row[‘imgAlt’],
‘width’ => ‘160’,
‘height’ => ‘120’,
‘title’ => $row[‘imgTitle’]
);
$phpdate = strtotime($row[‘date’]);
$day = date(‘j’, $phpdate); // day
$mon = getRusDate(date(‘M’, $phpdate)); // month
$year = date(‘Y’, $phpdate); //year 2011
$tdate = “$day $mon, $year”;
echo ‘

‘.character_limiter(cleanText($row[‘body’]),480).’

‘;
}

Добавления кода быстрой ссылки” в админ-панель”

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

Здесь только главный код на выводе в конце (end.php). stickynote.css и jquery.stickynote.js по умолчанию включены. Просто ничего не трогайте!

Генератор случайных анкоров с ссылками на сайт – полу-дорвей

Предложили мне как-то посмотреть какую-то сео конференцию. Там было рассказано как на адсенсе 5000 доляров заработать быстро. И там была эта идея, как бы яндекса находит “найдено по ссылке”. Под влиянием этой информации я написал код, с необходимым функционалом. Сейчас же верю что это не действует и это полу-дорвей.

Вот так выглядит это чудо на сайте:

А вот и сам код.

Код в контроллере:

$R = $this->data->getArrayOfAllPublicMaterials(10000);
foreach($R as $category=>$arrayData)
{
foreach($arrayData[‘idS’] as $id)
{
$seoHrefs[] = $arrayData[$id][curDateInUrlSett()];
}
}
unset($R);
$seoHrefs[] = site_url($this->ccnm.”/map”);
$seoHrefs[] = site_url();
shuffle($seoHrefs);
$D[‘seoHrefs’] = $seoHrefs;
$seoKeys = ‘покер скачать, рулетка казино, нибиру онлайн, окна купить’;
$seoKeys = explode(‘,’,$seoKeys);
shuffle($seoKeys);
$D[‘seoKeys’] = $seoKeys;

Код на выводе:

  • ” class=”noStyle greyText”>
  • Автоматический вывод меню сайта (категорий)

    При изготовлении обычного сайта восстает вопрос о автоматическом меню сайта по категориям. Более качественные сайты обычно выводят меню вручную, так как автоматизировать меню сложно, например как его сортировать? Но для более – менее говенного сайта вполне сойдет автомат с сортировкой категорий по алфавиту.

    В контроллере получаем данные категорий:

    $catData = $this->data->getFullCategoryData();
    $D[‘categoryData’] = $catData;

    В шее (neck.php) виводим внутри UL:

      if (isset($categoryData))
      foreach ($categoryData as $va)
      {
      $class = ”;
      if ($navSelectTab == $va[‘category’]) $class = ‘current_page_item’;
      echo ‘

    • ‘.$va[‘title’].’
    • ‘;
      }
      ?>

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

    $catHrefs = array();
    foreach ($catData as $cat)
    {
    $catHrefs[$cat[‘category’]] = $cat[‘catHref’];
    }
    $D[‘catHrefs’] = $catHrefs;

    Шаблон AJAX функции

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

    Современный пример

    function ajax()
    {
    $.ajax({
    type: “POST”,
    url: “”,
    data: {test: ‘test’},
    success: function(data){
    p = tryEval(‘(‘ + data + ‘)’);
    if(p===false)
    {
    return false;
    }
    if (typeof(p[‘error’]) != ‘undefined’)
    {
    if (p[‘error’] == ‘FAIL’) return false;
    }
    else
    {
    // do success here
    }
    },
    error: function(s, e){
    return false;
    },
    timeout: 25000
    });
    }

    Вот идентичный пример, но без использования return false

    function ajaxGet()
    {
    $.ajax({
    type: “POST”,
    url: ““,
    data: {},
    success: function(data){
    p = tryEval(‘(‘ + data + ‘)’);
    if(p===false)
    {
    CB.attr(‘value’, ‘Помилка!’);
    }
    else
    {
    if (typeof(p[‘error’]) != ‘undefined’)
    {
    CB.attr(‘value’, ‘Помилка!’);
    }
    else
    {
    CB.attr(‘value’, ‘OK’);
    }
    }

    },
    error: function(s, e){
    CB.attr(‘value’, ‘Помилка!’);
    },
    timeout: 25000
    });
    }

    Тут используется функция tryEval, можете и ее скачать у меня.

    function tryEval(code)
    {
    var res;
    try
    {
    res = eval(code)
    }
    catch(e)
    {
    Log(‘———— * * * eval error * * * ——————– < [ ' + e.name + ' ]');
    res = false;
    }
    return res;
    }

    Парадокс использования двух баз в CodeIgniter

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

    $this->db->where(’email’, $e);

    Обычно одной базы хватает, и все идет как по маслу. Но когда у вас появится необходимость использовать две базы данных, руководство фреймворка рекомендует использовать такую конструкцию

    $this->mailDb = $this->load->database(‘maildb’, TRUE);
    $this->mailDb->limit(1);

    При использовании я наткнулся на парадокс – если пользователи базы данных одинаковые, то $this->db-> “переписывается”, и начинает обращаться ко второй базе, в моем случае это конфигурация базы данных maildb. Конечно же это генерирует ошибки базы данных. Можно в таком случае обойти ошибки, если сначала вызывать всё со стандартной базы $this->db-> , а потом уже со второй базы $this->mailDb->. Но удобно ли это? На долго ли такого извращения хватит?

    Я рекомендую просто создать нового пользователя для второй базы данных, и использовать две базы параллельно, вперемешку и как угодно. Обычно на хостинге для каждой базы прилагается свой пользователь. Например у меня на хостинге на тарифе VIP 100 баз данных и 100 пользователей, так что проблем не возникает.

    Использование ссылки как управляющий элемент для скрипта

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

    Открыть что-то

    $(‘#test-click’).click(function(){
    vashaFunction();
    return false;
    });

    Из приведенного кода именно return false; выполняет функцию по предотвращению следования браузера по ссылке.

    Jquery mutli load – подключение библиотеки с двух источников.

    Данная идея возникла когда я отключил интернет из страха о поражении ПК через грозу. У меня Jquery загружается с статического хранилища яндекса:

    Так говорят быстрее, сервер меньше грузит. Может оно и так, но Яндекс не Бог, иногда и сам висит.

    Сразу же оговорюсь. Один день Яндекс так висел, что много сайтов загружались на половину. Особенно меня удивил сайт webmasters.ru, висевший секунд 30. По-этому лично я отказался от использования Яндексовского кода, и всем рекомендую гугловский. Мне сложно припомнить когда гугл висел. Все-таки американцы – профи!

    Задача в том, что бы подключать библиотеку со своего сервера, в случае если Яндексовский не доступен. Как это сделать? Все оказалось просто:

    Собственно это работает, так как в случае неудачи скачивания библиотеки с Яндекса, он тут же, не дожидаясь window.onload начинает грузить вашу библиотеку. Вот только путь http://localhost/blohher/_/js/jquery.js придется написать полный и ваш! Лично я сейчас его на РНР настрою, чтобы все было автоматически.

    Блог розробника сайтів і електронних схем