Войти
OFFLINE / Окно в реальностьПросмотров: 4,134

Нужна помощь "тыжпрограммистов".

Допустим у меня есть сайт.
На одной из страниц у меня подключен скрипт.
jQuery.ajax({ url: "http://api.unit-online.ru/items?type=%D0%BE%D1%80%D1%83%D0%B6%D0%B8%D0%B5", dataType: "jsonp" }).done(function (result) {
jQuery("#nonlinecount1").html(result.count);
бла
бла
бла
a = jQuery("#nonlinePPS").html();
jQuery("#nonlinePPS").html(a+ "" + result.items.name+" ["+result.items[i].level+"]"+"<a href=\"http://unit-online.ru/item?id="+result.items[i].id+"\"target=\"_blank\"> <img src=http://блаблабла/ico_info.gif></a><br>");
В левой части страницы мы видим вот это http://petromi.com/get/eah4F6960de220ea0011
Как видно из кода, при нажатии на значок информации мы попадаем на http://unit-online.ru/item?id= +id ствола, например http://unit-online.ru/item?id=79
Теперь допустим что в правой части страницы у меня есть фрейм, в котором лежит:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Инфомация о предмете</title>
<style>
#content {
бла
}
.item-info {
бла
}
.common-params {
бла
}
.common-params div, .spec-params div {
бла
}
.item-name {
бла
}
.item-img {
бла
}
</style>
</head>
<body>
<script src="http://www.бла/js/jquery.js"></script>
<table>
бла бла
</table>
<script>

$.ajax({ url: "http://api.unit-online.ru/item", dataType: "jsonp", data: { id: 771 } }).done(function (data) {
if (data.status == "ok") {
var item = data.item;
var info = $("#content .item-info");
info.find(".item-name").text(item.name);
info.find(".item-img").html('<img alt="" src="' + item.image + '">');
var params = $('<div>');
for (var i = 0; i < item.params.length; ++i) {
if (item.params[i].name.lastIndexOf("Клетки", 0) === 0) {
info.find(".spec-params").append(
$('<div>').text(item.params[i].name + ": " + item.params[i].value)
).toggle();
} else {
params.append($('<table>').append(
$('<tr>').append(
$('<td>').text(item.params[i].name)).append(
$('<td class="value">').text(item.params[i].value))
)
);
}
}
info.find(".common-params").append(params);
$("#content .progress").toggle();
info.toggle();

} else if (data.status == "fail") {
$("#content").text("Отсутсвует информация о предмете с id = 771.");
}
});

</script>
</body>
</html>
В этом фрейме мы видим что-то похожее на http://petromi.com/get/eah4kC71eeb920ea0311 , только в других цветах/шрифтах.
Собственно, в чём мне нужна помощь?
Хотелось бы чтобы ([i]при нажатии на значок информации мы попадаем на http://unit-online.ru/item?id= +id ствола, например http://unit-online.ru/item?id=79
), а нужно чтобы при нажатии id предмета передавался в скрипт во фрейме $.ajax({ url: "http://api.unit-online.ru/item", dataType: "jsonp", data: { id: 771 } }).done(function (data) {.
Если это вообще возможно, у меня не хватает знаний чтобы понять как это сделать. Если вы знаете как это сделать/ как сделать иначе, но с похожим эффектом, то пожалуйста напишите код/ дайте ссылку на литературу по данному вопросу/ на видео-урок.
P.S. Не нужно писать типо "читай про фреймы и скрипты", я это и так пытаюсь делать, но либо я тупой, либо не там ищу.

Re: Нужна помощь "тыжпрограммистов".

форум принял некоторые символы кода близко к сердцу и наклонил текст там где это не нужно, ну да ладно.

Re: Нужна помощь "тыжпрограммистов".

для -TRickSTeR-:
первое от чего коробит, это "<meta http-equiv="X-UA-Compatible" content="IE=edge">"
в этой мета-информации есть какой-то сакральный смысл?
варианта предназначения этой строки вижу два: документ сделан исключительно для пользователей edge
и другие браузеры на этом месте должны резко переобуться и включить режим совместимости (на деле же это тупо игнорится).
второй, это предупреждение для самого edge, что все ошибки и глюки на этой страничке нужно игнорить, типа так и было задумано...

ну и дальше бред продолжается: фреймы? нафига?
чем не устраивает контейнер с динамическим содержимым, которое управляется тем же JS?

ты очень сумбурно объяснил что тебя не устраивает и откуда куда нужно попадать.

сейчас при нажатии на "i" ты куда попадаешь?
что тебе мешает заменить статичную часть ЮРЛа в скрипте?

Re: Нужна помощь "тыжпрограммистов".

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

я ещё со школы уяснил, что если уравнение или что-то другое вызывает ступор и вообще нихрена не понятно,
то нужно всего навсего упростить это уравнение, выбросив и сократив всё лишнее.

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

Re: Нужна помощь "тыжпрограммистов".

не, сейчас ТС ударит меня ссаной тряпкой и возможно будет прав, ибо к концу дня соображалка вообще не варит,
но может всё дело в том, что ТС не понимает как передать параметр в функцию
или просто не смог внятно сформулировать этот вопрос гуглу?
как-то так наверное: https://goo.gl/gYOoho

Re: Нужна помощь "тыжпрограммистов".

для Da Boogie Woogie:
Во-первых хочу сказать, что я очень рад что кто-то откликнулся)
первое от чего коробит, это "<meta http-equiv="X-UA-Compatible" content="IE=edge">"
в этой мета-информации есть какой-то сакральный смысл?

окей, я это уберу.
чем не устраивает контейнер с динамическим содержимым, которое управляется тем же JS?
чтоооо? я нуб и чайник( записал себе погуглить "контейнер с динамическим содержимым"). В универе обещали программистов делать, а в итоге учим только математику, поэтому пора брать это дело под свой контроль. Всё что я знаю о html, css, php, js, прочитано в интернете/книгах.
ты очень сумбурно объяснил что тебя не устраивает и откуда куда нужно попадать.
http://petromi.com/get/eah2mFec1167b0ea1311
сейчас при нажатии на "i" ты куда попадаешь?
unit-online.ru/item?id=79
что тебе мешает заменить статичную часть ЮРЛа в скрипте?
Не понимаю как ее нужно поменять, чтобы получилось то, что мне нужно.
но может всё дело в том, что ТС не понимает как передать параметр в функцию
Сейчас вдруг осенило при кликании будет отправлять на блабла.php?id="+result.items[i].id+", и там будет
<html>
<head>
<title>бла</title>
</head>
<body>

<?php

$_GET["id"]

?>

</body>
</html>

Re: Нужна помощь "тыжпрограммистов".

так, по порядку =)

вместо фрейма, т.е. по сути отдельного документа,
ты можешь формировать содержимое внутри какого нибудь контейнера внутри документа,
собственно не важно на каком уровне, таким контейнером может быть и <div> (что традиционно и крайне удобно при манипуляциях),
а может и сам документ, т.е. ты можешь создать документ из ничего простым вызовом,
после чего наполнить его содержимым,
а затем (как и в случае с div) обратиться к этому контейнеру или документу и заменить в нём всё содержимое или только его часть.
для этого к div добавь ID и обращайся к нему "там, где имя элемента мой_контент, пусть а будет равно б"
это есть DOM ;)

значится, в статике у тебя будет базовая разметка, т.е. то, что будет в любом случае при любом раскладе,
а там, где нужно что-то вставлять в зависимости от аргумента, который пользователь передал в функцию, куда-то кликнув, ты просто впихнёшь <div id="range" />
вот этот контейнер и будет заполняться содержимым динамически.

далее.
программирование, это и есть математика, чистейшая логика 1+1=2, 1<2, 2>1...
всё остальное, это мишура, которая зависит только от уровня абстракции,
т.е. выбранного тобой "языка" и пути (писать самому или взять готовую библиотеку функций и надеяться, что в ней не наделано ошибок, что работает это при любых условиях правильно и не тратит 99% процессорного времени пользователя, открывшего твой сайт)

сейчас при нажатии на "i" ты куда попадаешь?
unit-online.ru/item?id=79


я понял похоже твою проблему:
ты не внимательно прочитал топик про API юнита.

информацию об оружии можно получить в виде готового документа,
а можно получить в виде массива, т.е. строки с данными, которые ты своим скриптом отсортируешь и представишь в нужном тебе в виде в своём собственном документе, в нужном его месте.

и PHP тут вообще не нужен ;)
всё легко вписывается в рамки динамического содержимого на стороне пользователя,
т.е. это его браузер будет забирать нужные массивы, разбирать эти массивы, обрамлять это содержимое разметкой, а затем оформлять подцепленной таблицей стилей.

