Skocz do zawartości

złożony warunek + dziwny problem


Rekomendowane odpowiedzi

Witam.

Rozbudowałem warunek do sortowania wpisów w podkategorii przy włączonej funkcji umieszczania wyżej wpisów z linkiem zwrotnym.

Mam z nim jednak mały problem ponieważ nie zachowuje się tak jak powinien.

Warunek podstawowy to :

if ($cfg[link_sor]==1) $sortuj = "w.link_zwrotny desc, ";

Kod sortowania:

$zap = mysql_query("select * from ".$prefix."relacje r, ".$prefix."wpisy w where r.id_kat='$pod[id_kat]' AND r.id_pod='$_GET[id]' AND w.id=r.id_wpi AND w.akt=1 order by ".$sortuj." w.data desc w.pr desc limit $min,$po_ile");

Chciałem aby wykluczane w sortowania były wpisy które usuneły link zwrotny, więc zmodyfikowałem trochę ten warunek:

if ($cfg[link_sor]==1) { if (link_zwrotny($item[link_zwrotny])==1) $sortuj = "w.link_zwrotny desc, ";}

Czyli to brzmi tak: Jeżeli funkja włączona to, jeżeli link zwrotny jest aktywny to sortuj według kolumny "link_zwrotny" a następnie wg. "data" i "pr", a jeżeli oba nie są spełnione to sortuj wg. daty i pr malejąco. Efekt powinien być taki że ustawia wyżej grupę wpisów z "l_z" a poniżej grupę wpisów bez "l_z" i sortuje te grupy według dat.

Tak przynajmniej mi się wydaje ze powinno wyglądać.

Jednak nie działa to jak bym chciał. Efekt jest taki że sortuje tylko po dacie.

Poniższy warunek jest napewno dobrze napisany

if (link_zwrotny($item[link_zwrotny])==1)

jest napewno dobrze napisany ponieważ bazuje na nim inny kod który działa bez problemów.

Nie wiem czy myle kolejność sortowania czy popełniam jakiś inny błąd.

Naprowadzcie mnie proszę bo dostaje już wariacji.

Jeżeli ktoś chciałby wiedzieć jak chciałbym aby wpisy były sortowane to daje wyjaśniam ze u góry katalogu i podkatalogu mają być wpisy z linkiem zwrotnym, poniżej tej grupy pozostałe wpisy. Poza tym obie grupy musza być sortowane według dat dodania do katalogu.

Proszę o wspomożenie w tym małym acz denerwującym problemie.

Edytowane przez Szymon80
Odnośnik do komentarza
Udostępnij na innych stronach

if (link_zwrotny($item[link_zwrotny])==1)

Sprawdź czy podany warunek jest wykonywany. Podaj w którym miejscu go zamieściłeś. Samo zapytanie sql jest ok, możesz to sprawdzić w phpMyAdminie podstawiając za zmienne prawidłowe wartości.

demo_miniacz_468x60.gif

Polecam projektowanie stron Łódź, oraz moderowany, podrasowany katalog, w którym znajdziesz dobre polskie strony, o niebagatelnej treści.

Odnośnik do komentarza
Udostępnij na innych stronach

if ($cfg[link_sor]==1) { if (link_zwrotny($item[link_zwrotny])==1) $sortuj = "w.link_zwrotny desc, ";}

Chyba niezbyt dokładnie przeczytałem posta. To rzeczywiście nie ma prawa zadziałać zgodnie z twoimi oczekiwaniami. Zauważ, że funkcja link_zwrotny() sprawdza obecność linka zwrotnego dla danego wpisu. Ten fragment kodu wykonuje się przed wysłaniem zapytania do bazy. Klauzula ORDER BY nie może się cyklicznie zmieniać, bo chyba to chciałeś tu osiągnąć? Prześledź dokładniej kod i zastanów się jaką wartość przyjmie zmienna $item[link_zwrotny], skoro będzie ona dopiero pobrana po wykonaniu się polecenia.

Poza tym podejście do problemu nie jest optymalne. Możesz nieźle zajechać serwer, jeżeli przy każdym wejściu na stronę z podkategoriami będzie "zasysać" się treść każdej napotkanej w podkategorii strony z wpisu, a następnie dla tak zassanej treści będzie sprawdzana obecność linku zwrotnego (mniej więcej tak działa funkcja link_zwrotny() ).

Według mnie lepszym rozwiązaniem będzie przygotowanie skryptu sprawdzającego linki zwrotne dla tych wpisów katalogu, które deklarują obecność takowego linku (nie ma sensu mielić całej tabeli) i wrzucenie tego do crona, a wyniki zapisać (zaktualizować) w tabeli w bazie danych. Jednakże w przypadku błędnego zadziałania skryptu (przyczyn może być wiele), niechcący pozbawisz kogoś wyższej pozycji w katalogu.

Ja sprawę rozwiązałem w prosty sposób - w panelu admina mam osobne filtrowanie wpisów z linkami. Dzięki temu widzę tylko wpisy z podanymi linkami zwrotnymi (a dokładniej - wpisami, które w bazie danych zostały zapisane jako posiadające link zwrotny) i po wzrokowo sprawdzam (odpowiednie ikonki przy wpisach), czy funkcja wykryła link zwrotny na takiej stronie, czy nie. Jeżeli nie wykryła, sprawdzam ręcznie taką stronę, i jeżeli rzeczywiście link został zdjęty, wtedy strona wylatuje, bądź zapisuję ją jako nieposiadającą linka zwrotnego. Jak zapisze się ją jako nieposiadającą linka zwrotnego, to od w katalogu już automatycznie spadnie na dalszą pozycję. Taki przegląd wystarczy zrobić co jakiś czas.

Działanie możesz sprawdzić na demo.melma.pl, w panelu admina.

P.S. Gdyby moje wypociny były niezrozumiałe, to winą obarcz godzinę, o której pisałem posta :-)

Edytowane przez Melma

demo_miniacz_468x60.gif

Polecam projektowanie stron Łódź, oraz moderowany, podrasowany katalog, w którym znajdziesz dobre polskie strony, o niebagatelnej treści.

Odnośnik do komentarza
Udostępnij na innych stronach

Dzięki Melma za tak obszerną odpowiedź. Jednak dałem sobie spokuj z tym bajerkiem.

Jest jednak inny problem i to poważniejszy z tym skryptem. Nie wiem czy u ciebie równiż występuje ale u mnie i u wielu innych właścicieli miniacza tak.

chodzi o sprawdzanie pagerank. Coś google zieniło i nie da sie pobrać pr dla wpisów.

Napisz czy u ciebie również występuje ten problem i ewentualnie jak go naprawić.

Pozdro.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
 Udostępnij

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności