Ik kon het niet anders omschrijven in de titel, maar ik heb na veel gerommel een server scriptje die wat info laat zien van een gameserver.
Natuurlijk is het leuk om een afbeelding erbij te plaatsen, maar dat gedeelte wil niet lukken omdat ik het nog niet begrijp.
Het gegeven is dat het script de mapnaam weergeeft, die wil ik koppelen aan een afbeelding. Ik weet niet of dit te doen is, daarom vraag ik hier om hulp.
Zoals je ziet is dit een poging om een gelijknamig plaatje (zatar_wetlands.jpg) weer te geven. De output van gq_mapname is Zatar Wetlands, maar kan ook een andere map zijn. Ik heb het even gebruikt als voorbeeld.
Om een plaatje weer te geven zul je allereerst de <img> tag moeten gebruiken en daarbij verwijzen naar de locatie van de afbeelding. Het resultaat zou dus zoiets moeten zijn:
<img src="zatar_wetlands.jpg" />
Als de inhoud van $data['gq_mapname'] niet gelijk is aan de naam van de afbeelding, zul je dat natuurlijk eerst moeten wijzigen. Zie de verschillende string functies op php.net voor inspiratie (oa. strtolower() en str_replace()).
De server kent meerdere mappen, dus moet hij de bijpassende jpg gaan pakken, en als die er niet is een alternatief plaatje laten zien.
ik heb erboven een functie staan die ik misschien kan gebruiken ?
function print_table($data) {
$gqs = array('gq_online', 'gq_address', 'gq_port', 'gq_prot', 'gq_type');
if (!$data['gq_online']) {
printf("");
return;
}
dus in plaats van gq_online gq_mapname maken. Maar hoe zeg ik dan in de print, of echo dat moet kiezen uit een plaatje met een naam die overeenkomt met de bestaande plaatjes ?
EDIT, net geprobeerd, maar omdat er veel servers in de config staan laat hij het plaatje achter elkaar zien.
Op een of andere manier zul je een relatie moeten leggen tussen de mapnaam en de naam van de afbeelding. Makkelijkst is natuurlijk om de naam van de afbeelding hetzelfde te kiezen als de mapnaam, maar je zou bijvoorbeeld ook een array in je PHP script kunnen gebruiken:
<?php
$map_plaatje = array (
'Map 1' => 'map_1.jpg',
'Map 2' => 'map_2.jpg',
etc...
);
?>
Vervolgens kun je aan de hand van de mapnaam die jij uit de database terug krijgt of er een bijbehorend plaatje is en zo ja het betreffende plaatje weergeven. Zo niet, kies je een standaard plaatje.
<?php
if(array_key_exisits($data['gq_mapname'], $map_plaatje))
{
$plaatje = $map_plaatje[$data['gq_mapname']];
}
else
{
$plaatje = 'standaard.jpg';
}
Ik begin te snappen wat je bedoelt.
Ik heb het stuk script geplaatst om te proberen, maar ik doe denk ik nog iets fout omdat ik geen 1 plaatje te zien krijg.
Zowel het script als plaatjes staan in de zelfde map overigens.
Ik heb 1 afbeelding met de naam standaard.jpg en 1 zatar_wetlands.jpg in die map staan.
Ik huur geen server want ik heb er zelf eentje :) idd BF2 onder andere.
Inmiddels ben ik wel ietsje wijzer, hij wil op bepaalde punten in het script domweg geen plaatje zetten. Ik heb hem even een gewone echo met image gegeven, en die op bepaalde plekken getest.
Kennelijk maakt het uit waar het plaatjes script komt, maar ik zou toch zweren dat dit kon op de plek waar het nu staat omdat ik daar de gegevens die verzameld zijn laat zien...
Hier dan maar het hele script, dan zien jullie misschien wat er niet goed gaat.
<?php
error_reporting(E_ALL);
require_once 'GameQ.php';
// Define your servers,
// see list.php for all supported games and identifiers.
$servers = array(
' ' => array('bf2', '69.12.98.120', 29900),
);
// Call the class, and add your servers.
$gq = new GameQ();
$gq->addServers($servers);
// You can optionally specify some settings
$gq->setOption('timeout', 200);
// You can optionally specify some output filters,
// these will be applied to the results obtained.
$gq->setFilter('normalise');
$gq->setFilter('sortplayers', 'gq_ping');
// Send requests, and parse the data
$results = $gq->requestData();
// Some functions to print the results
function print_results($results) {
foreach ($results as $id => $data) {
printf("<h2>%s</h2>\n", $id);
print_table($data);
}
}
function print_table($data) {
$gqs = array('gq_online', 'gq_address', 'gq_port', 'gq_prot', 'gq_type');
if (!$data['gq_online']) {
printf("");
return;
}
print("<h1>$data[hostname]</h1>");
print("<h1>$data[gamename]</h1>");
print("<h3>$data[gq_mapname]</h3>");
print("<h3>$data[gq_gametype]</h3>");
print("<h3>$data[game_descr]</h3>");
print("<h3>$data[gq_address]</h3>");
$map_plaatje = array (
'zatar_wetlands' => 'zatar_wetlands.jpg',
'Road To Jalalabad' => road_to_jalalabad.jpg',
);
if(array_key_exisits($data['gq_mapname'], $map_plaatje))
{
$plaatje = $map_plaatje[$data['gq_mapname']];
}
else
{
$plaatje = 'standaard.jpg';
}
echo '<img src="'.$plaatje.'" />';
// End serverinfo data
foreach ($data as $key => $val) {
if (is_array($val)) continue;
$cls = empty($cls) ? ' class="uneven"' : '';
if (substr($key, 0, 3) == 'gq_') {
$kcls = (in_array($key, $gqs)) ? 'always' : 'normalise';
$key = sprintf("<span class=\"key-%s\">%s</span>", $kcls, $key);
}
printf("", $cls, $key, $val);
}
print("");
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>GameQ - Example script</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta http-equiv="refresh" content="9">
<style type="text/css">
* {
font-size: 9pt;
font-family: Verdana, sans-serif;
}
h1 {
font-size: 9pt;
}
h2 {
font-size: 10pt;
}
h3{
font-size:12px;
font-weight:normal;
margin:0;
}
table {
border: 1px solid #000;
background-color: #DDD;
border-spacing:1px 1px;
}
table thead {
font-weight: bold;
background-color: #CCC;
}
table tr.uneven td {
background-color:#FFF;
}
table td {
padding: 5px 8px;
}
table tbody {
background-color: #F9F9F9;
}
.note {
color: #333;
font-style:italic;
}
.key-always {
color:red;
font-weight:bold;
}
.key-normalise {
color:red;
}
</style>
</head>
<body>
<?php
print_results($results);
?>
</body>
</html>