у тебя ведь в скрипте уже используется нужный API (api.unit-online.ru/item)
я только не вижу откуда у тебя берётся документ с этим готовым "i" и кто туда подставляет этот ЮРЛ -
тебе нужно забирать не готовый документ, а массив, самостоятельно разбирать этот массив и если в нём уже есть этот ЮРЛ, то просто отбросить его переднюю часть, оставив только аргумент, который после "item?id="
ну а потом передаёшь этот аргумент (пусть будет "79") в функцию, которая
1. по ЮРЛУ http://api.unit-online.ru/item?id=79 получит массив,
разберёт его на части и каждую эту часть обвяжет разметкой,
запихнув весь этот суп в твой <div id="range" />

Re: Нужна помощь "тыжпрограммистов".

вот, я придумал как тебе всё упростить.
начни с пустого документа,
вообще без всего.
до <body> впихни вызов скрипта,
который (по логике) будет отрабатывать раньше формирования браузером содержимого <body> (а ты то наверное гадал: нафига нужен этот тэг?!)
пусть этот сходит на сервер и заберёт данные по ЮРЛу api.unit-online.ru/item?id=79
потом ты (для начала) просто поместишь этот массив внутри body как обычный текст...

если этот этап прошёл успешно, то впиши внутри <body> контейнер <div id="range" />,
стилем задай ему размер 1000х1000рх, покрась в чёрный цвет, а шрифт сделай белым --
всё это нужно чтобы сразу понять, что текст у тебя попал не в body (который по умолчанию белый с чёрным текстом), а в твой "раскрашенный" DIV
попал текст из ЮРЛа в DIV?
отлично, вот теперь, перед тем как представлять его как текст и пихать его в контейнер, ты его отсортируй в цикле на a1, a2, a3... b1, b2, b3... (там, если заметил массив содержит другие массивы)
и потом уже как тебе нужно запихивать с разметкой в документ,
т.е.: <p>...$b[4]...</p>...

ну как-то так ;)

Re: Нужна помощь "тыжпрограммистов".

для Da Boogie Woogie:
вместо фрейма, т.е. по сути отдельного документа,
ты можешь формировать содержимое внутри какого нибудь контейнера внутри документа,
собственно не важно на каком уровне, таким контейнером может быть и <div> (что традиционно и крайне удобно при манипуляциях),
а может и сам документ, т.е. ты можешь создать документ из ничего простым вызовом,
после чего наполнить его содержимым,
а затем (как и в случае с div) обратиться к этому контейнеру или документу и заменить в нём всё содержимое или только его часть.
для этого к div добавь ID и обращайся к нему "там, где имя элемента мой_контент, пусть а будет равно б"
это есть DOM ;)

В теории вроде понятно. Это всё продолжает работать как надо в рамках WP шаблона?
сейчас при нажатии на "i" ты куда попадаешь?
unit-online.ru/item?id=79

здесь я скорее всего не так выразился. Смотря возле какого ствола нажимать, на него и будет сформирован url, т.е. если здесь http://petromi.com/get/eah4F6960de220ea0011 нажать на "i" справа от "invoker" то попадешь сюда http://unit-online.ru/item?id=1192
информацию об оружии можно получить в виде готового документа,
Не помню какая там ссылка на оружие, но вот здесь инфа очень старая http://api.unit-online.ru/online_users.txt
а можно получить в виде массива, т.е. строки с данными, которые ты своим скриптом отсортируешь и представишь в нужном тебе в виде в своём собственном документе, в нужном его месте.
вот что у меня в скрипте написано
jQuery.ajax({ url: "http://api.unit-online.ru/items?type=%D0%BE%D1%80%D1%83%D0%B6%D0%B8%D0%B5", dataType: "jsonp" }).done(function (result) {
jQuery("#nonlinecount1").html(result.count);
var temp = [];
for(var i=0;i<result.count;i++)
{
for(var j=0;j<(result.count-1);j++)
{
if(result.items[j].level<result.items[j+1].level)
{ temp[0]=result.items[j].name;
temp[1]=result.items[j].level;
temp[2]=result.items[j].id;
result.items[j].name=result.items[j+1].name;
result.items[j].level=result.items[j+1].level;
result.items[j].id=result.items[j+1].id;
result.items[j+1].name=temp[0];
result.items[j+1].level=temp[1];
result.items[j+1].id=temp[2];
}
}
}
a = jQuery("#nonlinePPS").html();
jQuery("#nonlinePPS").html(a+"");
for(var i=0;i<200;i++)
{
a = jQuery("#nonlinePPS").html();
jQuery("#nonlinePPS").html(a+ "" + result.items.name+" ["+result.items[i].level+"]"+"<a href=\"http://unit-online.ru/item?id="+result.items[i].id+"\"target=\"_blank\"> <img src=http://блабла.ru/images/ico_info.gif></a><br>");
}
});
[i]for(var i=0;i<200;i++)

т.е. выводит "верхние" 200 стволов, вместо 200 пробовал result.count(общее кол-во возвращаемых стволов), но там их получалось 500, и страница умерала, наверное типо перегрузка, хз.
у тебя ведь в скрипте уже используется нужный API (api.unit-online.ru/item)
я только не вижу откуда у тебя берётся документ с этим готовым "i" и кто туда подставляет этот ЮРЛ

jQuery("#nonlinePPS").html(a+ "" + result.items[i].name+" ["+result.items[i].level+"]"+"<a href=\"http://unit-online.ru/item?id="+result.items[i].id+"\"target=\"_blank\"> <img src=http://блабла.ru/images/ico_info.gif></a><br>");
Т.е. вывод как на скрине - имя, [уронвень], значок "i" с прикрученной к нему href=\"http://unit-online.ru/item?id="+result.items[i].id

Re: Нужна помощь "тыжпрограммистов".

var temp = [];
for(var i=0;i<result.count;i++)
{
for(var j=0;j<(result.count-1);j++)
{
if(result.items[j].level<result.items[j+1].level)
{ temp[0]=result.items[j].name;
temp[1]=result.items[j].level;
temp[2]=result.items[j].id;
result.items[j].name=result.items[j+1].name;
result.items[j].level=result.items[j+1].level;
result.items[j].id=result.items[j+1].id;
result.items[j+1].name=temp[0];
result.items[j+1].level=temp[1];
result.items[j+1].id=temp[2];
Т.к. запрос к апи возвращает все стволы в порядке увеличения id, от 1 до count, выглядит это сумбурно, поэтому мы 500 раз берем каждый из 500 j и проверяем его уровень с j+1, короче в итоге сортируем по уровню. Но это оочень много вычислений, нету ли какой-нибудь конструкции попроще?

Re: Нужна помощь "тыжпрограммистов".

для -TRickSTeR-:
и теперь мне вообще ничего не понятно.
совсем ты меня запутал.

ты сам скрипт писал или просто взял чей-то готовый и пытаешься его переделать - тогда это многое объясняет.

я просто не понимаю сейчас предназначения всей этой конструкции - ты чего хочешь то в результате получить на сайте?

вот пришёл пользователь и по твоей задумке он хочет что-то найти,
распиши что у тебя за логика там задумана:
попал пользователь на сайт - что он видит?
какой-то готовый список или поле поиска?
вот он кликнул куда-то - куда?
он сначала смотрит информацию о персонаже, а потом кликает на "i" рядом с какой-то оружкой или бронёй?

и всё же!
ещё раз.
начини с чистого листа.
у меня ощущение, что ты сам уже забыл чего хочет на самом деле =)

откуда у тебя верхние 200 стволов? зачем они вообще выводятся?
ты хочешь каталог оружия что ли сделать?

Re: Нужна помощь "тыжпрограммистов".

для Da Boogie Woogie:
совсем ты меня запутал.
Ну это же я =)
Я не хочу раньше времени палить сайт. Дай пожалуйста скайп или другую связь, куда можно адрес написать.
ты сам скрипт писал или просто взял чей-то готовый и пытаешься его переделать - тогда это многое объясняет.
Этот писал сам, но перед этим досконально рассмотрел другой сходный по принципу скрипт и поняв как там всё работает, написал этот.
я просто не понимаю сейчас предназначения всей этой конструкции - ты чего хочешь то в результате получить на сайте?
Сейчас на сайте вот так: http://petromi.com/get/eah4F6960de220ea0011 и при нажатии на "i" попадаем на сайт юнита с инфой об оружке.
Хочу в результате получить чтобы при нажатии на "i" можно было посмотреть инфу об оружии прям на этой же странице. Конечно можно сделать со скринами как на юнит вики, но в образовательно-практических целях хотелось бы через API.

вот пришёл пользователь и по твоей задумке он хочет что-то найти,
распиши что у тебя за логика там задумана:
попал пользователь на сайт - что он видит?
какой-то готовый список или поле поиска?
вот он кликнул куда-то - куда?

Он видит готовый список оружия как тут в левой части страницы http://petromi.com/get/eah4F6960de220ea0011
Находит в списке оружие характеристики которого он хочет посмотреть, кликает на "i", оп и в правой части страницы он видит вот это http://petromi.com/get/eagnzw4609aa40ea2b11
потом посмотрев, листает список оружия дальше, когда его заинтересовал какой-либо ствол он кликает возле него "i", и в правой части страницы на месте характеристик старого ствола появляются характеристики нового.
Примерно так. Возможно опытному веб-разработчику такое представление покажется глупым, и если бы я получше представлял возможности вёрстки страниц, то хотел бы сделать всё иначе. Но пока что я только так себе это представляю. Если у вас есть своё виденье, того как это лучше осуществить, то пожалуйста поделитесь :)
откуда у тебя верхние 200 стволов? зачем они вообще выводятся? если вывести не 200, а все, то страница зависает. Выводятся чтобы можно посмотреть какие стволы есть в базе и посмотреть их хар-ки.
ты хочешь каталог оружия что ли сделать?
Дааа ;D

