phpRS help fórum : phpRS Fórum
Hlavní diskuzní phpRS fórum. Najdete zde odpovědi na otázky týkající se provozu a instalace phpRS systému.
phpRS - redakční a informační systém
Poslední komentáře - zobrazení názvu článku místo textu
Zaslán uživatelem/kou: cross182 (IP adresa zaznamenána)
Datum: 2009-03-17, 20:28

Mohl by mi prosím někdo upravit kód, aby se mi v bloku posledních komentářů místo prvních xx znaků z textu komentáře zobrazil titulek článku, ke kterému byl komentář vložen? Nepodařilo se mi odstranit bug, který nerozděluje dlouhá slova a roztahuje mi to pak sloupec, tudíž to chci obejít touto cestou ...
kód:

<?
// plugin do phpRS verze 2.3.5b
// vypis poslednich kometaru
// posledni update 5.9.2003
define('IN_CODE',true); // inic. ochranne konstanty





function dej_datum($datum)
{
$dat = explode("-",$datum);
$year = $dat[0];
$month = $dat[1];
$day = $dat[2];
return (int)$day.".".(int)$month.".".substr($year,-2,2);
}

function PoslKomentare()
{

// ---[ definice zakladnich parametru ]-----------------------
$mnozstvikomentaru = 5; // pocet zobrazenych kometaru
$zobrazenychznaku = 20; // pocet znaku, ktere se zobrazi z tela komentare
$oddelovackometare = "<font color=\"#e7038b\">&nbsp;&raquo;</font>"; // zacatek kazdeho kometare ve vypisu bude zacinat timto retezcem
$koneckomentare = "<br><br>";
$stylvypisu = "novtext";
// -----------------------------------------------------------

// vypis X kometaru
$dotazkomentare = phprs_sql_query("select idk,obsah,datum,clanek,titulek from ".$GLOBALS["rspredpona"]."komentare order by datum desc limit 0,".$mnozstvikomentaru,$GLOBALS["dbspojeni"]);
$pocetkom=phprs_sql_Num_Rows($dotazkomentare);


// overeni pritomnosti kometaru
if ($pocetkom==0):
$retezec="<p align=\"center\"><b><span class='".$stylvypisu."'>Databáze je prázdná!</span></b></p>\n";
else:


// vypis komentaru
$retezec="";
for ($pom=0;$pom<$pocetkom;$pom++):
$bezpecny_kometar = strip_tags(phprs_sql_Result($dotazkomentare,$pom,'obsah'));
// odstranime html tagy
$osekany_kometar = substr($bezpecny_kometar,$zobrazenychznaku);
// omezime delku na nastavenou hodnotu
if (strlen($bezpecny_kometar)>strlen($osekany_kometar)):
// pokud jsme komentar zkratili, pridame ". . . "
$osekany_kometar .= " ...";
endif;


// rozdelenie slov dlhsich ako 20 znakov
$bezpecny_kometar = htmlwrap($bezpecny_kometar, 10, " ");


// pridani nazvu clanku
$cisloclanku = phprs_sql_Result($dotazkomentare,$pom,'clanek');
$komen_cla=phprs_sql_query("SELECT titulek FROM ".$GLOBALS["rspredpona"]."clanky WHERE link='$cisloclanku'",$GLOBALS["dbspojeni"]);
$komen_clapocet=phprs_sql_Num_Rows($komen_cla);
// kontrola existence clanku
if ($komen_clapocet==0):
$cltit = "?";
else:
$cltit = phprs_sql_Result($komen_cla,0,'titulek');
endif;
//

// pridani nazvu clanku
$datum = phprs_sql_Result($dotazkomentare,$pom,'datum');
$datum_odeslani=phprs_sql_query("SELECT datum FROM ".$GLOBALS["rspredpona"]."komentare WHERE datum='$datum'",$GLOBALS["dbspojeni"]);
$datum_odeslanipocet=phprs_sql_Num_Rows($datum_odeslani);
// kontrola existence clanku
if ($datum_odeslanipocet==0):
$datum_vypis = "?";
else:
$datum_vypis = phprs_sql_Result($datum_odeslani,0,'datum');
endif;
//

$link_zobrazkomentare = "'comment.php?akce=fullview&cisloclanku='".$cisloclanku."#kom".phprs_sql_result($dotazkomentare,$pom,'idk');
if (trim(phprs_sql_result($dotazkomentare,$pom,'titulek'))!="") {$titulek = phprs_sql_result($dotazkomentare,$pom,'titulek');}else{$titulek="<em>bez titulku</em>";}

// $retezec .="<span class='".$stylvypisu."'>".$oddelovackometare.$osekany_kometar." (<a href='view.php?cisloclanku=".$cisloclanku."' title=\"Zobrazit článek\">".$cltit."</a>)\n".$koneckomentare;
$retezec .="<span class='".$stylvypisu."'>".$oddelovackometare." <a href='view.php?cisloclanku=".$cisloclanku."' title=\"Zobrazit článek s komentářem\">".$osekany_kometar."</a>\n(".dej_datum($datum_vypis).")</span>".$koneckomentare;
endfor;
endif;

// zobrazeni menu
switch ($GLOBALS["vzhledwebu"]->AktBlokTyp()):
case 1: Blok1($GLOBALS["vzhledwebu"]->AktBlokNazev(),$retezec); break;
case 2: Blok2($GLOBALS["vzhledwebu"]->AktBlokNazev(),$retezec); break;
case 3: Blok3($GLOBALS["vzhledwebu"]->AktBlokNazev(),$retezec); break;
case 4: Blok4($GLOBALS["vzhledwebu"]->AktBlokNazev(),$retezec); break;
case 5: Blok5($GLOBALS["vzhledwebu"]->AktBlokNazev(),$retezec); break;
default: Blok1($GLOBALS["vzhledwebu"]->AktBlokNazev(),$retezec); break;
endswitch;
}

?>

Možná to bude jen o přepsání některých proměnných, ale nevím jakých :( Pomůže prosím někdo? Potřebuju web o víkendu spustit a ještě musím dořešit pár věcí .. a mám na to právě jen ten víkend ...


×××---×××
www.ava-plus44.com
www.blink-182.cz

Re: Poslední komentáře - zobrazení názvu článku místo textu
Zaslán uživatelem/kou: Lonanek (IP adresa zaznamenána)
Datum: 2009-03-17, 22:08

Zřejmě bych upravil pouze první dotaz:
$dotazkomentare = phprs_sql_query("select idk,obsah,datum,clanek,titulek from ".$GLOBALS["rspredpona"]."komentare order by datum desc limit 0,".$mnozstvikomentaru,$GLOBALS["dbspojeni"]);

na tento:
$dotazkomentare = phprs_sql_query("SELECT k.idk, k.obsah, k.datum, k.clanek, k.titulek c.titulek AS nazev_cla, c.link FROM ".$GLOBALS["rspredpona"]."komentare AS k, ".$GLOBALS["rspredpona"]."clanky AS c WHERE c.link=k.clanek ORDER BY k.datum DESC LIMIT 0,".$mnozstvikomentaru,$GLOBALS["dbspojeni"]);

je v něm všechno a pak si jen vytáhneš proměnné, které potřebuješ.




* Klub kuželkářů Zálabák, Hankova 62, 503 03 Smiřice (Endora) * X X * Stránky ČZS ZO Třešňovka2 * X X * Cvičný phpRS web (WZ) * X X * Testovací phpRS web (WZ) *
* cvičná verze phpRS v 2.8.2 * X X * testovací web CMS *




Celkem upraveno 1×. Poslední úprava Lonanek v 17.03.2009 23:10.

Re: Poslední komentáře - zobrazení názvu článku místo textu
Zaslán uživatelem/kou: xsuchy09 (IP adresa zaznamenána)
Datum: 2009-03-18, 01:24

a) použij wordwrap
b) změna DB dotazu - raději LEFT JOIN - bude rychlejší, i když rozdíl bude minimální
$dotazkomentare = phprs_sql_query("
SELECT 
    k.idk AS idk, 
    k.obsah AS obsah, 
    k.datum AS datum, 
    k.clanek AS clanek, 
    k.titulek AS titulek,
    c.titulek AS nazev_cla, 
    c.link AS link 
FROM 
    ".$GLOBALS["rspredpona"]."komentare AS k 
LEFT JOIN 
    ".$GLOBALS["rspredpona"]."clanky AS c ON k.clanek = c.link 
ORDER BY datum DESC 
LIMIT 0,".$mnozstvikomentaru,$GLOBALS["dbspojeni"]);

Pro zrychlení DB dotazu doporučuju vytvořit index na sloupec "link" v tabulce "rs_clanky" a na sloupec "clanek" v tabulce "rs_komentare" - např. přes phpMyAdmin takový blesk při výpise struktury tabulky clanky u položky link a u položky clanek při struktuře tabulky komentare - při defaultní předponě rs lze použít tyto SQL příkazy:
ALTER TABLE `rs_clanky` ADD INDEX ( `link` );
ALTER TABLE `rs_komentare` ADD INDEX ( `clanek` );


========================
WEB: Publikační systém WAMOS
SEO: SEO analýza zdarma
OPEN PROJECTS: Studentský portál VUT
HOSTING: WebGlobe.cz
ICQ: 313887644
EMAIL: xsuchy09(at)centrum.cz
========================



Celkem upraveno 1×. Poslední úprava xsuchy09 v 18.03.2009 01:24.

Re: Poslední komentáře - zobrazení názvu článku místo textu
Zaslán uživatelem/kou: cross182 (IP adresa zaznamenána)
Datum: 2009-03-19, 16:15

Díky oběma.
Dotaz od Lonanek mi vypisoval prázdnou databázi.
od xsuchy09 zdá se funguje, ale nevypisuje mi to název článku.
Na konci dokumentu jsem přepsal 'titulek' na 'nazev_cla' a nepomohlo to:

if (trim(phprs_sql_result($dotazkomentare,$pom,'nazev_cla'))!="") {$titulek = phprs_sql_result($dotazkomentare,$pom,'nazev_cla');}else{$titulek="<em>bez titulku</em>";}

Vypíše mi to jen:
... (19.3.09)

Zkoušel jsem i místo 'nazev_cla' napsat 'titulek' 'clanek' a stále to vypisovalo jen ty tři tečky, které se tam vkládají automaticky, když se rozdělí komentář.

×××---×××
www.ava-plus44.com
www.blink-182.cz

Re: Poslední komentáře - zobrazení názvu článku místo textu
Zaslán uživatelem/kou: xsuchy09 (IP adresa zaznamenána)
Datum: 2009-03-19, 16:35

Protože proměnná $titulek není nikde vypisována - viz výpis za tebou zmiňovanou podmínkou:
$link_zobrazkomentare = "'comment.php?akce=fullview&cisloclanku='".$cisloclanku."#kom".phprs_sql_result($dotazkomentare, $pom,'idk');
if (trim(phprs_sql_result($dotazkomentare,$pom,'titulek'))!="") {$titulek = phprs_sql_result($dotazkomentare,$pom,'titulek');}else{$titulek="<em>bez titulku</em>";}

// $retezec .="<span class='".$stylvypisu."'>".$oddelovackometare.$osekany_kometar." (<a href='view.php?cisloclanku=".$cisloclanku."' title=\"Zobrazit článek\">".$cltit."</a>)\n".$koneckomentare;
$retezec .="<span class='".$stylvypisu."'>".$oddelovackometare." <a href='view.php?cisloclanku=".$cisloclanku."' title=\"Zobrazit článek s komentářem\">".$osekany_kometar."</a>\n(".dej_datum($datum_vypis).")</span>".$konecko mentare;
endfor;
endif;


Jinak i kód od Lolanek je ok, jen tam má chybu z nepozornosti, kterou jsi asi neopravil - chybí tam čárka před "c.titulek AS nazev_cla" - správně tedy:
$dotazkomentare = phprs_sql_query("SELECT k.idk, k.obsah, k.datum, k.clanek, k.titulek, c.titulek AS nazev_cla, c.link FROM ".$GLOBALS["rspredpona"]."komentare AS k, ".$GLOBALS["rspredpona"]."clanky AS c WHERE c.link=k.clanek ORDER BY k.datum DESC LIMIT 0,".$mnozstvikomentaru,$GLOBALS["dbspojeni"]);

Ovšem platí co jsem napsal výše - min. přidáním indexů na zmíněné sloupce bude dotaz výrazně rychlejší.

========================
WEB: Publikační systém WAMOS
SEO: SEO analýza zdarma
OPEN PROJECTS: Studentský portál VUT
HOSTING: WebGlobe.cz
ICQ: 313887644
EMAIL: xsuchy09(at)centrum.cz
========================

Re: Poslední komentáře - zobrazení názvu článku místo textu
Zaslán uživatelem/kou: cross182 (IP adresa zaznamenána)
Datum: 2009-03-19, 17:31

Tak jsem to zkusil přepsat v '$osekany_komentar'
$retezec="";
 for ($pom=0;$pom<$pocetkom;$pom++):
   $bezpecny_kometar =  strip_tags(phprs_sql_Result($dotazkomentare,$pom,'nazev_cla'));
   // odstranime html tagy
   $osekany_kometar = substr($bezpecny_kometar,$zobrazenychznaku);
   // omezime delku na nastavenou hodnotu
   if (strlen($bezpecny_kometar)>strlen($osekany_kometar)):
     // pokud jsme komentar zkratili, pridame ". . . "
     $osekany_kometar .= " ...";
   endif;

a taky nic :(

×××---×××
www.ava-plus44.com
www.blink-182.cz

Re: Poslední komentáře - zobrazení názvu článku místo textu
Zaslán uživatelem/kou: cross182 (IP adresa zaznamenána)
Datum: 2009-03-20, 12:43

Ještě jsem na to mrknul.
Jakmile tam dám něco z tabulky komentářů, v pohodě to vypíše. Jakmile ale z tabulky článků, tak to nevypíše nic ...

×××---×××
www.ava-plus44.com
www.blink-182.cz

Re: Poslední komentáře - zobrazení názvu článku místo textu
Zaslán uživatelem/kou: Lonanek (IP adresa zaznamenána)
Datum: 2009-03-20, 13:19

IMHO proměnnou cltit ale nikde nezobrazuješ. Nemůže se tedy nic vypisovat. Řádek je zaremován

// $retezec .="<span class='".$stylvypisu."'>".$oddelovackometare.$osekany_kometar." (<a href='view.php?cisloclanku=".$cisloclanku."' title=\"Zobrazit článek\">".$cltit."</a>)\n".$koneckomentare;

$retezec .="<span class='".$stylvypisu."'>".$oddelovackometare." <a href='view.php?cisloclanku=".$cisloclanku."' title=\"Zobrazit článek s komentářem\">".$osekany_kometar."</a>\n(".dej_datum($datum_vypis).")</span>".$koneckomentare;
endfor;



TO xsuchy09:
Díky za upozornění na chybu. Opravdu jsem si ji ze své nepozornosti nevšiml.





* Klub kuželkářů Zálabák, Hankova 62, 503 03 Smiřice (Endora) * X X * Stránky ČZS ZO Třešňovka2 * X X * Cvičný phpRS web (WZ) * X X * Testovací phpRS web (WZ) *
* cvičná verze phpRS v 2.8.2 * X X * testovací web CMS *

Re: Poslední komentáře - zobrazení názvu článku místo textu
Zaslán uživatelem/kou: cross182 (IP adresa zaznamenána)
Datum: 2009-03-20, 13:44

Díky moc, už mi to jede.

×××---×××
www.ava-plus44.com
www.blink-182.cz

Re: Poslední komentáře - zobrazení názvu článku místo textu
Zaslán uživatelem/kou: cross182 (IP adresa zaznamenána)
Datum: 2009-04-10, 12:10

Mohl bych poprosit ještě o pomoc?
Spustil jsem možnost registrace čtenářů, ale když přihlášený uživatel napíše komentáře, ve výpisu posledních komentářů se nezobrazí jeho nick - protože se načítá jen z tabulky komentáře a ten jeho uložený je v tabulce 'ctenari'.
Musí se pro to sestavit dotaz nebo to jde nějak jinak?
Něco jak mám třeba ve výpisu komentářů: if ($GLOBALS["prmyctenar"]->ctenarstav==0)

V tabulce ctenari se nick ukládá do sloupce 'prezdivka'

Dosavadní dotaz:

$dotazkomentare = phprs_sql_query("
SELECT 
    k.idk AS idk, 
    k.obsah AS obsah, 
    k.datum AS datum, 
    k.clanek AS clanek,
    k.od AS od, 
    k.titulek AS titulek,
    c.titulek AS nazev_cla, 
    c.link AS link 
FROM 
    ".$GLOBALS["rspredpona"]."komentare AS k 
LEFT JOIN 
    ".$GLOBALS["rspredpona"]."clanky AS c ON k.clanek = c.link 
ORDER BY datum DESC 
LIMIT 0,".$mnozstvikomentaru,$GLOBALS["dbspojeni"]);


Má to být nějak takhle?
<?php

$dotazkomentare = phprs_sql_query("
SELECT 
    k.idk AS idk, 
    k.obsah AS obsah, 
    k.datum AS datum, 
    k.clanek AS clanek,
    k.od AS od, 
    k.titulek AS titulek,
    c.titulek AS nazev_cla, 
    c.link AS link, 
    ct.prezdivka AS prezdivka
FROM 
    ".$GLOBALS["rspredpona"]."komentare AS k 
LEFT JOIN 
    ".$GLOBALS["rspredpona"]."ctenari AS ct 
LEFT JOIN 
    ".$GLOBALS["rspredpona"]."clanky AS c ON k.clanek = c.link 
ORDER BY datum DESC 
LIMIT 0,".$mnozstvikomentaru,$GLOBALS["dbspojeni"]);




×××---×××
www.ava-plus44.com
www.blink-182.cz

Re: Poslední komentáře - zobrazení názvu článku místo textu
Zaslán uživatelem/kou: Lonanek (IP adresa zaznamenána)
Datum: 2009-04-10, 17:09

Takhle to asi nepujde.
1. u otevření tabulky ctenari není nastavena žádná porovnávací relace;
2. v položce k.od je uloženo plné jméno čtenáře;
3. v položce reg_id tabulky komentare je obsaženo id čtenáře, který poznámku vložil, tedy nastavit relaci porovnání ON k.reg_id=ct.idc

přidat do výpisu položky k.reg_id, ct.idc


Pokud chceš pouze vložit nick (ne tedy plné jméno) při vložení celého komentáře, pak:
$prod = $GLOBALS["prmyctenar"]->Ukaz("username"); // nick
$prod = $GLOBALS["prmyctenar"]->Ukaz("jmeno"); // plné jméno

pak $prod vložíš do pole od tabulky komentare.

Podmínka
if ($GLOBALS["prmyctenar"]->ctenarstav==0);
vyhodnotí zda je čtenář přihlášen nebo ne.




* Klub kuželkářů Zálabák, Hankova 62, 503 03 Smiřice (Endora) * X X * Stránky ČZS ZO Třešňovka2 * X X * Cvičný phpRS web (WZ) * X X * Testovací phpRS web (WZ) *
* cvičná verze phpRS v 2.8.2 * X X * testovací web CMS *

Re: Poslední komentáře - zobrazení názvu článku místo textu
Zaslán uživatelem/kou: cross182 (IP adresa zaznamenána)
Datum: 2009-04-10, 20:03

Oki ,takže prvně dotaz ...

$dotazkomentare = phprs_sql_query("
SELECT 
    k.idk AS idk, 
    k.obsah AS obsah, 
    k.datum AS datum, 
    k.clanek AS clanek,
    k.od AS od, 
    k.titulek AS titulek,
    k.reg_id AS reg_id,
    c.titulek AS nazev_cla, 
    c.link AS link, 
    ct.idc AS idc,
    ct.prezdivka AS prezdivka
FROM 
    ".$GLOBALS["rspredpona"]."komentare AS k 
LEFT JOIN 
    ".$GLOBALS["rspredpona"]."ctenari AS ct 
LEFT JOIN 
    ".$GLOBALS["rspredpona"]."clanky AS c ON k.clanek = c.link AND k.reg_id=ct.idc
ORDER BY datum DESC 
LIMIT 0,".$mnozstvikomentaru,$GLOBALS["dbspojeni"]);


Mohlo by být?

×××---×××
www.ava-plus44.com
www.blink-182.cz

Re: Poslední komentáře - zobrazení názvu článku místo textu
Zaslán uživatelem/kou: cross182 (IP adresa zaznamenána)
Datum: 2009-04-10, 20:09

Tak mě možná napadlo lepší řešení ...
Mám to udělaný tak, že po přihlášení nemá uživatel možnost měnit nick ve formuláři - prostě aby si ho nemohl přepsat na jiné, když je přihlášený (logické). Tak jsem to tedy chtěl - nastavil jsem inputu hodnotu disabled - mělo být šedé, ale nebylo .. vypadalo pořád stejně, jen se v něm opravdu nedalo nic upravovat. Což se mi zdálo matoucí. Vyřešil jsem to tedy tak, že jsem nechal tu proměnnou jednoduše vypsat na obrazovku - nikoliv do inputu.
V posledních komentářích (plugin) mě ale zarazilo, že se u jednoho uživatele nick v pořádku vypsal. Tak jsem to začal dohledávat a zjistil, že jsem výše uvedenou úpravu zapomněl udělat u Reagování na komentář - bylo normálně zobrazeno Input pole s nickem.

Jelikož Disabled údajně nefunguje u všech prohlížečů, šlo by to třeba obejít tak, že bych nick vypsal normálně do stránky a u toho inputu nastavil jen Hidden - na stránce by vlastně byl, jen by nešel vidět ?

EDIT: Tak to tak funguje, díky za pomoc :)

×××---×××
www.ava-plus44.com
www.blink-182.cz



Celkem upraveno 1×. Poslední úprava cross182 v 10.04.2009 20:13.



Lituji, ale pouze registrovaní uživatelé mohou zasílat příspěvky do této sekce.
This forum powered by Phorum and designed by STaNBoSS.