Autor Zpráva
CZghost
Profil
Nevím, zda se to tu už neprobíralo, nic podobného jsem nenašel, takže píšu:
Dělám skript pro náhodné vybírání Murphyho zákonů do záhlaví fóra, pro pobavení návštěvníků. Fórum používá nadstavbu phpBB, takže to trochu souvisí s nahrazovacími funkcemi softwaru.

Mám HTML kód pro zobrazení Murphyho zákonů v záhlaví:
<div id="murphylaw">
<span class="murphylaw-caption">{L_MURHPYLAW_CAPTION}:</span>
{MURPHYLAWS}
<div id="murphylaw-tip">
{L_MURPHYLAW_TIP}
</div>
</div>

Mám vytvořené pole s několika řetězci představující jazykové proměnné pro Murphyho zákony:
$murphylaws = array (
    "{L_MURPHYLAW_CASE}",
    "{L_MURPHYLAW_CABEL}",
    "{L_MURPHYLAW_KEYBOARD}",
    "{L_MURPHYLAW_MOUSE}",
    "{L_MURPHYLAW_MONITOR}",
    "{L_MURPHYLAW_SPEAKERS}",
    "{L_MURPHYLAW_PRINTER}",
    "{L_MURPHYLAW_ROUTER}",
    "{L_MURPHYLAW_HDD}",
    "{L_MURPHYLAW_CPU}",
    "{L_MURPHYLAW_USB_CONNECTOR}",
    "{L_MURPHYLAW_HEADPHONES}",
    "{L_MURPHYLAW_MICROPHONE}",
    "{L_MURPHYLAW_HARDWARE}",
);

Potřeboval bych nějak zajistit náhodné vybírání jednoho z řetězců {L_MURHPYLAW_*}, který se poté zobrazí namísto {MURPHYLAWS}

Pro náhodné vybírání jsem vytvořil tento kód:
srand(time());
$stringsCount=count($murphylaws);
$randomPick=(rand()%$stringsCount);
Ale nejsem si jistý, zda je to ten správný, proto se ptám...

Dalším problémem je zajištění náhrady řetězce {MURPHYLAWS} za výběr z pole. Je to tohle?
DEFINE("{MURPHYLAWS}",$murphylaws[$randomPick]);
Tori
Profil
CZghost:
Nestačilo by náhodně zamíchat pole (shuffle) a vybrat první prvek?
Alphard
Profil
Lepší (úspornější) bude array_rand().
Tomu nahrazování moc nerozumím, je tam použit nějaký šablonovací systém?
CZghost
Profil
Děkuju, to mě nenapadlo :)

Zkoušel jsem trochu Googlit ohledně tech proměnných typu {MURPHYLAWS}, ale nenašel jsem nic použitelného, asi hledám blbě :)
Vypadá to, že lepší je výběr přes array_rand() :)

Vytvořil jsem kód pro náhodný výběr filmu:
<!DOCTYPE HTML>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Náhodný výběr filmů</title>
        <?php
            $array = array(
                'Postradatelní',
                'Hellboy',
                'Doba ledová',
                'Hellboy 2: Zlatá armáda',
                'Jako kočky a psi',
                'Dívka na koštěti',
                '2012',
                'Muži v černém 3',
                'John Q',
                'Johnny English',
            );
            $random = array_rand($array,1);
        ?>
    </head>
    <body>
        Dnes se budeme dívat na film <i><?php echo $array[$random] ?></i>.
    </body>
</html>
Funguje, teď jenom zjistit, jak nahradit to {MURPHYLAWS} za tu náhodně vybranou položku (Murphyho zákon)
Taps
Profil
CZghost:
podívej se na funkci
<?
str_replace();
?>
CZghost
Profil
Alphard:
- Tomu nahrazování moc nerozumím, je tam použit nějaký šablonovací systém?
Je tam systém skinů, které využívají tyto proměnné, ale nevím, jak nastavit vlastní. V databázi jsem nenašel nic, v jakém souboru jsou tedy tyto proměnné uloženy, nevím. Moje fóra využívají jediný skin, Prosilver, který lze také snáze upravovat ke svým potřebám. Do hlavičky bych chtěl vměstnat náhodný výběr těch Murphyho zákonů, ale nenašel jsem dokumentaci k phpBB, která vysvětluje funkci toho nahrazování.

Taps:
To mi moc nepomůže. Nevím, jakou funkci využívají moje fóra pro transkluzi proměnné. Nemyslím si, že používají právě str_replace();, ale je to možné. Asi se raději zeptám vývojářů...
CZghost
Profil
Tak pro proměnné v šablonách, jak jsem předpokládal, je připraven PHP soubor. Zjistil jsem, že všechny proměnné (kromě jazykových) se nacházejí v souboru functions.php, který mimo jiné definuje i funkci jednotlivých proměnných.

Tohle je kód pro samotnou funkci vybírání M. zákonů:
$murphylaws = array (
$user->lang['MURPHYLAW_CASE'],
$user->lang['MURPHYLAW_CABEL'],
$user->lang['MURPHYLAW_KEYBOARD'],
$user->lang['MURPHYLAW_MOUSE'],
$user->lang['MURPHYLAW_MONITOR'],
$user->lang['MURPHYLAW_SPEAKERS'],
$user->lang['MURPHYLAW_PRINTER'],
$user->lang['MURPHYLAW_ROUTER'],
$user->lang['MURPHYLAW_HDD'],
$user->lang['MURPHYLAW_CPU'],
$user->lang['MURPHYLAW_USB_CONNECTOR'],
$user->lang['MURPHYLAW_HEADPHONES'],
$user->lang['MURPHYLAW_MICROPHONE'],
$user->lang['MURPHYLAW_HARDWARE'],
);
$randomlaw = array_rand($murphylaws,1);

Tohle je kód pro volání funkce pomocí proměnné:
'MURPHYLAWSTITLE' => $user->lang['MURPHYLAW_CAPTION'],
'MURPHYLAWS' => $murphylaws[$randomlaw],
To 'MURPHYLAWSTITLE' => $user->lang['MURPHYLAW_CAPTION'], je jakýsi hack pro zajištění překladu nadpisu pro M. zákony, bohužel ani to problém nevyřešilo...

Jinými slovy: Děkuju za snahu mi pomoci, velice si toho vážím. Tímto je problém Jak vyvolat náhodný výběr M. zákonů v záhlaví fóra vyřešen, nyní řeším jiný problém (ten s titulkem), který sem už ale nepatří. Ještě jednou díky, kromě titulku všechno funguje jak má :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: