Здесь курят мануал.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Пыха переехала на новый сервер, ура!

Краснодарское время: 24 Май, 2012, 01:43:41

Страниц: [1] 2 3
Печать
Автор Тема: опять классы и объекты  (Прочитано 1356 раз)
0 Пользователей и 1 Гость смотрят эту тему.
s_s    ↓ 
20 Сентябрь, 2009, 10:48:05
НЕ ХУЕТА! ХУЕТА!

Карма: 0
Сообщений: 23
Сила слова: 0

снова я со сломанными об гранит ооп зубами. пытаюсь написать класс разбирающий урл, и формирующий в зависимости от формата того запрос к БД. схема такая:
- вычислить сколько частей ("/") в урле. применить соответственно дочерний класс (Url1, Url2 и тд)
- регулярками узнать что запрашивается - дата, номер или название, запустить соответствующую ф-ию, которая соберёт массив для SQL-строки.
- полученное чудо передать методу класса Mysql, любезно разобранному в этой теме http://pyha.ru/forum/topic/3394.0
возможно неправильно поставил задачу, но такая логика пришла на ум, хз...
PHP
class Url
{
 public $url;
 public $sql=array();
 public $dir=array();
 public $q=array();
 /*вот честно так и не въехал что из этого надо, а что нет??!*/
 //убираем лишнее, урл в массив:
 function clean_url()
 {
  $dir=explode("/", $_SERVER['REQUEST_URI']);
  $dir = Clean_array($dir);//пользовательская, работает!!
  return $dir;
 }
 //сколько частей?
 public function check_url()
 {
  $dir = self::clean_url();
  $u = count($dir);
  switch($u)
  {
   case 1: Url1::parse_url($dir); break;
   case 2: Url2::parse_url($dir); break;
   case 3: Url3::parse_url($dir); break;
  }
 }
}
 
class Url1 extends Url
{
 public function parse_url($dir)
 {
  $ER = array(
  'y_m_d' => "^20([0-9]{2})-([01][0-9])-([0-3][0-9])$",
  'y_m' => "^20[0-9]{2}-[01][0-9]$",
  'y' => "^20[0-9]{2}$",
  'num' => "N[1-9][0-9]*",
  'title' => "[:alnum:]*");
  foreach($ER as $k=>$v)
  {if(eregi($v, $dir[1])){break;}}
  $sql = self::$k($dir[1]);
  return($sql); //и вот это не возвертается во внешний мир!!
 }
 
 public function y_m_d($dir)
 {
  $sql=array();
  $sql[] = '*';
  $sql[] = 'articles';
  $sql[] = array(
  'DATE' => $dir);
  $sql[] = 1;
  return $sql;
 }
 
 function title($dir)
 {
  $sql[] = '*';
  $sql[] = 'articles';
  $sql[] = array(
  'TITLE'=>$dir);
  $sql[] = 1;
  return $sql;
 }
}
 
Записан
Dr.TRO    ↓ 
20 Сентябрь, 2009, 10:52:59 , спустя 4 минуты 54 секунды
НЕ ХУЕТА! ХУЕТА!
Группа: Адекваты

Карма: 5
Сообщений: 254
Сила слова: 1.97

лол же, тыж $dir чистиш если я верно вижу и понимаю, то что ты свитчу передаеш ?!
Записан

s_s    ↓ 
20 Сентябрь, 2009, 10:55:55 , спустя 2 минуты 56 секунд
НЕ ХУЕТА! ХУЕТА!

Карма: 0
Сообщений: 23
Сила слова: 0


лол же, тыж $dir чистиш если я верно вижу и понимаю, то что ты свитчу передаеш ?!
массив. проверял print_r нормальный такой массив. ничего лишнего =)
Записан
artoodetoo    ↓ 
20 Сентябрь, 2009, 10:57:26 , спустя 1 минуту 31 секунду
НЕ ХУЕТА! ХУЕТА!

с особым цинизмом
Группа: в ухо

Карма: 124
Сообщений: 3804
Сила слова: 3.26

ну так ты отследи до какого места доходит. расставляй по пути следования die('опачки') и узнай
 
непонятна идея насчет count($dir).
попробуй принять такое правило: первый сегмент - имя класса, второй - имя метода, все остальное - аргументы метода. тогда все резко упростится
Записан
Dr.TRO    ↓ 
20 Сентябрь, 2009, 10:58:57 , спустя 1 минуту 31 секунду
НЕ ХУЕТА! ХУЕТА!
Группа: Адекваты

Карма: 5
Сообщений: 254
Сила слова: 1.97

дай плиз код функции Clean_array  
Спустя 43 секунды добавил

непонятна идея насчет count($dir).
норм идея(правда могла бы и лучше быть) он прост считает сколько элемнтов в массиве чтож непонятно, и исходя из этого работает конструкция switch
Записан

s_s    ↓ 
20 Сентябрь, 2009, 11:15:51 , спустя 16 минут 54 секунды
НЕ ХУЕТА! ХУЕТА!

Карма: 0
Сообщений: 23
Сила слова: 0


ну так ты отследи до какого места доходит. расставляй по пути следования die('опачки') и узнай
 
непонятна идея насчет count($dir).
попробуй принять такое правило: первый сегмент - имя класса, второй - имя метода, все остальное - аргументы метода. тогда все резко упростится
прослеживаю: $dir - везде присутствует, все переменные видны по всему классу. идея or die('опачки') - проставил, нигде не опачки... просто не возвращает $sql...всё вроде прозрачно и на месте.
насчёт count - если например url - ццц.сайт.ру/2009/12/ то использовать Url2, если ццц.сайт.ру/2009-12/ то Url1.
про сегменты можно подробней, кто это?
 
апд.
PHP
function Clean_array($array)
{
$ret_arr = array();
foreach($array as $key => $val)
{
    if (!empty($val))
    {
        $ret_arr[$key] = trim($val);
    }
}
return $ret_arr;
}
Записан
artoodetoo    ↓ 
20 Сентябрь, 2009, 11:27:11 , спустя 11 минут 20 секунд
НЕ ХУЕТА! ХУЕТА!

с особым цинизмом
Группа: в ухо

Карма: 124
Сообщений: 3804
Сила слова: 3.26

про сегменты - call_user_func_array(array_slice($dir,0,2), $dir)
я не вникал какая у тебя структура url если честно, просто увидел что ты пишешь роутер. если схема маршрута классическая
controller/action/arg1/arg2/arg3 - то можно написать простой роутер
« Последнее редактирование: 20 Сентябрь, 2009, 11:27:11 от artoodetoo » Записан
Dr.TRO    ↓ 
20 Сентябрь, 2009, 11:37:40 , спустя 10 минут 29 секунд
НЕ ХУЕТА! ХУЕТА!
Группа: Адекваты

Карма: 5
Сообщений: 254
Сила слова: 1.97

гкхм ... дядя s_s, вы понемаете что делаете ? вы не то делаете, это уже делаеться mod_rewrite'ом ( вот кусок кода с .htaccess с DLE :
Text
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})(/?)+$ index.php?year=$1&month=$2&day=$3 [L]
) т.е. просто запрос переправляеться ... отличный генератор реврайта вот есть  
Спустя 2 минуты 22 секунды добавил
алсо после call_user_func_array() ваших всяких и являються php injection'ы
Записан

s_s    ↓ 
20 Сентябрь, 2009, 11:47:09 , спустя 9 минут 29 секунд
НЕ ХУЕТА! ХУЕТА!

Карма: 0
Сообщений: 23
Сила слова: 0

artoodetoo, спасибо посмотрел, не вполне осознал надо ли оно мне... задумывал регуляркой проверить что за урл, создать запрос что и от куда извлекать и всё. что call_user_func_array даст мне?
структура немного ёбнутая на самом деле. думал в неё всё запихать, что бы без поиска обойтись и по названию и по дате (всех форматов - /гггг-мм-дд/, /гггг-мм/, /гггг/), по возможности все варианты...
Dr.TRO, не понимаю. я понимаю что велосипеды кончились, но у меня своя бд и свои методы выборки из неё, вот подумалось написать такое. или выбранный способ не имеет права жить? аргументы?
Записан
Dr.TRO    ↓ 
20 Сентябрь, 2009, 11:49:48 , спустя 2 минуты 39 секунд
НЕ ХУЕТА! ХУЕТА!
Группа: Адекваты

Карма: 5
Сообщений: 254
Сила слова: 1.97

ладно дело твое. ну это по принципу "Мы легких путей в жизне не ищем". так что удачи в разработке целого класса для одного лиш парсинга ссылки (:
Записан

s_s    ↓ 
20 Сентябрь, 2009, 11:52:43 , спустя 2 минуты 55 секунд
НЕ ХУЕТА! ХУЕТА!

Карма: 0
Сообщений: 23
Сила слова: 0

Dr.TRO, спасибо) честно такая задача и стоит.
Записан
phpdude    ↓ 
21 Сентябрь, 2009, 12:06:22 , спустя 13 минут 39 секунд
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 344
Сообщений: д-о-х-у-я!
Сила слова: 1.66


ладно дело твое. ну это по принципу "Мы легких путей в жизне не ищем". так что удачи в разработке целого класса для одного лиш парсинга ссылки (:
хули смешного?)
 
http://pyha.ru/forum/topic/2392.0
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
s_s    ↓ 
21 Сентябрь, 2009, 12:26:20 , спустя 19 минут 58 секунд
НЕ ХУЕТА! ХУЕТА!

Карма: 0
Сообщений: 23
Сила слова: 0

от твоюжж мать, хоть бы пнули что parse_url существует, а то я её определил... а один хрен не заработало...
Записан
s_s    ↓ 
21 Сентябрь, 2009, 12:37:21 , спустя 11 минут 1 секунду
НЕ ХУЕТА! ХУЕТА!

Карма: 0
Сообщений: 23
Сила слова: 0

короче я в тупике туплю: массив $sql прекрасно виден в самом методе, но он его не отдаёт!! что за хрень-то?
Записан
phpdude    ↓ 
21 Сентябрь, 2009, 12:42:06 , спустя 4 минуты 45 секунд
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 344
Сообщений: 20784
Сила слова: 1.66

s_s, ты хоть знаешь какой функцией то обрабатывается твои данные? self::$k( ..хуйна =)
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
Страниц: [1] 2 3
Печать
 

Перейти в: