Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> XML vs БД, как лучше организовать вывод в шаблон? 
:(
    Опции темы
localhost
Дата 1.8.2012, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хирург-длятехкт
**


Профиль
Группа: Участник
Сообщений: 712
Регистрация: 8.11.2005
Где: Н.Новгород

Репутация: нет
Всего: 43



Всем доброго дня. В веб-технологиях я весьма дилетант, поэтому хочу спросить помощи у любимого форума.
Преамбула: есть простой клиент на PHP, который обращается к другому удаленному скрипту и получает от него данные в XML-формате.
Пример:
Код

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<routes>
    <bus>
        <number></number>
        <driver></driver>
<!-- Тут еще ряд параметров, для краткости их опускаю --!>
            <schedule date="2012-07-31">a:34:{i:0;s:6:" 09:00";i:1;s:6:" 14:00";i:2;s:6:" 19:10";i:3;s:6:" 00:10";i:4;s:6:" 20:30";i:5;s:6:" 22:50";i:6;s:6:" 01:30";i:7;s:6:" 23:05";i:8;s:6:" 13:00";i:9;s:6:" 13:30";i:10;s:6:" 14:35";i:11;s:6:" 15:00";i:12;s:6:" 15:30";i:13;s:6:" 16:00";i:14;s:6:" 16:30";i:15;s:6:" 17:00";i:16;s:6:" 17:35";i:17;s:6:" 18:00";i:18;s:6:" 18:30";i:19;s:6:" 19:00";i:20;s:6:" 19:30";i:21;s:6:" 21:00";i:22;s:6:" 21:30";i:23;s:6:" 22:00";i:24;s:6:" 22:30";i:25;s:6:" 00:00";i:26;s:6:" 00:30";i:27;s:6:" 01:00";</schedule>
            <schedule date="2012-08-01">a:34:{i:0;s:6:" 09:00";i:1;s:6:" 14:00";i:2;s:6:" 19:10";i:3;s:6:" 00:10";i:4;s:6:" 20:30";i:5;s:6:" 22:50";i:6;s:6:" 01:30";i:7;s:6:" 23:05";i:8;s:6:" 13:00";i:9;s:6:" 13:30";i:10;s:6:" 14:35";i:11;s:6:" 15:00";i:12;s:6:" 15:30";i:13;s:6:" 16:00";i:14;s:6:" 16:30";i:15;s:6:" 17:00";i:16;s:6:" 17:35";i:17;s:6:" 18:00";i:18;s:6:" 18:30";i:19;s:6:" 19:00";i:20;s:6:" 19:30";i:21;s:6:" 21:00";i:22;s:6:" 21:30";i:23;s:6:" 22:00";i:24;s:6:" 22:30";i:25;s:6:" 00:00";i:26;s:6:" 00:30";i:27;s:6:" 01:00";</schedule>
            <schedule date="2012-08-02">a:2:{i:0;s:6:" 11:10";i:1;s:6:" 20:30";}</schedule>
            <schedule date="2012-08-03">a:3:{i:0;s:6:" 11:10";i:1;s:6:" 20:30";i:2;s:6:" 16:10";}</schedule>
            <schedule date="2012-08-04">a:3:{i:0;s:6:" 11:10";i:1;s:6:" 20:30";i:2;s:6:" 16:10";}</schedule>
            <schedule date="2012-08-05">a:3:{i:0;s:6:" 11:10";i:1;s:6:" 20:30";i:2;s:6:" 16:10";}</schedule>
            <schedule date="2012-08-06">a:3:{i:0;s:6:" 11:10";i:1;s:6:" 20:30";i:2;s:6:" 16:10";}</schedule>
            <schedule date="2012-08-07">a:3:{i:0;s:6:" 11:10";i:1;s:6:" 20:30";i:2;s:6:" 16:10";}</schedule>
            <schedule date="2012-08-08">a:3:{i:0;s:6:" 11:10";i:1;s:6:" 20:30";i:2;s:6:" 16:10";}</schedule>
    </bus>


Примерно так. Значения "schedule" - время отправления автобуса в виде сериализованного массива. XML-файл обновляется ежедневно.
Амбула. Я использую шаблонизатор Twig. Для вывода общей информации по рейсам (без расписания). Я в принципе могу без проблем использовать SimplXMLElement и в цикле выводить данные.
Проблема: в том, что надо сделать кликабельным маршрут, перейдя по ссылке на который можно увидеть расписание и другие параметры.
Запутался уже как лучше сделать. В исходном XML нет урла. Думал, что в шаблоне генерировать урл, а потом разбирать его, подгружать нужный шаблон, но непонятно как теперь выводить инфу именно по данному маршруту? Либо запихивать все в базу и огород городить с несколькими таблицами.

Может подскажете как проще поступить? Опыта не хватает smile

Это сообщение отредактировал(а) localhost - 1.8.2012, 16:34
PM MAIL   Вверх
Sanchezzz
Дата 1.8.2012, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



в xml есть xpath можно составить запрос в виде УРЛ и выбрать нужную запись по условию

Опишите что есть к чему можно прицепится.

я вижу ток дату 


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
localhost
Дата 1.8.2012, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хирург-длятехкт
**


Профиль
Группа: Участник
Сообщений: 712
Регистрация: 8.11.2005
Где: Н.Новгород

Репутация: нет
Всего: 43



Sanchezzz, благодарю за ответ
Цитата(Sanchezzz @  1.8.2012,  17:02 Найти цитируемый пост)
Опишите что есть к чему можно прицепится.

я вижу ток дату 


Можно прицепиться, например, к <number>
Тег:
Код

<number>531-Б</number>

Соответственнно, урл вида www.domain.tld/routes/531-b
PM MAIL   Вверх
Sanchezzz
Дата 1.8.2012, 21:34 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



child::routes/child::bus/child::number[text()="531-Б"]


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
localhost
Дата 2.8.2012, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хирург-длятехкт
**


Профиль
Группа: Участник
Сообщений: 712
Регистрация: 8.11.2005
Где: Н.Новгород

Репутация: нет
Всего: 43



Sanchezzz, ага, т.е. это будет использоваться примерно так:
Код

$route = new SimpleXMLElement($xml_file, NULL, TRUE);
$data = $route->xpath("child::routes/child::bus/child::number[text()='{$href}'] ");

И в $data будет нужный мне массив. Так я понимаю? smile
PM MAIL   Вверх
Sanchezzz
Дата 2.8.2012, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



Цитата

И в $data будет нужный мне массив. Так я понимаю?
 ДА, прочитайте документацию про Xpath на википедииии есть все команды на русском языке более гуманная дока.
Тока вам нужно будет сделать на один уровень назад вроде /../ 




--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
localhost
Дата 2.8.2012, 12:15 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хирург-длятехкт
**


Профиль
Группа: Участник
Сообщений: 712
Регистрация: 8.11.2005
Где: Н.Новгород

Репутация: нет
Всего: 43



Sanchezzz, спасибо за наводку, будем изучать smile

Добавлено через 7 минут и 22 секунды
Все, сделал, только у меня xpath такой получился:
Код

"/routes/bus[number='{$href}']"

PM MAIL   Вверх
Evghenusi
Дата 2.8.2012, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


майский жук
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 3.8.2006
Где: Молдова, Кишинёв

Репутация: 6
Всего: 15



localhost, а без xml не обойтись?
я вижу сериализованные массивы, нельзя сделать один общий и избавиться от xml?
тогда SimplXMLElement не понадобится
PM WWW   Вверх
localhost
Дата 2.8.2012, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хирург-длятехкт
**


Профиль
Группа: Участник
Сообщений: 712
Регистрация: 8.11.2005
Где: Н.Новгород

Репутация: нет
Всего: 43



Evghenusi, думаю, так тоже можно, спасибо smile 

Кстати, я что-то не совсем так сделал, потому что в возвращаемом массиве "теряется" значение атрибута date тега schedule:
Было 
Код

            <schedule date="2012-08-02">a:2:{i:0;s:6:" 11:10";i:1;s:6:" 20:30";}</schedule>
            <schedule date="2012-08-03">a:3:{i:0;s:6:" 11:10";i:1;s:6:" 20:30";i:2;s:6:" 16:10";}</schedule>
            <schedule date="2012-08-04">a:3:{i:0;s:6:" 11:10";i:1;s:6:" 20:30";i:2;s:6:" 16:10";}</schedule>
            <schedule date="2012-08-05">a:3:{i:0;s:6:" 11:10";i:1;s:6:" 20:30";i:2;s:6:" 16:10";}</schedule>
            <schedule date="2012-08-06">a:3:{i:0;s:6:" 11:10";i:1;s:6:" 20:30";i:2;s:6:" 16:10";}</schedule>
            <schedule date="2012-08-07">a:3:{i:0;s:6:" 11:10";i:1;s:6:" 20:30";i:2;s:6:" 16:10";}</schedule>
            <schedule date="2012-08-08">a:3:{i:0;s:6:" 11:10";i:1;s:6:" 20:30";i:2;s:6:" 16:10";}</schedule>


Превратилось в:

Код

[schedule] => Array
                (
                    [0] => a:2:{i:0;s:6:" 11:10";i:1;s:6:" 20:30";}
                    [1] => a:3:{i:0;s:6:" 11:10";i:1;s:6:" 20:30";i:2;s:6:" 16:10";}
                    [2] => a:3:{i:0;s:6:" 11:10";i:1;s:6:" 20:30";i:2;s:6:" 16:10";}
                    [3] => a:3:{i:0;s:6:" 11:10";i:1;s:6:" 20:30";i:2;s:6:" 16:10";}
                    [4] => a:3:{i:0;s:6:" 11:10";i:1;s:6:" 20:30";i:2;s:6:" 16:10";}
                    [5] => a:3:{i:0;s:6:" 11:10";i:1;s:6:" 20:30";i:2;s:6:" 16:10";}
                    [6] => a:3:{i:0;s:6:" 11:10";i:1;s:6:" 20:30";i:2;s:6:" 16:10";}
                )


Можно от этого как-нибудь избавиться? Как-нибудь получать ассоциированный массив вида [дата] => [значение]?

Это сообщение отредактировал(а) localhost - 2.8.2012, 15:38
PM MAIL   Вверх
Evghenusi
Дата 2.8.2012, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


майский жук
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 3.8.2006
Где: Молдова, Кишинёв

Репутация: 6
Всего: 15



Цитата(localhost @  2.8.2012,  15:04 Найти цитируемый пост)
Evghenusi, думаю, так тоже можно, спасибо smile 

тогда почему дальше ковыряешься в SimplXMLElement ?

ты сериализованный массив получил, преобразовал его в массив и вуаля.
зачем эти танцы с бубном?

Добавлено @ 19:27
кстати, для "полноты картины" добавь JSON))

Это сообщение отредактировал(а) Evghenusi - 2.8.2012, 19:43
PM WWW   Вверх
localhost
Дата 2.8.2012, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хирург-длятехкт
**


Профиль
Группа: Участник
Сообщений: 712
Регистрация: 8.11.2005
Где: Н.Новгород

Репутация: нет
Всего: 43



Цитата(Evghenusi @  2.8.2012,  19:26 Найти цитируемый пост)
тогда почему дальше ковыряешься в SimplXMLElement ?

Так я данные в XML получаю. Из другого места. Мне с ними и надо работать.
А в сериализованном виде передается массив времен на дату, которая является атрибутом XML-тега schedule. Всего лишь.

Цитата(Evghenusi @  2.8.2012,  19:26 Найти цитируемый пост)
кстати, для "полноты картины" добавь JSON)) 

Нет, мне все это очень интересно, конечно, буду изучать постепенно, но не в этот раз, все-таки smile
PM MAIL   Вверх
Evghenusi
Дата 2.8.2012, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


майский жук
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 3.8.2006
Где: Молдова, Кишинёв

Репутация: 6
Всего: 15



localhost, подумал что входные данные тоже ты формируешь ... пардон(
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1311 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.