Re: Нужна помощь "тыжпрограммистов".

пусть этот сходит на сервер и заберёт данные по ЮРЛу api.unit-online.ru/item?id=79
потом ты (для начала) просто поместишь этот массив внутри body как обычный текст...

У меня не получается=) Пойду спать, завтра буду разбираться, все-таки утро вечера мудренее.

Re: Нужна помощь "тыжпрограммистов".

ну воот, приплыли.
я с самого начала подозревал неладное - подозрения оправдались.

тыжпрограммист - тебя не зря математике учат,
а математика, это логика.
вот в твоём скрипте логика хромая и косая.
я бы ещё заставил студентов по 2-3 часа в день в шахматы играть или в го - очень полезно для раздупления мышления!

у тебя не получается документ скриптом забрать?
ты удивлён?
ты же писал, что разобрался что там как работает?

забудь ты про jQuery - выброси и трижды плюй через плечо каждый раз когда кто-то упомянет эту ересь!
я выше уже писал про высокий уровень абстракции,
так вот ты и тут не смог разобраться,
а ведь JS это высокоуровневый язык, библиотеки функций типа jQuery ещё на уровень выше

придумали эту ересь продаваны,
чтобы значительно снизить порог вхождения для индусов с тремя классами образования - очень нужно было продаванам чтобы сайты делались быстро и платить раб.силе приходилось очень мало,
а как можно платить мало высококвалифицированному специалисту?
да ни как, а значит нужно сделать так, чтобы сайты могли клепать низкоквалифицированные ни разу не специалисты,
вот и стали появляться всякие jQuery и движки с шаблона типа WP - ты на самом деле считаешь, что без WP ты сайт сверстать не сможешь?
на этом же форуме я верстальщика упрекнул в том, что используется бутстрап с левого сайта и что если CDN с этой таблицей стилей отвалится,
то форум станет жутковатым...
знаешь что он мне ответил?
ну это же CDN - наоборот надёжность сайта повышается, ибо сервер там не один и они гарантируют безотказную работу :D
вот тебе пример изуродованной логики!
как тут может повышаться надёжность сайта, если появилось потенциально слабое место?
если отвалится форум, то работающий бутстрап ситуацию не спасёт,
а вот если отвалится CDN этим бутстрапом, но форму будет работать,
то кто-то получит по соплям за то, что запихнул оформления сайта на чужой сервер.
ну и для пользователей это как-бы не фонтан всё же - маршрут до форума и CDN может разительно отличаться,
а значит и время загрузки документа...

в общем программистом быть, это в первую очередь думать в нужную сторону и под правильным ракурсом.

забудь про jQuery! то, что тебе нужно для того чтобы забрать документ по ЮРЛу называется XMLHttpRequest - гугли! это очень простая фишка
а из того, что у тебя сейчас есть тебе в результате ни строчки не пригодится - просто ради интереса сохрани это всё и начни писать заново, с чистого листа, без использования библиотек и движков,
потом просто пролистаешь код и поймёшь всю бредовость написанного ранее.

теперь по существу.

если ты собрался делать каталог оружия,
то ты вообще не с того конца думать начал.

тебе же нужно этот каталог как-то выдавать пользователю - ты сразу весь список собрался выкатывать
или постранично?
кто такой хренью пользоваться то будет?
нужна хоть какая-то сортировка вывода.
по каким признакам? ну ты сам решай - можно по левелу, можно по классу,
по стоимости или в алфавитном порядке,
так чтобы пользователь зайдя на сайт сразу мог отбросить лишние стволы одним кликом и выбрать только ту часть информации, в которой (части) по его мнению содержится интересующая его пушка.

ну наверное самое гуманное, это предложить меню: бб, лёгкое, тяжи, энерго - это позволит сразу увидеть и нужный ствол, и возможно следующий по левелу для данного класса.

ты же будешь показывать характеристики?
тогда кури мануалы по сессиям и кукисам - будешь в кукисы или в сессии писать "отложенные" для сравнения, чтобы пользователь мог поставить галочку в чекбоксе "сравнить", пойти выбрать ствол этого же левела, но другого класса и на одной страничке сравнить хар-ки - логично, да?


но вот у нас уже вырисовывается главная проблема ;)
по ЮРЛу http://api.unit-online.ru/items?type=оружие ты получаешь сразу всё оружие, при этом информации там маловато для первичной сортировки - можно только по ID сортировать, по уровню ствола и по названию,
а для того чтобы сортировать по классу нужно заглянуть в инфу каждого ствола,
но ID у нас не по порядку, значит тебе придётся запрос к серверу сделать аж 500 раз (в начале массива с списком стволов есть текущее кол-во, сейчас их 500 штук)

ну не можешь ты 500 раз быстро опросить сервер!

вот и проблема стала обретать понятные формы ;)

всё, приехали - JS нам вообще не годится для данной задачи
хотя совсем его выбрасывать не стоит - возможно ты выберешь путь, при котором и JS тоже будет использоваться,
как минимум тот же XMLHttpRequest будет очень полезен в каталоге оружия ;)

что дальше?
тут надо соображать как действовать в условиях, когда мы не можем себе позволить делать 500 запросов к серверу подряд, а потом всё это ещё и сортировать
и это только при одном клике пользователя, а если он хочет просмотреть 100 пушек? скажет, что сайт тормозной и никогда больше не будет им пользоваться =)))

тогда нам нужно большую часть работы сделать на сервере,
что подразумевает другой язык.
но мы же программисты - математику не зря изучаем, да?
ну некоторые принципы работы с данными будут иными, синтаксис конечно другой,
но это вообще не проблема - кодить можно на любом языке,
главное чтобы 1+1 всегда равнялось 2.

если на сервере, то предположу, что это будет PHP + MySQL
ну и ещё CRON до кучи

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

так что взять один раз файл и от него плясать никак не получится - его нужно иногда обновлять.
можешь делать это вручную,
скачивая и заливая на сервер,
удобнее для этого написать на PHP простенький скриптик и запускать его вручную по ЮРЛу или (что удобнее и логичнее) по CRON`у,
например каждый 3й день в 3 часа ночи - нагрузка на сервер минимальная...

так, получили мы список с названиями и ID,
разберём этот массив и запихнём в БД,
а вот тут можно на самом деле и пожировать - если это раз в три дня, да ещё и ночью,
да к тому же нам кроме списка нужно ещё и по каждому стволу узнать его класс,
то можем себе позволить не просто записать данные из массива по "items?type=оружие",
а ещё и по каждому ID в цикле сделать отдельный запрос на сервер (всего будет 500, позже больше, сколько именно мы узнаём из значения предпоследнего элемента массива с именем "count")
и всё это сразу же писать на сервер в свою БД - можно писать сразу все параметры по каждому стволу,
тогда возможностей для сортировки на твоём сайте будет значительно больше,
а можешь записать только данные из "items?type=оружие" плюс к каждому ID добавить его тип по классу,
а остальную информацию выводить при запросе пользователя через JS - вот и пригодились знания о XMLHttpRequest, ага!

если нет на твоём хостинге CRON`а, то можешь обновлять БД вручную или например по событию,
например при загрузке странички, пусть PHP каждый раз проверяет текущую дату с датой, которая записана в текстовый файлик,
если кол-во секунд между датами больше, чем (например) 3 дня, то пусть он тикает служебный скрипт, который в отдельном потоке обновляет твою базу, а в этом время пользователю выдаётся старая инфа (следующий запрос уже выдаст обновлённую),
после такого обновления, рабочий скрипт должен обновить дату (UNIX-дату - с ней работать проще) в твоём текстовом файлике и следующие 3 дня он будет спать, пока его опять не тикнут

если же нет возможности использовать БД (ну вроде бывают такие хостинги), то писать можно массивы в текстовые файлы,
для скорости работы и простоты выборки по сортировать предварительно по классам и писать в отдельные файлы каждый класс,
ну это уже мелкие детали - я уверен, что это и сам сообразишь.


херня конечно получилась - времени ты похоже убил много,
а оказалось, что с таким кол-вом данных и с такой сложностью сортировки массивов из разных источников JS если и справится (а он безусловно справится),
но работать эту будет очень медленно и совсем некрасиво,
а что сделано некрасиво, то сделано неправильно!

skype: daboogiewoogie

Re: Нужна помощь "тыжпрограммистов".

для Da Boogie Woogie:
Спасибо за помощь! CRON и БД на хостинге есть.
херня конечно получилась - времени ты похоже убил много
Тяжело в учении - легко в бою =)
что без WP ты сайт сверстать не сможешь?
Это был мой первый опыт, для начала вроде неплохо получилось) Ну и пока делал, хоть потрогал все эти теги, еще пришлось файлы шаблона редактировать =)
Пойду читать о XMLHttpRequest, как будет результат отпишусь сюда/в скайп.

Re: Нужна помощь "тыжпрограммистов".

для Da Boogie Woogie:
Если обобщить, то схема работы получается такая:
1) По CRON`выполняется php скрипт, функция1( с применением XMLHttpRequest) заполняет таблицу1 в базе данных id:name,type,subtype,image и т.д..
2) Пользователь, попав на страницу, видит форму, выбирает в ней нужные чекбоксы(бб, легкое, тяж, энерго), выбирает диапазон уровней, кликает на "показать". Эти данные отправляются в скрипт, который формирует из них запрос к БД и возвращает ответ.
3) Этот ответ приходит в некую функцию, которая и формирует контент на странице.
Правильно?
Если да, то теперь дело за малым, нужно изучить php и mysql, ну какие-то начальные знания конечно есть, но этого пока что недостаточно.
Попробовал сделать запрос, выглядит оно вот так http://petromi.com/get/eaga7L1db64370ea9c11
<!DOCTYPE HTML>
<html>

<head>
<meta charset="utf-8">
</head>

<body>

<button onclick="loadGuns()" id="button">Загрузить Оружие</button>

<script>
function loadGuns() {

var xhr = new XMLHttpRequest(); //новый объект функции

xhr.open('GET', 'http://api.unit-online.ru/item?id=79', true); //запрос, метод - без параметров, ассинхронный

xhr.onreadystatechange = function() {
if (xhr.readyState != 4) return; // выполняем пока не статус не будет=4 (выполнение закончено)

button.innerHTML = 'Готово!';

if (xhr.status != 200) {
// обработать ошибку
alert(xhr.status + ': ' + xhr.statusText);
} else {
// вывести результат
alert(xhr.responseText); // вывод
}

}

xhr.send(); //отсылаем запрос

button.innerHTML = 'Загружаю...';
button.disabled = true;
}
</script>

</body>

</html>
Выводит так потому что alert(xhr.responseText); , что можно написать вместо алерт чтобы писало прямо на странице? Если пишу "echo" вместо "alert", вообще ничего не выводит.

Re: Нужна помощь "тыжпрограммистов".

хотя выводить что-то тут наверное ни к чему, ибо xhr.responseText надо бы сразу передавать в функию которая выдернет оттуда нужные нам поля.

Re: Нужна помощь "тыжпрограммистов".

для -TRickSTeR-:
убери скрипт в <head></head>
у тебя <body>, это не для фоновой работы, это для отрисовки того, что увидит пользователь.

чтобы не нужно было жать на кнопку, ты можешь добавить в body вызов функции по событию,
например по событию onload
* погугли про такие события,
есть весьма полезные, например onmouseclick или onmouseover ;)

выглядеть твой body будет примерно так: <body onload="any_function()">

теперь внутри body добавь блок (контейнер) в который будешь выводить текст из массива
и присвой ему уникальный идентификатор, чтобы обращаться именно к нему, а не к сферическому коню в вакууме:
<body onload="any_function()">...<div id="dtext"></div>...</body></html>

чтобы твой JS писал в нужное место, тебе нужно погуглить про "объектную модель документа",
так же известную как DOM (Document Object Model)

из скрипта обратиться к блоку можно и без имени, просто соорудив простой шаблон,
логика будет примерно такая: "сделать что-то" с объектом div, который второй по счёту (их же может быть много), из числа вложенных в первый по счёту div, который вложен в body, который в документе.на_экране (можно обращаться и к другим документам, которые не в поле зрения или вообще ещё не отрисованы, а только готовятся).
если с примерами, то это будет примерно так:

window.document.getElementById ("dtext").innerHTML = xhr.responseText;





Если обобщить, то схема работы получается такая:
Правильно?

ну примерно так, возможны варианты и их море ;)
вот только по первому пункту (ну а вдруг ты заблуждаешься) - скрипт, который работает по крону, это вообще отдельная история и к действиям пользователя ни какого отношения не имеет,
эта часть живёт в отдельном файле, возможно (на всякий случай) имеет ЮРЛ, чтобы можно было запустить его вручную прямо из браузера, не дожидаясь пока отработает крон

если ты собрался выводить информацию после работы пользователя с формой, то XMLHttpRequest тебе не нужен,
а вот если хочешь использовать динамическое содержимое, например по клику или по onmouseover(), то как раз JS и пригодится

но читать документацию, особенно про DOM всё равно очень важно - ты будешь постоянно сталкиваться с необходимостью формировать и изменять документы (если собираешься дальше работать в web),
да и зря я конечно конкретные примеры кода привожу - сам должен всё прочитать из первоисточника, понять и осмыслить,
тем более, что программист из меня фиговый - я то вообще гуманитарий

Re: Нужна помощь "тыжпрограммистов".

для Da Boogie Woogie:
вроде сделал, но не работает (точнее работает, но не так как я хочу).
Спойлер

вижу вот это http://petromi.com/get/eag6RN365b3550eab711
почитал про вот это <body onload="loadGuns()">, событие onload используется как указатель, что веб-страница полностью загружена. Ну получается когда страница загрузилась вызываем функцию. Предположил что проблема в синтаксисе где-то здесь window.document.getElementById ("dtext").innerHTML = xhr.responseText; или здесь <div id="dtext">abcd</div>, дописал "abcd", дабы понять выводится ли что-то вообще. Убрал window., ничего не изменилось. Если быстро нажимать на "обновить страницу", то снизу видно "ожидание api.unit-online.ru", т.е. запрос отправляется и ответ приходит.

Re: Нужна помощь "тыжпрограммистов".

для -TRickSTeR-:
не читал твой код - лениво и голову уже не буду сегодня включать.

попробую поиграть в экстрасенса: ты какими нибудь "инструментами разработчика" пользуешься?
вот к примеру в Opera есть такие встроенные, там есть консоль (console) в которой ты с вероятностью в 90% прочтёшь об ошибке о "XMLHttpRequest депрекатед и юзер эфкпириенс",
ибо вероятно запускаешь ты свой скрипт прямо с диска, а не с сервера,
на что браузер конечно согласиться не может, ибо не безопасно
и потому просто не выполняет межсайтовый запрос.

ну и в любом случае - если ошибки в скрипте, то лучше не гадать,
а просто посмотреть на что ругается браузер - он тебе даже номер строки в документе укажет ;)

Re: Нужна помощь "тыжпрограммистов".

1. почитай про разницу между одинарными и двойными кавычками в синтаксисе - какой-то язык это проглотит,
на другом будешь ддооолго голову ломать ;)

2. что это у тебя за путь такой до сервера?
это FTP или P2P? какой протокол то?
ну лениво что ли дописать http://

3. буттон у тебя андефайнед - переменные нужно объявлять перед использованием!
1 2 3 4 »