Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Делимся опытом

Ответить
Настройки темы
Делимся опытом

Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


Изменения
Автор: Prisoner
Дата: 22-06-2005
Все люди индивидуальны. Каждый по своему глядит на мир и на работу в частности. У кого-то призвание может оказать помощь и не малую. Предлагаю делиться опытом. Возможно, модераторы этого раздела соберуться с силами и создадут FAQ на основе этой темы и всех имеющихся. Просьба советы и всяческие типсы каким-то образом выделять. Скажем нумерация аля "Фишка №(№предыдущей+1)" . Ведем обсуждение и общаемся. Если не трудно, то указываем свое отношение и поправки - это тоже информация. В путь и да пребудет с нами Сила .

-------
Не могу дать более дельный совет - не хватает системных ресурсов...


Отправлено: 14:57, 09-03-2005

 

Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


Полезность №18.
Часто необходимо вычислить дату через "сколько-то там чего-то". Ну к примеру не терпится узнать, что за дата будет через 13 дней или 13 недель. Чаще необходимо решение задача вывода дня недели через Х дней. В любом случае поможет связка date и strtotime. Примеры из официальной доки по strtotime:
Цитата:
int strtotime (string time [, int now])

Функция ожидает строку, содержащую английский формат даты, и пытается разобрать этот формат в UNIX timestamp относительно timestamp, заданного в параметре now, или относительно текущего времени, если ничего не задано. При неудаче возвращает -1.

Пример 1. strtotime()
Код: Выделить весь код
echo strtotime ("now"), "\n";
echo strtotime ("10 September 2000"), "\n";
echo strtotime ("+1 day"), "\n";
echo strtotime ("+1 week"), "\n";
echo strtotime ("+1 week 2 days 4 hours 2 seconds"), "\n";
echo strtotime ("next Thursday"), "\n";
echo strtotime ("last Monday"), "\n";
На основе такой функциональности можно легко писать следующее:
Код: Выделить весь код
echo 'Завтра: '.date('D, j M Y', strtotime("+1 day")).'<br>';
echo 'Послезавтра: '.date('D, j M Y', strtotime("+2 day")).'<br>';
echo 'Через неделю: '.date('D, j M Y', strtotime("+1 week")).'<br>';

-------
Не могу дать более дельный совет - не хватает системных ресурсов...


Отправлено: 15:19, 30-07-2005 | #21



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


Фенька №19
Порой необходимо сортировать многомерные массивы.
Код: Выделить весь код
array(8) {
  [0]=>
  array(7) {
    ["UID"]=>    
    string(2) "92"
    ["owner"]=>
    string(9) "Петров П."
    ["post"]=>
    string(6) "Стажер"
  }
  [1]=>
  array(7) {
    ["UID"]=>
    string(2) "62"
    ["owner"]=>
    string(9) "Иванов И."
    ["post"]=>
    string(6) "Мастер"
  }
  [2]=>
  array(7) {
    ["UID"]=>
    string(2) "61"
    ["owner"]=>
    string(10) "Сидоров С."
    ["post"]=>
    string(6) "Стажер"
  }
Причем по какому полю - не известно, в перспективе необходима возможность сортировки по всем полям. Тут поможет create_function.
Цитата:
string create_function (string args, string code)

Создаёт анонимную функцию из передаваемых параметров и возвращает уникальное имя для неё. Обычно аргументы args будут передаваться в единой закавыченной строке, это же рекомендуется и для code. Смысл использования отдельных закавыченных строк в том, чтобы защитить имена переменных от разбора, иначе, если вы используете двойные кавычки, появится необходимость мнемонизировать имена переменных, например, \$avar.

Вы можете использовать эту функцию для (например) создания функции из информации, получаемой на этапе прогона:Пример 1. Создание анонимной функции с помощью create_function()
$newfunc = create_function('$a,$b','return "ln($a) + ln($b) = ".log($a * $b);');
echo "New anonymous function: $newfunc\n";
echo $newfunc(2,M_E)."\n";
// выводит:
// New anonymous function: lambda_1
// ln(2) + ln(2.718281828459) = 1.6931471805599
Пусть имеется список допустимых полей по которому мы должны обеспечить сортировку - как бы ограничитель полей по которым вообще можно сортировать (так или иначе он у нас будет, либо из головы, либо из БД (см. fetch_fields)):
$arFields = array('field1', 'field2', 'field3');
тогда сортировка вышеприведенного массива выглядит примерно так:
Код: Выделить весь код
if ($up === true)
         usort($array, create_function('$a,$b','if ($a[\''.$arFields[$FID].'\'] == $b[\''.$arFields[$FID].'\']) return 0; else return ($a[\''.$arFields[$FID].'\'] < $b[\''.$arFields[$FID].'\']) ? -1 : 1;'));
       else
         usort($fResult, create_function('$a,$b','if ($a[\''.$arFields[$FID].'\'] == $b[\''.$arFields[$FID].'\']) return 0; else return ($a[\''.$arFields[$FID].'\'] > $b[\''.$arFields[$FID].'\']) ? -1 : 1;'));
Где $FID номер поля.

-------
Не могу дать более дельный совет - не хватает системных ресурсов...


Отправлено: 19:08, 30-07-2005 | #22


Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


Плюшка №20.
Интересная картинка - шпоргалка по css (97 kb).

-------
Не могу дать более дельный совет - не хватает системных ресурсов...


Отправлено: 13:55, 03-08-2005 | #23


Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: gif output1.gif
(1.6 Kb, 19 просмотров)
Тип файла: gif output2.gif
(10.9 Kb, 13 просмотров)
Вложения
Тип файла: zip debug.zip
(1.2 Kb, 9 просмотров)

Полезность №21 (очко!)
Вернусь к вопросу о дебажном выводе. Со временем мне стало не хватать "мощности" функции и я решил ее расширить:
1) Блок с выводом можно свернуть/развернуть
2) Блок можно закрыть
3) Можно управлять выводом заголовка с помощью параметра функции (ниже) для вывода сообщений
Подробнее:
Пп. (1) и (2) реализуется путем разового вывода куска JS-кода двух функций: сворачивания/разворачивания блока и его скрытия. Т.о. вызовов функции может быть несколько, но вывод JS будет произведен только однажды.
П. (3) полезен в ситуации когда хочется узнать что возвращает функция с разными параметрами: к примеру есть некий параметр $param который однозначно определяет работу функции (де юре), передаем его в функцию дебажного вывода вместе с самим результатом функции (тот, который return'им) и видим результат работы проверяемой функции (де факто).
Синтаксис:
void var_dumpf (mixed $var [, array $options])
Выводит содержимое переменной $var переданной по значению с заданными опциями $options.
$options - массив со следующими допустимыми ключами:
  • width - string, ставится в width таблицы обрамляющей блок вывода, по сути ширина блока вывода
  • collapsed - boolean, будет ли свернут блок или нет
  • message - string, добавочная строка выводящаяся в заголовке блока
Примеры:
PHP код: Выделить весь код

//вывод №1

$options = array('message' => $dbFields'collapsed' => true);
var_dumpf($fResult$options);
//вывод №2
var_dumpf($fResult); 

("Выводы" в прикрепленных файлах, там же функция)

-------
Не могу дать более дельный совет - не хватает системных ресурсов...


Последний раз редактировалось Prisoner, 20-08-2005 в 16:04.


Отправлено: 18:41, 17-08-2005 | #24


Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: zip selector.zip
(5.2 Kb, 9 просмотров)

Предлагаю вашему вниманию самописный класс-компонент селектора.
Все наверное хоть раз в жизни сталкивались с таким элементом управления как два мультиселекта с рядом кнопок между ними для перемещения элементов из одного в другой. Лично мне понадобилась такая приблуда при кодинге админчасти одного из проектов для выбора вариантов из некоторого множества существующих.
Всегдашнее желание сделать все «по уму» оформилось в конечном счете в класс работа с которым чрезвычайна проста: создать экземпляр класса, выбрать подходящий метод генерации «компонента» и передать ему нужные данные.

Итак, класс selector:
методы:
  • selector – конструктор, означивает свойства класса (шаблоны под составные части компонента)
  • createSelector – основной метод генерации «компонента» из шаблонов и переданных данных, не следует вызывать его напрямую, метод сугубо внутренний, рабочий.
  • getSelector – метод, возвращающий код составных частей «компонента» в ассоциативном массиве array('sLeft' => 'html код левого селекта', 'sRight' => ' html код правого селекта ', 'buttons' => 'html код кнопок между селектами', 'JS' => 'JS код выполняющий перемещения опций селектов', 'full' => 'полный код компонента').
  • newSelector – метод, работающий аналогично getSelector, но возвращающий код «компонента» в свойство html класса с такими же именами ключей.
  • convertToItems – ввиду того, что данные необходимо подавать сборщику «компонента» в особом формате, сделан метод-конвертер на вход которому передаются два ассоциативных массива с данными для левого и правого селектов соответственно и три строковых параметра которые хранят значения ключей которые нужно преобразовать в необходимые для подачи массива данных сборщику.
свойства:
  • $html – метод newSelector будет класть код именно в это свойство
  • $tmpl – массив шаблонов элементов «компонента»
константы:
  • SELECTOR_IMG_DIR – т.к. кнопки сделаны картинками, то константа должна указывать на директорию с оными.
Логика: Необходимо дать посетителю возможность выбора опций из имеющихся, а после отправки формы обработать выбор. Пусть мы сделали выборку из БД, чаще всего это массив (большие объемы данных обычно разбивают на страницы). Пусть он будет следующего вида $left = array('id' => string, 'nick' => string). Смысл данных этого массива следующий – есть из чего выбирать: эти-то данные и будут помещены в левый селектор. Данные выборки необходимо преобразовать к виду array(array('caption' => string, 'value' => string,[ 'class' => string]), …), для чего вызываем метод convertToItems($left, array(),'nick', 'id') который вернет массив готовый для передачи сборщику компонента передав ему кроме данных еще и имя переменной name по которой будут доступны результаты выбора. После того как форма будет отправлена, в нашем распоряжении будут массивы nameAvailable и nameSelected которые в сумме (оператор + над массивами) дадут все возможные варианты для выбора при необходимости.
Почему код по частям: дизайн всегда разный, кто-то захочет сделать «компонент» не горизонтальным, а вертикальным, кто-то вообще разбросать по всей странице. Создаем новый селектор и по частям выводим куда надо. JavaScript-код будет выводиться один раз на страницу, но если необходимо получить его еще раз, для этого есть в методах сборки параметр bool $forceJS. Когда нет необходимости в изощренном виде «компонента» просто выводим содержимое по ключу 'full' (вид близкий к обычному виду windows контрола).

В архиве класс + файл примера в котором после отправки формы выводится содержимое массивов выбранных элементов и остаток доступных для выбора (внимание: после отправки формы данные в «компоненте» неактуальные из-за отсутствия перезаписи данных относительно массива $_POST)

-------
Не могу дать более дельный совет - не хватает системных ресурсов...


Отправлено: 16:13, 25-08-2005 | #25


Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


Фишка номер 23:

Когда в php.ini стоит register_globals off, но всё же есть желание использовать переменные по прямому их имени,а не по например $_GET["var_name"], то можно воспользоваться функцией import_request_variables("x"); , причём х здесь это любое сочетание из g,p,c. Как нисложно догадаться каждая из букв-это начальная буква трёх методов передачи данных в скрипт: GET, POST, COOKIE

-------
Fortes fortuna adiuvat


Отправлено: 18:39, 08-10-2005 | #26

mar mar вне форума

Аватара для mar

just mar


Moderator


Сообщения: 3904
Благодарности: 163

Профиль | Отправить PM | Цитировать


нумбер 24
проверка на корректность ввода даты ($our_data):
PHP код: Выделить весь код

/* Вид вводимой даты на ближайшее тысячелетие: 29.10.05, или 10,  если  29.10.2005

вместо разделителя - точки можно использовать в explode нечто глобальное, определенное в конфигурационном файле приложения */
            
if (!isset($our_data) || strlen(trim($our_data))!= 8)         
                                   
функция_корректного_отлупа();
            
$data_pieces explode("."$our_data);                        
            if (!(
                    ( 
== count$data_pieces ) )
                    && 
is_numeric$data_pieces[0] ) && is_numeric$data_pieces[1] ) && is_numeric$data_pieces[2] )
                    && 
checkdate$valide_date[1], $valide_date[0], $valide_date[2] )
                ))
                
функция_корректного_отлупа(); 

Используется стандартная функция
Цитата:
bool checkdate (int month, int day, int year)

Возвращает TRUE, если предоставленные данные верны; иначе возвращает FALSE. Проверяет правильность даты, сформированной аргументами.
Дата считается правильной, если:
  • year (год) имеет значение от 1 до 32767 включительно.
  • month (месяц) имеет значение от 1 до 12 включительно.
  • day (день месяца) находится в пределах допустимого количества дней для данного month. Високосные годы также учитываются.

Последний раз редактировалось Prisoner, 29-10-2005 в 10:22.


Отправлено: 20:39, 28-10-2005 | #27

mar mar вне форума

Аватара для mar

just mar


Moderator


Сообщения: 3904
Благодарности: 163

Профиль | Отправить PM | Цитировать


N25 (юбилей )
на самом деле, скорей напоминание - дебажное измерение скорости работы скрипта:
PHP код: Выделить весь код

<?php

define
("start",microtime(true));
/* дальше идет сам код */
printf("time   %.5f c",microtime(true)-start);
?>


Отправлено: 18:33, 03-12-2005 | #28


Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


N26
Графический редактор конфиг файла сервера Apache: здесь

-------
Fortes fortuna adiuvat


Отправлено: 13:36, 12-02-2006 | #29


Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


Там же, кстати, еще такая тулза как Apache Commander. Тоже гарный инструмент.

-------
Не могу дать более дельный совет - не хватает системных ресурсов...


Отправлено: 10:13, 14-02-2006 | #30



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Делимся опытом

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Виндовс без переустнановки делимся рекордами... Angelofdeath Флейм 81 13-07-2015 17:56
Делимся интересными ссылками по IT тематике ldcount Хочу все знать 4 08-02-2010 09:35
Делимся опытом записи DVD9 SinSon Хочу все знать 1 08-05-2007 00:22
SP2 - Service Pack 2 winXP - делимся впечатлениями mb Microsoft Windows 2000/XP 56 14-09-2004 11:48




 
Переход