Динамическое использование jpgraph
Основные данные получаются SQL-запросом из БД, затем вводятся доп. коэффициенты и должен получиться измененный график.
Весь вопрос в том, как передать из xajax уже сформированный график
$graph->Stroke();
Заранее благодарю за помощь.
График - это обычная картинка. Просто обновляйте картинку и все - тут в общем даже AJAX не потребуется
Что значит "Просто обновляйте картинку и все", через JavaScript что ли?
Не понял ... Объясните pls
Как должно работать:
Теперь на нажатие на кнопку (например) вешаешь событие(вызов функции): уничтожение старой картинки в теле документа, создание в JavaScript объекта Image, где указываешь адрес до картинки и параметры (например, image.php?param1=bla1¶m2=dl2).
Вообщем, ничем не отличается от работы той же самой капчи.
Xajax дает красивую возможность подсовывать в html значения по id элемента. Я по своей наивности полагал, что смогу таким же образом подставить новый график, если мне удастся передать с сервера готовый поток с графиком в формате xml, а затем обработать его на стороне клиента.
Однако, задачка оказалась не тривиальной и требующей некой фантазии. А у меня , к сожалению, не хватает знаний и опыта.
А очень хочется добиться намеченного.
Наш график - по сути обычная картинка, выдаваемая РНР скриптом.
Код:
<img src="mygraph.php?КУЧА_ПАРАМЕТРОВ" id="graph1" />
В форму пользователь вводит какие-то данные, на основе которых должен быть видоизменен график (например масштаб). Что мы делаем? Мы при нажатии на кнопку (button, а не submit) вызываем JavaScript функцию, которая формирует новый адрес для графика. Что-то вроде этого:
[highlight=javascript]
function newGraph()
{
.... // Собираем данные из формы
newUrl = 'x1='+x1+'&x2='+x2....;//Формируем строку GET-запроса
document.getElementById('graph1').src='mygraph.php?'+newUrl; //Меняем URL нашего графика
}
[/highlight]
Ну а дальше нужно только перехватить эти параметры в РНР файле, отвечающем за построение графика и правильно обработать. Все. Никакого AJAX тут не нужно.
html
...
<td ><img src="mysmartysection/" /></td>
index.class.php
<?php
...
if($this->input->all=="mysmartysection") {
... SQL запрос к БД
include ("jpgraph/jpgraph.php");
include ("jpgraph/jpgraph_line.php");
include ("jpgraph/jpgraph_bar.php");
$graph = new Graph(450,280,"auto");
... настройки графика
$graph->Stroke();
}
?>
Все нормально работает. Но мне нужно дальше.
Специфика создаваемого графика в следующем:
- пользователь получает графические (например, статистика) данные с сервера;
- добавляет свои параметры, которые пересчитываются на клиенте и преобразуются в некую функцию, которая накладывается на основной график;
- дакую операцию должен иметь возможность делать каждый юзер.
- причем разновидность основных (статистических) данных более 30.
Вот такая задачка.
Вы вообще читаете что вам пишут? Или вы с собой беседуете?
Действительно, все могло бы решиться правильным GET-запросом из JavaScript, затем обработкой в сценарии PHP. Все бы хорошо, но почему-то значения переменных не перхватываются на стороне сервера.
Тему посмотрел на форумах: есть частные решения, но про графики (картинки) нигде не упоминается. Хотя по этому решению именно картинки-то и грузятся. Проблема в параметрах или настройках Smarty.
Продолжаю разбираться. Если есть какие-то особенности, подскажите pls.
Никаких особенностей нет. Если параметры не перехватываются - значит неверно их обрабатываете