Panel / podstrona ze zdjęciem miesiąca
|
BenLomax |
Dodany dnia 13.12.2008 12:40:33
|
Bywalec
Postów: 426 Pomógł: 25 Ostrzeżeń: 1
Data rejestracji: 25.06.2008 09:48
|
Hej.
Chciałbym stworzyć panel/podstronę ze zdjęciem miesiąca. W panelu wyświetlało by się najwyżej oceniane zdjęcie (ewentualnie możliwość zmiany liczby np: pierwsza trójka) przez miesiąc i jak istnieje taka możliwość to by nazwa miesiąca zmieniała się dynamicznie - wraz z nowym miesiącem - może można by było wykorzystać miesiące z którego korzysta Fusion?
PW od moderatora:
- Odświeżenie Tematu - Pieka 19.01 - 11:15
Edytowane przez Pieka dnia 19.01.2009 11:16:58
|
|
|
|
Wścibski Gość |
Dodany dnia 21.11.2024 16:02:11
|
Pan Kontekstualny
Postów: n^x
Data rejestracji: Zawsze
|
|
IP: localhost |
|
|
kefirek |
Dodany dnia 13.12.2008 13:44:39
|
Zaawansowany
Postów: 1191 Pomógł: 418 Ostrzeżeń: 1
v6.00.xxx Data rejestracji: 06.04.2008 21:59
|
Wklej ten kod w panel i będzie wyświetlać zdjęcie najwyżej oceniane w aktualnym miesiącu:
EDIT - poprawione zapytanie na bardziej wydajne.
openside("Najwyżej oceniane zdjęcia");
$rok = date('Y');
$miech = date('n');
$dzien = date('j');
$time = gmmktime(0, 0, 0, $miech, 1, $rok);
$miesiace = array(1 => "Styczeń", 2 => "Luty", 3=> "Marzec", 4 => "Kwiecień", 5 => "Maj", 6 => "Czerwiec", 7 => "Lipiec", 8 => "Sierpień", 9 => "Wrzesień", 10 => "Październik", 11 => "Listopad", 12 => "Grudzien" );
echo "<table align='center' cellpadding='0' cellspacing='4'>";
$wynik = dbquery("
SELECT photo_id, photo_title, photo_thumb1, album_id,
COUNT(photo_id) AS num_vote,
ROUND( AVG(rating_vote),2) AS avg_photo
FROM ".DB_PHOTOS."
LEFT JOIN ".DB_RATINGS." ON (rating_item_id = photo_id) AND rating_type='P' AND rating_datestamp >='".$time."'
LEFT JOIN ".DB_PHOTO_ALBUMS." USING ( album_id )
WHERE ".groupaccess('album_access')."
GROUP BY photo_id
ORDER BY avg_photo DESC , num_vote DESC
LIMIT 1
");
if(dbrows($wynik) > 0) {
$data = dbarray($wynik);
$randphotodir = PHOTOS.(!@ini_get("safe_mode") ? "album_".$data['album_id']."/" : "");
echo
"<tr>
<td align='center'>Zdjęcie miesciąca ".$miesiace[$miech]."</td></tr>
<tr>
<tr>
<td align='center'><a href='".BASEDIR."photogallery.php?photo_id=".$data['photo_id']."' class='gallery'>
<img src='".$randphotodir.$data['photo_thumb1']."' title='".$data['photo_title']."' alt='".$data['photo_title']."' border='0' /></a></td></tr>
<tr>
<td align='center'>Liczba ocen: ".number_format($data['num_vote'])."</td>
</tr>
<tr>
<td align='center'>Średnia: ".$data['avg_photo']."</td>
</tr>";
} else {
echo "<tr>
<td align='center'>Brak głósów w tym miesiącu</td>
</tr>";
}
echo '</table>';
closeside();
Edytowane przez kefirek dnia 02.11.2010 14:16:30
|
|
|
|
BenLomax |
Dodany dnia 19.01.2009 11:15:43
|
Bywalec
Postów: 426 Pomógł: 25 Ostrzeżeń: 1
Data rejestracji: 25.06.2008 09:48
|
działa wyśmienicie!
Wiadomość doklejona:
Panel działa wyśmienicie, ale pomyślałem czy można by było zrobić do niego takie małe archiwum - podstronę na której wyświetlałyby się najwyżej oceniane zdjęcia miesiąca. Co miesiąc dodawane by było jedno zdjęcie z mijającego miesiąca.
Edytowane przez BenLomax dnia 19.01.2009 10:56:37
|
|
|
|
kefirek |
Dodany dnia 19.01.2009 20:09:53
|
Zaawansowany
Postów: 1191 Pomógł: 418 Ostrzeżeń: 1
v6.00.xxx Data rejestracji: 06.04.2008 21:59
|
BenLomax napisał/a:
:D działa wyśmienicie!
Wiadomość doklejona:
Panel działa wyśmienicie, ale pomyślałem czy można by było zrobić do niego takie małe archiwum - podstronę na której wyświetlałyby się najwyżej oceniane zdjęcia miesiąca. Co miesiąc dodawane by było jedno zdjęcie z mijającego miesiąca.
Zrobiłem tak, że po wejście w archiwum wyświetlają się fotki z aktualnego miesiąca. Po kliknięciu na rok pojawiają się z danego roku. Tworzysz plik np. archiwum.php, wrzucasz do głównego katalogu, a kod to:
EDIT - poprawione zapytanie na bardziej wydajne.
W załączniku gotowy plik.
kefirek dodał/a następującą plik:
Edytowane przez kefirek dnia 02.11.2010 14:51:35
|
|
|
|
BenLomax |
Dodany dnia 20.01.2009 09:12:47
|
Bywalec
Postów: 426 Pomógł: 25 Ostrzeżeń: 1
Data rejestracji: 25.06.2008 09:48
|
Hej, odwaliłeś kawał dobrej roboty, ale ja postanowiłem trochę pomarudzić :P.
Mój zamysł przedstawiam na rys:
http://img232.ima...533pf4.jpg
Fragment w czerwonej ramce to podpis jaki mam pod zdjęciem w galerii zdjęć, oto kod:
echo $locale['433'].showdate("shortdate", $data['photo_datestamp'])."<br />\n";
echo $locale['434']."<a href='".BASEDIR."profile.php?lookup=".$data['user_id']."'>".$data['user_name']."</a><br />\n";
$photo_comments = dbcount("(comment_id)", DB_COMMENTS, "comment_type='P' AND comment_item_id='".$data['photo_id']."'");
echo ($photo_comments == 1 ? $locale['436b'] : $locale['436']).$photo_comments."<br />\n";
echo $locale['457'].$data['photo_views']."<br />\n";
echo $locale['437']."<br />".($data['count_votes'] > 0 ? str_repeat("<img src='".get_image("star")."' alt='*' style='vertical-align:middle' />", ceil($data['sum_rating'] / $data['count_votes'])) : $locale['438'])."\n</div>\n";
Plus to co dałeś w standardzie, czyli liczba i średnia ocen.
Edytowane przez Pieka dnia 02.11.2009 10:43:35
|
|
|
|
Kopciak77 |
Dodany dnia 23.03.2009 15:35:56
|
Przedszkolak
Postów: 87 Ostrzeżeń: 3
Data rejestracji: 08.08.2008 20:40
|
Mam problem z panelem wyskakuje mi coś takiego
Something is wrong in your syntax obok 'SELECT COUNT(rating_id) FROM Snapfoto_ratings c WHERE c.rati' w linii 1
Brak g³ósów w tym miesi±cu
Co zrobić aby było tak jak ma być
Z góry dziękuję
Błędy w [code] - ICEK
Edytowane przez ICEK dnia 23.03.2009 16:25:23
|
|
|
|
owca999 |
Dodany dnia 16.07.2009 23:21:35
|
Przedszkolak
Postów: 3
Data rejestracji: 11.07.2009 01:59
|
A jak zrobic zdjecie tygodnia i wyswietlane w panelu nad newsami i nie jako miniatura tylko w konkretnym rozmiarze np 640x480 ??
Marzy mi się do tego efekt jak na Digart'cie -> przed obrazkiem (na obrazku) pol-przezroczysty szary pasek z avatarem i nickiem tego kto dodal zdjecie... |
|
|
|
Kopciak77 |
Dodany dnia 03.10.2009 13:44:26
|
Przedszkolak
Postów: 87 Ostrzeżeń: 3
Data rejestracji: 08.08.2008 20:40
|
Kopciak77 napisał/a:
Mam problem z panelem wyskakuje mi coś takiego
Something is wrong in your syntax obok 'SELECT COUNT(rating_id) FROM Snapfoto_ratings c WHERE c.rati' w linii 1
Brak g³ósów w tym miesi±cu
Co zrobić aby było tak jak ma być
Z góry dziękuję
Błędy w [code] - ICEK
Doradzi mi ktoś ? |
|
|
|
Mustava |
Dodany dnia 02.11.2010 13:48:47
|
Przedszkolak
Postów: 30 Pomógł: 2 Ostrzeżeń: 1
Data rejestracji: 07.07.2010 13:13
|
Od kilku dni mam problem z działanie ww skryptu - czas jego wykonania to rząd od kilkunastu do kilkudziesięciu sekund, będąc na stronie która zawiera ten panel całość ładuje się koszmarnie wolno.
Chodziło toto w miarę OK gdy było mało danych (chyba dlatego), ale od ostatnich dni października - totalna "zamułka".
"Puszczenie" zapytania z poziomu samego phpMyadmina - podobnie.
Jak zoptymalizować zapytanie sql:
SELECT tp . * , tp.photo_id a, ta . * , (
SELECT COUNT( rating_id )
FROM ratings c
WHERE c.rating_type = 'P'
AND (
c.rating_item_id = tp.photo_id
)
AND c.rating_datestamp >= '1288569600'
) AS ile, (
SELECT ROUND( AVG( rating_vote ) , 2 )
FROM ratings c
WHERE c.rating_type = 'P'
AND (
c.rating_item_id = tp.photo_id
)
AND c.rating_datestamp >= '1288569600'
) AS srednia
FROM photos tp
LEFT JOIN photo_albums ta
USING ( album_id )
WHERE album_access =0
ORDER BY srednia DESC , ile DESC
LIMIT 1
Może założyć gdzieś index?
Dotyczy zarówno panelu jak i archiwum (tu to już wogóle koszmar);
Niestety nie jestem orłem w tym temacie:(
PS może to coś pomoże - rekordów w tablicy
ratings - 338
photos - 22 052
photo_albums - 435
Edytowane przez Mustava dnia 02.11.2010 14:08:01
|
|
|
|
kefirek |
Dodany dnia 02.11.2010 14:25:34
|
Zaawansowany
Postów: 1191 Pomógł: 418 Ostrzeżeń: 1
v6.00.xxx Data rejestracji: 06.04.2008 21:59
|
W poście dwa poprawiłem zapytanie powinno pomóc oraz w dodatkowych stronach wklej kod i daj podgląd
<?php
$a = dbquery("ALTER TABLE `v7_ratings` ADD INDEX ( `rating_item_id` ) ,
ADD INDEX ( `rating_type` ),
ADD INDEX ( `rating_datestamp`)");
$b = dbquery("ALTER TABLE `v7_photos` ADD INDEX ( `album_id` )");
$c = dbquery("ALTER TABLE `v7_photo_albums` ADD INDEX ( `album_access` )");
if($a && $b && $c){ echo 'OK'; } else { echo 'blad'; }
?>
I NAPISZ CZY TO POMOGŁO. |
|
|
|
Mustava |
Dodany dnia 02.05.2011 12:41:57
|
Przedszkolak
Postów: 30 Pomógł: 2 Ostrzeżeń: 1
Data rejestracji: 07.07.2010 13:13
|
Wygląda (tak "na szybko" ) na to że pomogło, sprawdzałem zarówno na stronie, jak i w phpMyadminie
Dzięki :)
Dodane 02.05.2011
Po pewnym czasie mam dwie uwagi/sugestie:
- w linii 5 kodu boxa
$time = gmmktime(0, 0, 0, $miech, 1, $rok);
należałoby chyba użyć
$time = mktime(0, 0, 0, $miech, 1, $rok);
U mnie nie działało prawidłowo ze względu na zmianę czasu na czas letni
- Zastanawiam się czy taki sposób oceny jest sprawiedliwy, np 10 głosów po 5pkt daje średnią 5,00, ale także 1 głos (na inne zdjęcie) z oceną 5pkt da średnią 5,00.
A niewątpliwie pierwsza fotka będzie bardziej "wartościowa".
Czy nie należałoby zrobić tak by wyliczyć średnią oceny do danej fotki, a później tą średnią pomnożyć przez liczbę oddanych głosów i dopiero taki wynik brać do rankingu?
- zmodyfikowałem u siebie kod boxa linia od 21
if(dbrows($wynik) > 0) {
$data = dbarray($wynik);
na
$data = dbarray($wynik1);
if(($data['ile'] > 0)&&($data['srednia'] > 0)) {
zdarzało się że pokazywały się "dziwne' fotki.
PW od moderatora:
- Odświeżenie Tematu - Pieka 02.05 - 12:41
Edytowane przez Mustava dnia 02.05.2011 13:15:15
|
|
|
|
BenLomax |
Dodany dnia 02.05.2011 21:51:30
|
Bywalec
Postów: 426 Pomógł: 25 Ostrzeżeń: 1
Data rejestracji: 25.06.2008 09:48
|
@Mustava, wprowadziłeś przydatne modyfikacje. Dzięki.
|
|
|
|
Mustava |
Dodany dnia 12.07.2011 12:01:24
|
Przedszkolak
Postów: 30 Pomógł: 2 Ostrzeżeń: 1
Data rejestracji: 07.07.2010 13:13
|
Nie ma za co
Problem w tym, że nie wiem jak zmodyfikować zapytanie sql by wyglądało coś w ten "deseń"
SELECT photo_id, photo_title, photo_thumb1, album_id,
COUNT(photo_id) AS num_vote,
ROUND( AVG(rating_vote),2) AS avg_photo,
(num_vote * avg_photo) AS wynik_top
FROM ".DB_PHOTOS."
LEFT JOIN ".DB_RATINGS." ON (rating_item_id = photo_id) AND rating_type='P' AND rating_datestamp >='".$time."'
LEFT JOIN ".DB_PHOTO_ALBUMS." USING ( album_id )
WHERE ".groupaccess('album_access')."
GROUP BY photo_id
ORDER BY wynik_top DESC
LIMIT 1
Dodane. 12.07.2011
Po pewnych "kombinacjach" doszedłem do poniższego kodu (plik archiwym.php)
<?php
require_once "maincore.php";
require_once THEMES."templates/header.php";
if ((!isset($_GET['rok'])) || (!isnum($_GET['rok']))) {$_GET['rok']=date('Y');}
opentable("Archiwum zdjeć - rok ".$_GET['rok']);
$miesiace = array(1 => "Styczeń", 2 => "Luty", 3=> "Marzec", 4 => "Kwiecień", 5 => "Maj", 6 => "Czerwiec", 7 => "Lipiec", 8 => "Sierpień", 9 => "Wrzesień", 10 => "Październik", 11 => "Listopad", 12 => "Grudzien" );
$wynik0 = dbquery("SELECT YEAR(DATE(FROM_UNIXTIME(rating_datestamp))) AS rok FROM ".DB_RATINGS." WHERE rating_type='P' GROUP BY rok ORDER BY rok DESC");
if(dbrows($wynik0) > 0) {
while($r = dbarray($wynik0))
{echo THEME_BULLET." <a href='".FUSION_SELF."?rok=".$r['rok']."'>".$r['rok']."</a><br>";}
}
else
{ echo 'Brak glosow w bazie';}
echo '<hr>';
$wynik0 = dbquery("SELECT *, MONTH(DATE(FROM_UNIXTIME(rating_datestamp))) AS miesioc
FROM ".DB_RATINGS." WHERE rating_type='P' AND YEAR(DATE(FROM_UNIXTIME(rating_datestamp))) ='".$_GET['rok']."'
GROUP BY miesioc");
if(dbrows($wynik0) > 0) {
$wynik_0 = dbquery("CREATE TEMPORARY TABLE ranking
(
photo_id mediumint(8),
album_id mediumint(8),
photo_title varchar(100),
photo_thumb1 varchar(100),
ile int(10),
srednia int(10),
rok int(5),
miesioc int(3)
)");
while($r = dbarray($wynik0))
{
echo "<table border='0' class='small' align='center'>
<tr>
<td colspan='2' align='center'><b>Miesiac ".$miesiace[$r['miesioc']]."</b></td>
</tr>";
$wynik01 = dbquery("
SELECT tp.photo_id as photo_id, tp.album_id as album_id, tp.photo_title as photo_title, tp.photo_thumb1 as photo_thumb1, (SELECT COUNT(rating_id) FROM ".DB_RATINGS." c
WHERE c.rating_type='P' AND (c.rating_item_id = tp.photo_id) AND YEAR(DATE(FROM_UNIXTIME(rating_datestamp))) ='".$_GET['rok']."' AND
MONTH(DATE(FROM_UNIXTIME(rating_datestamp))) = '".$r['miesioc']."') AS ile,
(SELECT ROUND(AVG(rating_vote), 2) FROM ".DB_RATINGS." c
WHERE c.rating_type='P' AND (c.rating_item_id = tp.photo_id) AND YEAR(DATE(FROM_UNIXTIME(rating_datestamp))) ='".$_GET['rok']."' AND
MONTH(DATE(FROM_UNIXTIME(rating_datestamp))) = '".$r['miesioc']."') AS srednia
FROM ".DB_PHOTOS." tp LEFT JOIN ".DB_PHOTO_ALBUMS." ta USING(album_id)
WHERE album_access=0 ORDER BY srednia DESC
;");
while ($data_tmp = dbarray($wynik01))
{
if (($data_tmp['ile']!=0)&&($data_tmp['srednia']!=0)){
$srednia=$data_tmp['ile']*$data_tmp['srednia'];
dbquery("INSERT INTO ranking (photo_id, album_id, photo_title, photo_thumb1, ile, srednia, rok, miesioc) VALUES ('".$data_tmp['photo_id']."','".$data_tmp['album_id']."','".$data_tmp['photo_title']."','".$data_tmp['photo_thumb1']."','".$data_tmp['ile']."','".$srednia."','".$_GET['rok']."','".$r['miesioc']."')");
}
}
$wynik1 = dbquery("SELECT * from ranking where rok='".$_GET['rok']."' and miesioc='".$r['miesioc']."' ORDER BY srednia DESC LIMIT 1");
$rekordow=dbrows($wynik1);
if($rekordow > 0)
{
$data = dbarray($wynik1);
$randphotodir = PHOTOS.(!@ini_get("safe_mode") ? "album_".$data['album_id']."/" : "");
echo "
<tr>
<td rowspan='2' class='small'><a href='".BASEDIR."photogallery.php?photo_id=".$data['photo_id']."' class='gallery'>
<img src='".$randphotodir.$data['photo_thumb1']."' title='".$data['photo_title']."' alt='".$data['photo_title']."' border='0' /></a></td>
<td class='small'>Średnia: <b>".number_format(round($data['srednia']/$data['ile'],2),2,'.','')."</b></td>
</tr>
<tr>
<td class='small'>Ocen: <b>".number_format($data['ile'])."</b></td>
</tr>
";
echo '</table>';
echo '<hr>';
}
dbquery("TRUNCATE TABLE ranking");
}
dbquery("DROP TABLE ranking");
} else { echo 'Brak glosow w tym roku';}
closetable();
require_once THEMES."templates/footer.php";
?>
Wydaje się działać poprawnie.
Prosiłbym o ew. uwagi, poprawki/modyfikacje związane z optymalizacją ww
PW od moderatora:
- Odświeżenie Tematu - Pieka 12.07 - 12:01
Edytowane przez Mustava dnia 12.07.2011 10:39:13
|
|
|