Goodie: Kontextbezogene Bild- und Dateiauswahl

Fragen zur Implementierung und/oder Anpassung von ConPresso 4 werden in diesem Forum diskutiert.
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7110
Registriert: 01.01.1970 02:00
Hat sich bedankt: 102 Mal
Danksagung erhalten: 916 Mal

Goodie: Kontextbezogene Bild- und Dateiauswahl

Beitrag von MarkusR »

Im Kundenauftrag für www.gomasa.nl enstanden als Ergänzung zu mod_text, nun freigegeben für die Community:

Wer schon in wirklich großen Webauftritten gearbeitet hat, der weiß, wie ätzend die Bild- oder Dateiauswahl sein kann, wenn da erst mal ein paar Hundert zur Wahl stehen. Klar kann man durch Rubrikenzuordnung schon etwas Ordung erreichen, durch die mittlerweile entsorgte ID kommt man immerhin durch die Anfangsbuchstaben ans Ziel, aber Spaß macht das noch immer nicht und immer wieder werden falsche Dateien gewählt (Vorsicht mit Scrollmäusen!), was bei sensiblen oder personenbezogenen Daten schnell richtig Probleme geben kann.

Was tun?
In diesem Fall wird
1.) ein beliebig benanntes Textfeld benötigt, das als Refernez dienen soll, also z.B. eine Personalnummer, einen Namen, eine Eigenschaft etc.
2.) ein paar kleine Änderungen in den Platzhalter-Dateien durchgeführt
3.) diesen File/Image-Platzhaltern dann das Feld mitgeteilt, auf das sie sich beziehen sollen (siehe 1) und dann die Art des Suchmusters (Anfang, Ende oder irgendwo im Dateinamen. Alle Datei/Bild-Auswahlen ohne Zuordnung funktionieren wie bisher und es lassen sich beliebige viele Zuordnungen in einem Template realisieren. Cool 8)

Das Ganze wird Bestandteil der neuen mod_text-Ausgabe, kann aber mit wenigen Handgriffen auch als Standalone betrieben werden.

Im folgenden Post die Einbauanleitung für ConPresso 4.1.x
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7110
Registriert: 01.01.1970 02:00
Hat sich bedankt: 102 Mal
Danksagung erhalten: 916 Mal

Beitrag von MarkusR »

Einbauanleitung für ConPresso 4.1.x

Code: Alles auswählen

=== OPEN / ÖFFNE ===

_admin/manage_placeholders.php

=== FIND / FINDE ===

default:

=== BEFORE ADD / DAVOR EINFÜGEN ===

// file_filter {{{
case 'file':
case 'image':
    print('<tr><td>'.__('Description:').'</td><td>');
    print('<input name="placeholder[label]" type="text" value="'.htmlspecialchars($placeholder['label']).'" class="inputwidth">'.help('templates-workonarticletemplates.html#templates-workonarticletemplates-editplaceholder-settings-description').'</td></tr>');
    print('<tr><td>'.__('Related to:').'</td><td>');
    print('<input name="placeholder[relation]" type="text" value="'.htmlspecialchars($placeholder['relation']).'"> ');
    print('&nbsp; &nbsp;'.__('Pattern:').' ');
    print('<input name="placeholder[pattern]" type="text" value="'.htmlspecialchars($placeholder['pattern']).'"></td></tr>');
    break;
// }}}

=== SAVE AND UPLOAD / SPEICHERN UND HOCHLADEN ===

Code: Alles auswählen

=== OPEN / ÖFFNE ===

_include/form_fields.inc.php

=== FIND ALL / FINDE ALLE ===

."ORDER BY datei";

=== EACH BEFORE ADD / BEI JEDEM DAVOR EINFÜGEN ===

.((isset($value['relation']) && isset($value['pattern']) && trim($value['relation'])!='') ? "AND datei LIKE '".str_replace('###',$content[trim($value['relation']).' (text)']['text'],$value['pattern'])."' " : '') // file_filter

=== SAVE AND UPLOAD / SPEICHERN UND HOCHLADEN ===
Bitte beachten, daß die letzte Such- und Einfüge-Aktion zweimal(!) durchgeführt wird, weil dies auch zweimal vorkommt, weil es für Bilder UND Dateien genutzt wird!
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7110
Registriert: 01.01.1970 02:00
Hat sich bedankt: 102 Mal
Danksagung erhalten: 916 Mal

Beitrag von MarkusR »

Hier nun die praktische Anwendung:

1.) Refernzfeld neu anlegen oder aussuchen (eines der vorhandenen Textfelder)
2.) Alle Datei/Bild-Platzhalter mit dem Namen des Refernzfeldes und dem Suchmuster ergänzen. Syntax für das Suchmuster wir bei mod_fature_search:
###% => Dateiname beginnt mit dem Suchbegriff
%###% 0 => Dateiname enthält den Suchbegriff
%### => Dateiname endet mit dem Suchbegriff (praktisch für Dateiendungen)
3.) Bei der Artikelerfassung den Filterbegriff ins Referenzfeld eingeben (wenn nicht schon vorhanden), dann Artikel speichern und erneut aufrufen. Jetzt enthalten die bearbeiteten Date/Bild-Auswahlen nur noch die gefilterten Dateien. Durch Löschen des Inhaltes des Refernzfeldes können jederzeit wieder alle angezeigt werden.

Und nun das Ganze als Bildergeschichte:
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7110
Registriert: 01.01.1970 02:00
Hat sich bedankt: 102 Mal
Danksagung erhalten: 916 Mal

Beitrag von MarkusR »

Worauf sollte man achten?

1.) Man braucht eben ein Referenzfeld!
Personalnummern, Artikelnummern oder Namen, die sich nicht ändern sind da ganz praktisch und man kann den Begriff einfach im Feld stehen lassen. Hat man keinen so festen Bezug, dann kann man es eher als Filter ansehen, aber das ist die schlechtere Idee (s.u.).

2.) Man muss bei der Datei/Bildbenennung sehr konsequent sein und diesen jeweiligen Referenzbegriff verwenden, aber das tun die meisten ohnehin, um den Überblick zu bewahren.

3.) nun wird's gefährlich!
Es kann folgendes schiefgehen: Wenn man nun in einem oder mehreren referenzierten Datei/Bildfeldern schon Dateien gewählt hat und nun einen Begriff wählt, auf den diese NICHT passen, dann wird beim nächsten Aufruf statt des eigentlich gewälten Bildes "kein" angezeigt. Wenn man JETZT SPEICHERT, dann ist die ursprüngliche Auswahl verloren! Es ist also eher etwas für konsequent arbeitende Redakteure.

Weiterführendes:
Wer lange genug nachdenkt und den Code betrachtet erkennt schnell, daß sich da noch ganz andere Dinge mit machen lassen.
in meinem Beispiel gibt es neben den passend benannten Bildern noch Platzhalter-Bilder, die benutzt werden, solange kein richtiges Bild vorliegt. Diese tragen natürlich keinen referenzierbaren Namen, sondern beginnen alle mit "-PH" (wie PlatzHalter und stehen durch das "-" immer ganz vorne).
Mit folgendem Suchmuster erreiche ich eine ODER-Verknüpfung:
%###%' OR datei LIKE '-PH%
listet mir die gewünschten Bilder UND die Platzhalterbilder

Weitere Begiffe/Suchmuster:
[.pdf] mit [%###] listet nur Dateien mit einer bestimmten Endung, z.B. PDF
[Begriff] mit [%###%.pdf] listet nur die PDF-Dateien mit dem Begriff im Dateinamen

Denkt Euch was dazu aus! :wink:
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7110
Registriert: 01.01.1970 02:00
Hat sich bedankt: 102 Mal
Danksagung erhalten: 916 Mal

Beitrag von MarkusR »

Hier noch die
Einbauanleitung für ConPresso 4.0.x

Code: Alles auswählen

=== OPEN / ÖFFNE === 

_admin/manage_placeholder.php  (ConPresso bis 4.0.6) oder
_admin/manage_placeholders.php  (ConPresso 4.0.7 bis 4.0.12)

=== FIND / FINDE === 

case 'url': 

=== BEFORE ADD / DAVOR EINFÜGEN === 

// file_filter {{{
case 'file':
case 'image':
    print('<tr><td>'.__('Related to:').'</td><td>');
    print('<input name="placeholder[relation]" type="text" value="'.htmlspecialchars($placeholder['relation']).'"> ');
    print('&nbsp; &nbsp;'.__('Pattern:').' ');
    print('<input name="placeholder[pattern]" type="text" value="'.htmlspecialchars($placeholder['pattern']).'"></td></tr>');
    break;
// }}}

=== SAVE AND UPLOAD / SPEICHERN UND HOCHLADEN ===

Code: Alles auswählen

=== OPEN / ÖFFNE === 

_include/form_fields.inc.php 

=== FIND ALL / FINDE ALLE === 

."ORDER BY datei"; 

=== EACH BEFORE ADD / BEI JEDEM DAVOR EINFÜGEN === 

.((isset($value['relation']) && isset($value['pattern']) && trim($value['relation'])!='') ? "AND datei LIKE '".str_replace('###',$content[trim($value['relation']).' (text)']['text'],$value['pattern'])."' " : '') // file_filter
 
=== SAVE AND UPLOAD / SPEICHERN UND HOCHLADEN ===
Auch hier wird der letzte Finde/Einfüge Prozess zweimal(!) ausgeführt!
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle