Autor Zpráva
PanP
Profil
Zdar,dá se udělat pro nepřihlášený uživatele na fóru aby odkazy na foru byly ukrytý? je to vůbec možný udělat?
Louka
Profil
Dá se to udělat.
Ověříš, zda je uživatel přihlášenej (to umíš, ne?) a když nebude, tak bych to řešil preg_replace na výstupu:

$vystup = preg_replace('<a href="[^"]+">[^<]+</a>',"<span class='no-login'>Tato část zprávy je pro nepřihlášené uživatele skryta. <a href='...'>Přihlaste se.</a></span>",$vystup);


Asi mám ten regexp blbě ale, nejsem si jistej.
PanP
Profil
to neumim , umim jenom zaklady a jsem rád že něco udělám,za každou pomoc jsem rád
PanP
Profil
nebo by stačilo normal okno který se otevře při vstupu na forum a tam 2 možnosti - registrace nebo přihlásit.. vim jak se dělá okno ale nevim jak udělat okno že po přihlášení se už neukáže
Louka
Profil
Aha. no s miniBB zkušenost nemám, takže nevím jak by to šlo implementovat do něj. ale tohle fórum je založený na miniBB, tak by ti mohli pomoci ostatní. Vydrž, někdo to bude vědět.
PanP
Profil
Louka:
ok,díky :)
Louka
Profil
To okno: musel bys ho udělat tak, aby se zobrazilo nepřihlášenýmu uživateli vždy, tedy nejen na úvodní stránce, ale i na výpisu vláken atd, jinak by šlo obejít.

Ale jde o to, jestli chceš, aby vyhledávače viděli obsah (bez odkazů) nebo aby viděli jen a pouze tu úvodní stránku (vyhledávač se nepřihlásí = nic neuvidí).

Takže určitě výhodnější je skrýt jen odkazy.
PanP
Profil
tak zkoušim ten kod od Louka,akorad nevim co mam dát místo
$vystup
nebo to tak nechat?
Louka
Profil
Výstup je to, co generuje miniBB jako HTML kód kterej pošle prohlížeči. Takže to musíš nahradit nějakou interní proměnnou, ale detaily systému neznám a vypadá to, že ostatní také neporadí...
Str4wberry
Profil
Tak já teda poradím. V souboru bb_func_thread.php je v proměnné $posterText text určený k vypsání. U něj stačí nahradit ty odkazy, třeba způsobem [#2], je-li funkční. Zda je uživatel přihlášen zjistíš z proměnné $logged. Takto je to v cca 7 let staré miniBB, jejíž kostru využívá tato diskuse, ale mohlo by to tak jít i v současné verzi. Případně bych zkusil pohledat na oficiálním webu, jestli taková možnost není jako plugin či přímo implementovaná v jádru.
PanP
Profil
Str4wberry:
dík za pomoc,zkusim to a uvidim:)
PanP
Profil
tak jsem to našel
if(!isset($preModerationType) or $preModerationType==0) $posterText=$cols[3]; elseif($preModerationType>0 and isset($premodPosts) and in_array($cols[6], $premodPosts)) $posterText=$l_postQueued; else $posterText=$cols[3];


když to vymažu tak zmyzí text z tematu,takže to je ono na 100%,ale nevim jaký odkazy nahradit tim způsobem #2
Str4wberry
Profil
Pokud ten kód z [#2] funguje, tak nejspíš toto přidat pod to:
$posterText = ($logged ? $posterText : preg_replace('<a href="[^"]+">[^<]+</a>',"<span class='no-login'>Tato část zprávy je pro nepřihlášené uživatele skryta. <a href='...'>Přihlaste se.</a></span>",$posterText));
PanP
Profil
píše to chybu
Warning: preg_replace() [function.preg-replace]: Unknown modifier '[' in /home/xxxxxx.com/xxxxxxx.com/Forum/bb_func_vthread.php on line 289
Str4wberry
Profil
Hm, kód z [#2] je špatně. :–)

Pro zachycení odkazů bude stejně zřejmě nejlepší vybrat pattern ze souboru bb_codes.php z funkce deCodeBB.
PanP
Profil
Str4wberry:
z bb_codes.php
function deCodeBB($msg) {
PanP
Profil
$vystup = "bla bla bla";
if($prihlasen == 0) {
$vystup = preg_replace('Tato část zprávy je pro nepřihlášené uživatele skryta. Přihlaste se.",$vystup);
}

echo $vystup;


nemohlo by to být takto?
Str4wberry
Profil
Zkus se nad tím trochu zamyslet. Podívej se na funkci preg_replace — první parametr je regulární výraz (v tvém případě by měl umět sežrat odkaz*), druhý parametr je řetězec, kterým se má odkaz nahradit, a třetí je řetězec, ve kterém se hledá a nahrazuje (v tvém případě $posterText – tedy proměnná se zprávou).

*) Tím „vybrat pattern ze souboru“ bylo myšleno to, že si v té funkci najdeš regulární výraz, který už miniBB diskuse používá pro rozpoznání HTML odkazu. V této diskusi je to například „/<a href=\"([^\"]+)\" target=\"(?:_new|_blank|_self)\"(?: rel=\"nofollow\")?>(.+?)<\/a>/i“, v nové versi miniBB to může být jiné, proto si ho tam najdeš a použiješ v té funkci preg_replace.

Potom už zbývá vložit o zmíněné kroky upravený řádek z [#13]. To je vše. A tohle je můj poslední příspěvek v tomto vlákně.
PanP
Profil
$posterText = ($logged ? $posterText : preg_replace('/<a href=\"([^\"]+)\" target=\"(?:_new|_blank|_self)\"(?: rel=\"nofollow\")?>(.+?)<\/a>/i',"<span class='no-login'>Tato část zprávy je pro nepřihlášené uživatele skryta. <a href='...'>Přihlaste se.</a></span>",$posterText));


paráda,už to funguje,ale žere to odkazy i přihlášenejm :D
Keeehi
Profil
PanP:
Mají přihlášení v $logged true? Nejspíše ne, takže chyba musí být v přiřazování přihlášeným true do proměnné $logged.
PanP
Profil
Keeehi:
kde to zjistim?
Keeehi
Profil
PanP:
No v tom samém scriptu (resp. i v includovaných) někde nad tím řádkem, co jste nám jsem napsal.
Jak rozlišujete přihlášeného a nepřihlášeného uživatele?
Jestli potřebujete zjisti, co se doopravdy nachází v proměnné $logged, dejte před ten váš řádek: var_dump($logged);
PanP
Profil
var_dump($logged);

když to dam před ten řádek tak to vypíše do headru asi 4x NULL
PanP
Profil
tak už to mam

$user_id!=0
dík všem za pomoc a trpělivost

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0