Bilder sortieren, die 2. Bilder sortieren, die 2.
 

News:

CPG Release 1.6.26
Correct PHP8.2 issues with user and language managers.
Additional fixes for PHP 8.2
Correct PHP8 error with SMF 2.0 bridge.
Correct IPTC supplimental category parsing.
Download and info HERE

Main Menu

Bilder sortieren, die 2.

Started by Starlight, June 23, 2010, 05:30:17 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Starlight

Hallo,

tut mir Leid, dass ich euch damit nochmal auf den Wecker falle.

Hier steht eigentlich schon alles drin, was ich gern möchte, nur halt in der vorigen Version.
http://forum.coppermine-gallery.net/index.php/topic,59204.0.html

Dies hier hatte damals ganz wunderbar funktioniert. Nur in 1.5.6 ist ja alles etwas anders und da finde ich mich nicht mehr im Code zurecht. Kann mir da jemand vielleicht nochmal einen kleinen Schubs geben, wo ich schauen muss?

http://starlights-graphics.de/gallery/index.php

Αndré

Woran genau hapert es? Die Vorgehensweise ist identisch.

Starlight

#2
Echt? Dann bin ich ja noch dämlicher als erwartet...? ^^ Ich finde die entsprechenden Codestellen einfach nicht...? Ich such nochmal und wenn ich wieder scheitere, melde ich mich nochmal. ;)

Danke fürs (umsonst?) reinschauen.

EDIT: Ja, es hat tatsächlich geklappt. :) Die Codestellen sind nun anders strukturiert, von den Absätzen her, dehalb hab ich sie per copy & paste Suche nicht gefunden.

Danke nochmal und Entschuldigung für den unnötigen Thread. ;)

EDIT 2: Nein, leider doch nicht. :( Vielleicht hab ich auch die falsche Stelle erwischt..?
Wenn ich es (so wie ich dachte, richtig) verändere, passiert folgendes: ich sehe mir ein Bild an, klicke dann im Filmstreifen auf ein anderes Bild, aber angezeigt wird mir dann wiederrum ein ganz anderes...  ???

André, wenn du demnächst etwas Zeit hättest, könntest du dich der Sache vielleicht kurz annehmen?
Ich hatte da mehrere Codestellen, die für mich gleich aussehen... :(

Αndré

Quote from: Starlight on June 23, 2010, 11:23:29 PM
Ich hatte da mehrere Codestellen
Richtig. Eine befindet sich in der Funktion get_pic_data und eine in der Funktion get_pic_pos. Du musst beide Passagen entsprechend anpassen, damit es funktioniert. Sorry, daran hatte ich anfangs nicht gedacht :)

Starlight

Okay, danke. Ich habe es echt versucht aber ich hab anscheinend Probleme, da einen sinnvollen Zusammenhang rauszulesen.  ::)
Verändert habe ich bei diesem Versuch die Zeilen 1273, 1274, 1483, 2021, 2022. Und das muss definitiv falsch gewesen sein. *schüchternguck* Ich weiß nicht weiter...

Αndré

Quote from: Starlight on June 24, 2010, 10:35:34 AM
Verändert habe die Zeilen 1273, 1274, 1483, 2021, 2022

Du musst folgende Zeilen anpassen:
Code (Zeile 1273-1274) Select
            'da' => "pid $ASC",
            'dd' => "pid $DESC",

Code (Zeile 1483) Select
                ORDER BY r.pid $DESC $limit";
und
Code (Zeile 2146) Select
            AND pid > $pid";

Für Zeile 2146 ist das nicht ganz trivial. Sieh dir dafür am besten das Meta-Album "topn" an:
    case 'topn': // Most viewed files

        $query = "SELECT hits FROM {$CONFIG['TABLE_PICTURES']} WHERE pid = $pid";
        $result = cpg_db_query($query);
        $hits = mysql_result($result, 0);
        mysql_free_result($result);

        $query = "SELECT COUNT(*) FROM {$CONFIG['TABLE_PICTURES']} AS p
            INNER JOIN {$CONFIG['TABLE_ALBUMS']} AS r ON r.aid = p.aid
            $RESTRICTEDWHERE
            AND approved = 'YES'
            AND (hits > $hits
            OR hits = $hits AND pid < $pid)";

            $result = cpg_db_query($query);

            list($pos) = mysql_fetch_row($result);
            mysql_free_result($result);

        return $pos;
        break;


Ersetz am besten den ganzen Block "lastup" durch:
    case 'lastup': // Latest (most recent) uploads

        $query = "SELECT ctime FROM {$CONFIG['TABLE_PICTURES']} WHERE pid = $pid";
        $result = cpg_db_query($query);
        $ctime = mysql_result($result, 0);
        mysql_free_result($result);

        $query = "SELECT COUNT(*) FROM {$CONFIG['TABLE_PICTURES']} AS p
            INNER JOIN {$CONFIG['TABLE_ALBUMS']} AS r ON r.aid = p.aid
            $RESTRICTEDWHERE
            AND approved = 'YES'
            AND (ctime > $ctime
            OR ctime = $ctime AND pid < $pid)";

            $result = cpg_db_query($query);

            list($pos) = mysql_fetch_row($result);
            mysql_free_result($result);

        return $pos;
        break;

(nicht getestet!)


Je nachdem wie deine Modifikationen aussehen, können die Codeänderungen auch anders aussehen. Das ist hier bisher alles wilde Raterei. Am besten  zeigst du mal genau, was du geändert hast (in der Form "Suche abc und ersetze es mit xyz"). Dann kann ich dir auch gezielt helfen.

Starlight

Okay. Die Zeilen 1273 und 1274 habe ich so verändert:

'da' => "pid $ASC",
            'dd' => "pid $DESC",


ersetzt durch:

'da' => "ctime $ASC",
            'dd' => "ctime $DESC",


Zeile 1483

ORDER BY r.pid $DESC $limit";

ersetzt durch

     ORDER BY r.ctime $DESC $limit";

Zeilen 2021 und 2022

'da' => 'pid <',
        'dd' => 'pid >',


ersetzt durch

'da' => 'ctime <',
        'dd' => 'ctime >',


Aber da war ich wohl einfach falsch gelandet. :D

Das Problem ist bei mir, das ich immer nicht ganz mitkriege, wo ein Block anfängt und wo er aufhört.  :-\ Wenn du also sagst, ich soll den Block ersetzen, weiß ich nicht genau, was alles... *schäm*

Danke für deine Mühe!

Αndré

Quote from: Starlight on June 24, 2010, 01:00:44 PM
Das Problem ist bei mir, das ich immer nicht ganz mitkriege, wo ein Block anfängt und wo er aufhört
In dem Fall alles zwischen case und break;

Die Zeilen 2021 und 2022 solltest du übrigens nicht ändern.

Außerdem solltest du bedenken, dass mehrere Dateien den gleichen Wert bei ctime haben können. Hier bekommst du unter Umständen Probleme beim sortieren. Deshalb musst du anstatt z.B.
'dd' => "ctime $DESC",
folgendes schreiben:
'dd' => "ctime $DESC, pid $ASC",

Starlight

Wenn ich das so mache, lande ich wieder auf ganz anderen Bildern... Was hab ich denn falsch gemacht? irgendwie will es nicht...

Αndré

#9
Versuch doch bitte die Änderungen nachzuvollziehen, die ich dir zu erklären versuche. Du kannst nicht einfach Teile der einen Funktion in eine Andere kopieren und erwarten, dass es funktioniert.


Hier hast du eine Schritt für Schrittanleitung.

Ersetze
               ORDER BY r.pid $DESC $limit";
durch
               ORDER BY r.ctime $DESC, r.pid $DESC $limit";

Ersetze
   case 'lastup': // Latest (most recent) uploads

       $query = "SELECT COUNT(*) FROM {$CONFIG['TABLE_PICTURES']} AS p
           INNER JOIN {$CONFIG['TABLE_ALBUMS']} AS r ON r.aid = p.aid
           $RESTRICTEDWHERE
           AND approved = 'YES'
           AND pid > $pid";

           $result = cpg_db_query($query);

           list($pos) = mysql_fetch_row($result);
           mysql_free_result($result);

       return $pos;
       break;

durch
   case 'lastup': // Latest (most recent) uploads

       $query = "SELECT ctime FROM {$CONFIG['TABLE_PICTURES']} WHERE pid = $pid";
       $result = cpg_db_query($query);
       $ctime = mysql_result($result, 0);
       mysql_free_result($result);

       $query = "SELECT COUNT(*) FROM {$CONFIG['TABLE_PICTURES']} AS p
           INNER JOIN {$CONFIG['TABLE_ALBUMS']} AS r ON r.aid = p.aid
           $RESTRICTEDWHERE
           AND approved = 'YES'
           AND (ctime > $ctime
           OR ctime = $ctime AND pid > $pid)";

           $result = cpg_db_query($query);

           list($pos) = mysql_fetch_row($result);
           mysql_free_result($result);

       return $pos;
       break;


Damit sollte dein Meta-Album "lastup" nach deinen Wünschen funktionieren. Bitte bestätige dies, falls das so ist.

Starlight

Entschuldige, ich versuche ganz, ganz wirklich, das nachzuvollziehen... (Das mit der Konzentration ist gesundheitlich bedingt, dehalb großes Sorry!)

Oh, das war natürlich nicht beabsichtigt, dass ich da was falsches reinkopiert hab. Da hab ich falsch geguckt.

Ja, lastup stimmt schon, aber die Thumbnails und Bilder stimmen dann trotzdem nicht überein. Wenn du mal schauen magst.
http://starlights-graphics.de/gallery/index.php

Hab ich da doch noch was übersehen (Tut mir echt Leid, ich kann nervig sein, wenn es um sowas geht.  ::))?

Αndré

Du solltest erstmal deine ganzen anderen Änderungen von vorher Rückgängig machen (sprich: besorg dir eine frische functions.inc.php-Datei). Danach ersetzt du bitte den ganzen Code und nicht nur Schnipsel davon ::)

Auf den ersten Blick sehe ich, dass z.B. dieser Teil fehlt:
        return $pos;
        break;

Starlight

#12
Danke für deine Geduld. Ich hätte an deiner Stelle schon öfter mit den Augen gerollt. ;)

Ja, ich hab es nun richtig bearbeitet. lastup funktioniert. Dennoch werden die Bilder in ihrem eigenen Album noch an vorderster Stelle angezeigt. das wollte ich ja auch gern noch ändern, so wie in der Vorgänger-Version.

Beispiel: http://starlights-graphics.de/gallery/thumbnails.php?album=62

EDIT: versucht habe ich es mit dem Anpassen von 'da' => "ctime $ASC",
            'dd' => "ctime $DESC, pid $ASC",


Das hatte ja letztes mal auch dadurch geklappt. Aber hier nicht.

Starlight

#13
EDIT 2: Hmm, ist das denn möglich oder geht das bei 1.5.x nicht? Wäre sehr schade.

Joachim Müller

Was soll nicht möglich sein?

Αndré

Ersetze
            'da' => "pid $ASC",
            'dd' => "pid $DESC",

durch
            'da' => "ctime $ASC, pid $ASC",
            'dd' => "ctime $DESC, pid $DESC",


und
        'da' => 'pid <',
        'dd' => 'pid >',

durch
        //'da' => 'pid <',
        //'dd' => 'pid >',

Αndré

Quote from: Joachim Müller on June 25, 2010, 07:47:10 AM
Was soll nicht möglich sein?
Durch das wilde rumeditieren ist die ursprüngliche Frage evtl. verloren gegangen. Gemeint war die Reihenfolge in regulären Alben:
Quote from: Starlight on June 24, 2010, 03:53:55 PM
Dennoch werden die Bilder in ihrem eigenen Album noch an vorderster Stelle angezeigt. das wollte ich ja auch gern noch ändern, so wie in der Vorgänger-Version.

Joachim Müller

@Starlight: höre sofort damit auf, Deine Beiträge zu bearbeiten!

Starlight

Ein riesengroßes Dankeschön an André. Ich weiß deine Geduld zu schätzen. :) Es hat alles geklappt (was du dir sicher schon dachtest; ich war halt anfangs nur zu blöd, es richtig zu machen. ;))

Joachim: Danke für... ähm... den Befehlston...? (Im Ernst, André ist gut durchgestiegen. Wozu gibt es die Editierfunktion sonst? Ich hatte hier etwas ganz falsches gepostet, was eigentlich in eine ganz andere Community gehörte. Sollte ich das zur vollständigen Verwirrung hier stehen lassen? Oder noch dreimal doppelt posten? Ehrlich, ich weiß, dass es für euch hier massig zu tun gibt und ihr das in eurer Freizeit macht, und bin daher auch mit den knappsten Antworten voll einverstanden. Aber ein Bitte hier und da würde echt nicht schaden.)

Joachim Müller

#19
Quote from: Starlight on June 25, 2010, 11:18:01 AMWozu gibt es die Editierfunktion sonst?
Es gibt sie nicht mehr für Dich. Du hast Deine Privilegien mißbraucht, deswegen habe ich sie wieder entfernt. Ich habe keine Lust, Moderationspolitik mit Dir zu diskutieren; wenn Du wissen möchtest, warum normale Benutzer keine Editierfunktion haben darfst Du gerne die vergangenen Diskussionen zu dem Thema nachschlagen; es gibt viele davon. Du warst kein normaler Benutzer, sondern hattest erhöhte Privilegien als Dankeschön für das Zurverfügungstellen eines Themes in der Vergangenheit und um Dir zu ermöglichen, den Ankündigungsbeitrag zu Deinem Theme in Schuß zu halten. Die erhöhten Privilegien sollten auf gar keinen Fall dazu genutzt werden, Support-Anfragen in Unordnung zu bringen und erhöhten Moderationsaufwand zu erzeugen. Daher - wie erwähnt - die Entfernung Deiner zusätzlichen Privilegien.
Was Du als "Befehlston" ansiehst ist einfach nur eine kurze und knappe Moderation gewesen. Du hast jetzt von mir eine ausführliche Antwort erhalten. Ich hoffe, das macht Dich glücklich. Viel Spaß.