forum.coppermine-gallery.net

Support => Deutsch (German) => Language Specific Support => cpg1.5.x Deutsch (German) => Topic started by: ralf45_nrw on August 28, 2013, 01:04:36 pm

Title: mehr profilfelder
Post by: ralf45_nrw on August 28, 2013, 01:04:36 pm
hallo,


ich bräuchte noch ein paar profil felder mehr. gibt es da ein plugin für.
oder eine anleitung wie man zusätliche profilfelder einbaut.
brauche felder mit eingabe, textblock, checkbox.

gruss ralf
Title: Re: mehr profilfelder
Post by: Αndré on August 28, 2013, 01:24:40 pm
Ein Plugin für genau diesen Zweck gibt es nicht. Soweit ich weiß, fügt das Plugin "cpgShop" neue Profilfelder hinzu, jedoch lässt der Name schon vermuten, dass der eigentliche Zweck des Plugins ein ganz anderer ist. Evtl. kann man das Plugin entsprechend kastrieren. Ich bin mir gerade auch nicht sicher, ob es hier im Forum schon entsprechende Mods gibt. Im Zweifelsfall musst du bei 0 starten, sollte jedoch nicht all zu schwer sein (Datenbank, Backend und Frontends erweitern).
Title: Re: mehr profilfelder
Post by: ralf45_nrw on August 28, 2013, 02:32:17 pm
hi,

schade das es kein plugin dafür gibt.

gibt es den irgend wo eine anleitung, den meine php kentnisse werden dafür nicht ausreichen.
benötiege noch 34 zusäzliche felder.

18 felder, immer 1 feld mit 3 checkboxen zur auswahl (nur 1 makierbar) aber die anzeige im profil soll eine grafik oder nur eine farbe sein grün, rot, gelb (z.b) die als hintergund in einer tabelle oder div container darstellt. oder vor einer zeile eine grafik mit einem grünen haken, gelber punkt und rotes kreuz.

13 felder nur mit einzeiliger text eingabe

1 feld für textblock

2 felder wo man je ein bilder hochladen kann das eine bestimmte größe hat.

den das profi ist sehr wichtig für meine umsetzung.

gruss ralf



Title: Re: mehr profilfelder
Post by: Αndré on August 28, 2013, 02:39:50 pm
3 checkboxen zur auswahl (nur 1 makierbar)
Das ist dann ein Radio-Button, keine Checkbox.

Die Anzeige im Profil ist meiner Meinung nach erstmal egal, da wir die Werte überhaupt erstmal eingeben und speichern müssen, bevor wir sie irgendwo anzeigen.

In Coppermine gibt es 2 Arten Benutzer anzulegen. Entweder der Admin erledigt das, oder die Benutzer registrieren sich selbst. Welche Variante(n) ist/sind bei dir vorgesehen? Sollen diese Angaben überhaupt schon beim anlegen/registrieren eingefügt werden, oder reicht es auch, wenn die Nutzer ihr Profil später vervollständigen? Dann können wir uns ggf. sparen alles davon anpassen zu müssen.

2 felder wo man je ein bilder hochladen kann das eine bestimmte größe hat.
Sollte möglich sein, ein paar genauere Angaben wären aber hilfreich. Bilder in der falschen Größe (damit meinst du die Abmessungen, nicht die Dateigröße, oder?) werden generell abgelehnt?
Title: Re: mehr profilfelder
Post by: ralf45_nrw on August 28, 2013, 02:55:46 pm
hi,

1. richtig radi-button

2.der user soll später nach der anmeldung sein profil ausfüllen können.

3. ich meine die abmessung des bildes soll eine bestimmte grösse haben z.b. 1, bild 800x300, 2. bild 300x400

gruss ralf
Title: Re: mehr profilfelder
Post by: ralf45_nrw on August 28, 2013, 03:08:54 pm
hi,

1. richtig radio-button

2.der user soll später nach der anmeldung sein profil ausfüllen können.

3. ich meine die abmessung des bildes soll eine bestimmte grösse haben z.b. 1, bild 800x300, 2. bild 300x400

gruss ralf
Title: Re: mehr profilfelder
Post by: Αndré on August 29, 2013, 04:11:45 pm
Schritt 1: Frontend

Öffne die Datei profile.php und suche nach
Code: [Select]
$edit_profile_form_param[]
Ich denke hier erkennst du schon selbst, wie das Formular zustande kommt. Je nachdem wo du nun deine weiteren Felder haben möchtest, musst du deinen neuen Code entsprechend einfügen. Ich füge die neuen Felder hier exemplarisch einfach mal hinter die benutzerdefinierten Felder ein. D.h. suche nach
Code: [Select]
$edit_profile_form_param[] = array('text', 'disk_usage', cpg_fetch_icon('disk_usage', 2) . $lang_register_php['disk_usage']);und davor kommt dann der neue Code.

Ein Feld für einzeilige Texteingabe sieht z.B. so aus:
Code: [Select]
$edit_profile_form_param[] = array('input', 'custom_input_1', 'Textfeld 1', 255);
für eine mehrzeilige Texteingabe so:
Code: [Select]
$edit_profile_form_param[] = array('textarea', 'custom_area_1', 'Textblock 1', 255);
Für die Radio-Buttons und die Dateiupload-Felder müssen wir erst noch neue Typen in der Funktion make_form definieren. Machen wir später, wenn der Rest soweit funktioniert.


Schritt 2: Backend

Damit Coppermine etwas mit den Erweiterungen anzufangen weiß, suchen wir
Code: [Select]
    $profile6 = $superCage->post->getEscaped('user_profile6');und fügen danach für alle oben hinzugefügten Formularfelder eine ähnliche Zeile ein, z.B.
Code: [Select]
    $custom_input_1 = $superCage->post->getEscaped('custom_input_1');
    $custom_input_2 = $superCage->post->getEscaped('custom_input_2');
    $custom_input_3 = $superCage->post->getEscaped('custom_input_3');
    // usw. bis 13
    $custom_area_1 = $superCage->post->getEscaped('custom_area_1');

Dann suchen wir die Zeile
Code: [Select]
$sql = "UPDATE {$CONFIG['TABLE_USERS']} SET user_profile1 = '$profile1', user_profile2 = '$profile2', user_profile3 = '$profile3', user_profile4 = '$profile4', user_profile5 = '$profile5', user_profile6 = '$profile6'" . (($CONFIG['allow_email_change'] || GALLERY_ADMIN_MODE) && !$error ? ", user_email = '$email'" : "") . " WHERE user_id = '" . USER_ID . "'";und fügen unsere Werte hinzu. Sieht dann in etwa so aus:
Code: [Select]
$sql = "UPDATE {$CONFIG['TABLE_USERS']} SET user_profile1 = '$profile1', user_profile2 = '$profile2', user_profile3 = '$profile3', user_profile4 = '$profile4', user_profile5 = '$profile5', user_profile6 = '$profile6', custom_input_1 = '$custom_input_1', custom_input_2 = '$custom_input_2', custom_input_3 = '$custom_input_3', custom_area_1 = '$custom_area_1'" . (($CONFIG['allow_email_change'] || GALLERY_ADMIN_MODE) && !$error ? ", user_email = '$email'" : "") . " WHERE user_id = '" . USER_ID . "'";(ich habe jetzt nicht alle 13 Felder eingefügt, sondern nur die ersten 3).


Schritt 3: Datenbankfelder hinzufügen

Der bisherige Code würde nur eine Fehlermeldung produzieren, da es die benötigten Felder in der Datenbank noch nicht gibt. Öffne dafür ein Tool wie z.B. phpMyAdmin und füge die Felder mit folgender Abfrage hinzu:
Code: [Select]
ALTER TABLE `cpg15x_users` ADD COLUMN `custom_input_1` VARCHAR(255) NOT NULL default '';
ALTER TABLE `cpg15x_users` ADD COLUMN `custom_input_2` VARCHAR(255) NOT NULL default '';
ALTER TABLE `cpg15x_users` ADD COLUMN `custom_input_3` VARCHAR(255) NOT NULL default '';
-- usw. bis 13
ALTER TABLE `cpg15x_users` ADD COLUMN `custom_area_1` VARCHAR(255) NOT NULL default '';


Schritt 4: Daten im Profilbearbeitungsmodus anzeigen

Suche
Code: [Select]
$sql = "SELECT user_name, user_email, user_group, user_active, UNIX_TIMESTAMP(user_regdate) AS user_regdate, group_name, " . "user_profile1, user_profile2, user_profile3, user_profile4, user_profile5, user_profile6, user_group_list, " . "COUNT(pid) AS pic_count, SUM(total_filesize) AS disk_usage, group_quota " . "FROM {$CONFIG['TABLE_USERS']} AS u " . "INNER JOIN {$CONFIG['TABLE_USERGROUPS']} AS g ON user_group = group_id " . "LEFT JOIN {$CONFIG['TABLE_PICTURES']} AS p ON p.owner_id = u.user_id " . "WHERE user_id ='" . USER_ID . "' " . "GROUP BY user_id ";und ersetze es durch
Code: [Select]
$sql = "SELECT u.*, user_name, user_email, user_group, user_active, UNIX_TIMESTAMP(user_regdate) AS user_regdate, group_name, " . "user_profile1, user_profile2, user_profile3, user_profile4, user_profile5, user_profile6, user_group_list, " . "COUNT(pid) AS pic_count, SUM(total_filesize) AS disk_usage, group_quota " . "FROM {$CONFIG['TABLE_USERS']} AS u " . "INNER JOIN {$CONFIG['TABLE_USERGROUPS']} AS g ON user_group = group_id " . "LEFT JOIN {$CONFIG['TABLE_PICTURES']} AS p ON p.owner_id = u.user_id " . "WHERE user_id ='" . USER_ID . "' " . "GROUP BY user_id ";(durch den Stern (*) wählen wir alle Felder aus, das müssen wir also nicht weiter beachten).

Suche
Code: [Select]
        'user_profile6' => $user_data['user_profile6'],und füge darunter folgendes ein:
Code: [Select]
        'custom_input_1' => $user_data['custom_input_1'],
        'custom_input_2' => $user_data['custom_input_2'],
        'custom_input_3' => $user_data['custom_input_3'],
        // usw. bis 13
        'custom_area_1' => $user_data['custom_area_1'],


Schritt 5: Daten im öffentlichen Profil anzeigen

Suche
Code: [Select]
if ($CONFIG['user_profile6_name'] != '') {
    $display_profile_form_param[] = array('text', 'user_profile6', $CONFIG['user_profile6_name']);
}
unter füge darunter folgendes ein:
Code: [Select]
$display_profile_form_param[] = array('text', 'custom_input_1', 'Textfeld 1');
$display_profile_form_param[] = array('text', 'custom_input_2', 'Textfeld 2');
$display_profile_form_param[] = array('text', 'custom_input_3', 'Textfeld 3');
// usw.
$display_profile_form_param[] = array('text', 'custom_area_1', 'Textblock 1');

Suche
Code: [Select]
'user_profile6' => bb_decode($user_data['user_profile6']),und füge darunter folgendes ein:
Code: [Select]
        'custom_input_1' => $user_data['custom_input_1'],
        'custom_input_2' => $user_data['custom_input_2'],
        'custom_input_3' => $user_data['custom_input_3'],
        // usw. bis 13
        'custom_area_1' => bb_decode($user_data['custom_area_1']),


Das kannst du erstmal abarbeiten und bescheid geben, falls irgendwas nicht wie erwartet funktioniert.
Title: Re: mehr profilfelder
Post by: ralf45_nrw on August 30, 2013, 01:50:32 am
hallo,

werde es heute mal probieren und die sachen einfügen.

danke erst mal ist super.

gruss ralf
Title: Re: mehr profilfelder
Post by: ralf45_nrw on August 30, 2013, 03:42:52 am
hallo,

hat mir keine ruhe gelassen, habe die eintragungen gemacht.
und siehe da 13 felder und ein text feld sind da.

super.

gruss ralf
Title: Re: mehr profilfelder
Post by: Αndré on August 30, 2013, 09:00:41 am
Und es funktioniert auch alles soweit (Daten eintragen, ändern, anzeigen, etc.)?
Title: Re: mehr profilfelder
Post by: ralf45_nrw on August 30, 2013, 11:37:53 am
hi andre,

ja er zeigt die felder an beim profil ändern, wen die felder leer sind werden die nicht angezeigt und wen ich die ausfülle alle 13 oder nur ein paar dann werden die ausgefüllten felder angezeigt. also werden die auch in der db gespeichert.
so weit alles ok.

gruss ralf
Title: Re: mehr profilfelder
Post by: Αndré on August 30, 2013, 11:52:03 am
Ich habe jetzt leider keine Zeit mehr für die Radio-Buttons und die Upload-Felder. Nach dem Wochenende können wir fortfahren.
Title: Re: mehr profilfelder
Post by: Αndré on September 06, 2013, 03:30:30 pm
Die Radiobuttons.

Schritt 0: make_form erweitern

Suche
Code: [Select]
        default:
            cpg_die(CRITICAL_ERROR, 'Invalid action for form creation ' . $element[0], __FILE__, __LINE__);
        }
und füge darüber folgendes ein
Code: [Select]
        case 'radio':

            $value = $form_data[$element[1]];

            if ($element[2]) {

                echo <<< EOT
    <tr>
        <td width="40%" class="{$cellStyle}" height="25" valign="top">
            {$element[2]}
        </td>
        <td width="60%" class="{$cellStyle}" valign="top">
EOT;
                for ($i=1; $i <= $element[3]; $i++) {
                    $checked = $value == $i ? 'checked="checked" ' : '';
                    echo <<< EOT
            <input type="radio" name="{$element[1]}" value="$i" class="radio" $checked/>
EOT;
                }
                echo <<< EOT
        </td>
    </tr>


EOT;
            }

            break;


Schritt 1: Frontend

Füge wie bereits beschrieben in der Nähe der anderen Zeilen mit
Code: [Select]
$edit_profile_form_param[]etwas in folgender Art hinzu
Code: [Select]
$edit_profile_form_param[] = array('radio', 'custom_radio_1', 'Radiobutton 1', 3);
$edit_profile_form_param[] = array('radio', 'custom_radio_2', 'Radiobutton 2', 3);
$edit_profile_form_param[] = array('radio', 'custom_radio_3', 'Radiobutton 3', 3);
// usw. bis 18


Schritt 2: Backend

Damit Coppermine etwas mit den Erweiterungen anzufangen weiß, suchen wir
Code: [Select]
    $profile6 = $superCage->post->getEscaped('user_profile6');und fügen danach für alle oben hinzugefügten Formularfelder eine ähnliche Zeile ein, z.B.
Code: [Select]
    $custom_radio_1 = $superCage->post->getEscaped('custom_radio_1');
    $custom_radio_2 = $superCage->post->getEscaped('custom_radio_2');
    $custom_radio_3 = $superCage->post->getEscaped('custom_radio_3');
    // usw. bis 18

Dann erweiterst du die SQL-Abfrage
Code: [Select]
$sql = "UPDATE {$CONFIG['TABLE_USERS']} SET user_profile1 = '$profile1', .......wie oben beschrieben um die weiteren Werte.

Kombiniert mit meinem obigen Beispiel sieht die Zeile bei mir jetzt so aus:
Code: [Select]
$sql = "UPDATE {$CONFIG['TABLE_USERS']} SET user_profile1 = '$profile1', user_profile2 = '$profile2', user_profile3 = '$profile3', user_profile4 = '$profile4', user_profile5 = '$profile5', user_profile6 = '$profile6', custom_input_1 = '$custom_input_1', custom_input_2 = '$custom_input_2', custom_input_3 = '$custom_input_3', custom_area_1 = '$custom_area_1', custom_radio_1 = '$custom_radio_1', custom_radio_2 = '$custom_radio_2', custom_radio_3 = '$custom_radio_3' " . (($CONFIG['allow_email_change'] || GALLERY_ADMIN_MODE) && !$error ? ", user_email = '$email'" : "") . " WHERE user_id = '" . USER_ID . "'";

Schritt 3: Datenbankfelder hinzufügen

Der bisherige Code würde nur eine Fehlermeldung produzieren, da es die benötigten Felder in der Datenbank noch nicht gibt. Öffne dafür ein Tool wie z.B. phpMyAdmin und füge die Felder mit folgender Abfrage hinzu:
Code: [Select]
ALTER TABLE `cpg15x_users` ADD COLUMN `custom_radio_1` VARCHAR(1) NOT NULL default '';
ALTER TABLE `cpg15x_users` ADD COLUMN `custom_radio_2` VARCHAR(1) NOT NULL default '';
ALTER TABLE `cpg15x_users` ADD COLUMN `custom_radio_3` VARCHAR(1) NOT NULL default '';
-- usw. bis 18


Schritt 4: Daten im Profilbearbeitungsmodus anzeigen

Suche
Code: [Select]
        'user_profile6' => $user_data['user_profile6'],und füge darunter folgendes ein:
Code: [Select]
        'custom_radio_1' => $user_data['custom_radio_1'],
        'custom_radio_2' => $user_data['custom_radio_2'],
        'custom_radio_3' => $user_data['custom_radio_3'],
        // usw. bis 18

Die Datenbankabfrage müssen wir dank des verwendeten Stern (*) nicht weiter anpassen.


Schritt 5: Daten im öffentlichen Profil anzeigen

Suche
Code: [Select]
if ($CONFIG['user_profile6_name'] != '') {
    $display_profile_form_param[] = array('text', 'user_profile6', $CONFIG['user_profile6_name']);
}
unter füge darunter folgendes ein:
Code: [Select]
$display_profile_form_param[] = array('text', 'custom_radio_1', 'Radiobutton 1');
$display_profile_form_param[] = array('text', 'custom_radio_2', 'Radiobutton 2');
$display_profile_form_param[] = array('text', 'custom_radio_3', 'Radiobutton 3');
// usw. bis 18

Suche
Code: [Select]
        'user_profile6' => bb_decode($user_data['user_profile6']),und füge darunter folgendes ein:
Code: [Select]
        'custom_radio_1' => radio_button_color($user_data['custom_radio_1']),
        'custom_radio_2' => radio_button_color($user_data['custom_radio_2']),
        'custom_radio_3' => radio_button_color($user_data['custom_radio_3']),
        // usw. bis 18

Jetzt fügst du vor dem darüberstehenden
Code: [Select]
$form_data = array(noch folgende Funktion hinzu:
Code: [Select]
    function radio_button_color($value) {
        switch($value) {
            case '1': $color = 'red'; break;
            case '2': $color = 'yellow'; break;
            case '3': $color = 'green'; break;
            default: $color = false; break;
        }
        if ($color) {
            return '<div style="width: 16px; height: 16px; background: '.$color.'"></div>';
        } else {
            return $value;
        }
    }

Die Funktion sorgt dafür, anstatt dem Wert eine farbige Box darzustellen.
Title: Re: mehr profilfelder
Post by: ralf45_nrw on September 06, 2013, 06:07:41 pm
hallo Andre,,

Super habe es eben eingebunden und es funktioniert.

habe dazu noch eine frage die anzeige für die fab felder ist:
Code: [Select]
function radio_button_color($value) {
        switch($value) {
            case '1': $color = 'red'; break;
            case '2': $color = 'yellow'; break;
            case '3': $color = 'green'; break;
            default: $color = false; break;
        }
        if ($color) {
            return '<div style="width: 16px; height: 16px; background: '.$color.'"></div>';
        } else {
            return $value;
        }
    }


Die Funktion sorgt dafür, a

wen ich keine farbe möchte sonder kleine icons wie mache ich das ?

habe es versucht mit
Code: [Select]
  case '1': $color = 'img src="themes/neu/images/neina.png"; break;
  case '1': $color = 'img src="themes/neu/images/vie.png"; break;
  case '1': $color = 'img src="themes/neu/images/ja.png"; break;

meine denkweise ist bestimmt falsch.

gruss ralf
Title: Re: mehr profilfelder
Post by: Αndré on September 06, 2013, 07:31:22 pm
Der Ansatz ist prinzipiell richtig. Probier es mal mit
Code: [Select]
        switch($value) {
            case '1': $img = 'neina.png'; break;
            case '2': $img = 'vie.png'; break;
            case '3': $img = 'ja.png'; break;
            default: $img = false; break;
        }
        if ($img) {
            return '<img src="themes/neu/images/'.$img.'" />';
        } else {
            return $value;
        }
Title: Re: mehr profilfelder
Post by: ralf45_nrw on September 06, 2013, 09:08:04 pm
hallo andre,

super so geht es so nimmt er die icons.

mir ist aufgefallen das im profil wen ich es ausfülle er mir die 3 radiobubuttons anzeigt (neben einander) nur weiß man nicht für was die stehen.
es müsste vor dem 1. Nein stehen vor dem 2. vieleicht und vor dem 3. Ja.

da ich ja den Text für die zusätzlichen felder manuell eingeben muss für "Textfeld 1" "Radiobutton 1" bekomme ich für umlaute nur diese schwarze raute angezeigt.
könnte man den text so ersetzen das er die texte aus der german.php nimmt dann könnte man das auch nehmen wen ich deutsch und englisch nutzen möchte. könnte dann die lang bearbeiten.

habe mir die vorhandenen felder angesehen und wen ich bei den neuen den text durch z.b.   $CONFIG['custom_input_1'] ersetze wäre ja zu einfach da muss doch bestimmt noch mehr gemacht werden.

gruss ralf
Title: Re: mehr profilfelder
Post by: Αndré on September 09, 2013, 12:19:17 pm
mir ist aufgefallen das im profil wen ich es ausfülle er mir die 3 radiobubuttons anzeigt (neben einander) nur weiß man nicht für was die stehen.
es müsste vor dem 1. Nein stehen vor dem 2. vieleicht und vor dem 3. Ja.

Suche
Code: [Select]
                for ($i=1; $i <= $element[3]; $i++) {
                    $checked = $value == $i ? 'checked="checked" ' : '';
                    echo <<< EOT
            <input type="radio" name="{$element[1]}" value="$i" class="radio" $checked/>
EOT;
                }
und ersetze es durch
Code: [Select]
                for ($i=1; $i <= $element[3]; $i++) {
                    $checked = $value == $i ? 'checked="checked" ' : '';
                    switch($i) {
                        case 1: $label = "Nein"; break;
                        case 2: $label = "Vielleicht"; break;
                        case 3: $label = "Ja"; break;
                        default: $label = ""; break;
                    }
                    echo <<< EOT
            <label for="{$element[1]}{$i}">{$label}:</label>
            <input type="radio" name="{$element[1]}" value="{$i}" id="{$element[1]}{$i}" class="radio" {$checked}/>
            &nbsp;
EOT;
                }



da ich ja den Text für die zusätzlichen felder manuell eingeben muss für "Textfeld 1" "Radiobutton 1" bekomme ich für umlaute nur diese schwarze raute angezeigt.
Das liegt an der fehlenden UTF-8-Codierung. Entweder codierst du die Datei profile.php in UTF-8 um oder du benutzt die entsprechenden Entitäten (ä = &auml; / ö = &ouml; / usw.).



könnte man den text so ersetzen das er die texte aus der german.php nimmt dann könnte man das auch nehmen wen ich deutsch und englisch nutzen möchte. könnte dann die lang bearbeiten.
Sicher. Füge einfach in die entsprechenden Sprachdateien neue Werte hinzu, die du dann entsprechend an beiden Stellen in profile.php ersetzt. Z.B. fügst du in den Sprachdateien direkt vor
Code: [Select]
?>folgendes ein
Code: [Select]
$lang_profile_custom['radio1'] = 'Radiobutton 1';
Wichtig ist, dass du einen Eintrag in die Englische Sprachdatei hinzufügst, da diese immer als Fallback für alle Sprachdateien fungiert, in denen der String nicht vorhanden ist.

Dann suchst du in profile.php nach
Code: [Select]
'Radiobutton 1'(kommt 2 mal vor) und ersetzt beides durch
Code: [Select]
$lang_profile_custom['radio1']
Entsprechend verfährst du mit den anderen Strings.
Title: Re: mehr profilfelder
Post by: ralf45_nrw on September 09, 2013, 05:57:09 pm
hi andre,

super, werde es direkt ausprobieren.

DANKE.

gruss ralf
Title: Re: mehr profilfelder
Post by: ralf45_nrw on September 09, 2013, 06:18:05 pm
hi andre,

habe es so gemacht aber irgend wo ist ein fehler wen ich das profil aufrufe läd er es nicht nur weiße seite.

habe in der lang de und en habe ich das gemacht (vor ?>)
Code: [Select]
$lang_profile_custom['radio1'] = 'Portrait';

in der profil an beiden stellen
Code: [Select]
$edit_profile_form_param[] = array('radio', 'custom_radio_1', '$lang_profile_custom['radio1']', 3);

$display_profile_form_param[] = array('text', 'custom_radio_1', '$lang_profile_custom['radio1']');

gruss ralf
Title: Re: mehr profilfelder
Post by: Αndré on September 09, 2013, 06:58:30 pm
Ersetze
Code: [Select]
$edit_profile_form_param[] = array('radio', 'custom_radio_1', '$lang_profile_custom['radio1']', 3);durch
Code: [Select]
$edit_profile_form_param[] = array('radio', 'custom_radio_1', $lang_profile_custom['radio1'], 3);und bei allen anderen geänderten Zeilen entsprechend auch. Hätte ich vielleicht deutlicher kennzeichnen sollen in meiner Beschreibung, aber wenn du genau hinsiehst, wird der String samt Hochkommata durch die Variable ersetzt.
Title: Re: mehr profilfelder
Post by: ralf45_nrw on September 09, 2013, 10:02:51 pm
hi an

super funktioniert.

lerne immer mehr dazu.

gruss ralf
Title: Re: mehr profilfelder
Post by: Αndré on September 18, 2013, 05:17:43 pm
die abmessung des bildes soll eine bestimmte grösse haben z.b. 1, bild 800x300, 2. bild 300x400
Sind das jetzt schon die korrekten Größen? Breite x Höhe nehmen ich an?
Title: Re: mehr profilfelder
Post by: ralf45_nrw on September 18, 2013, 10:35:46 pm
hi andre,

ja bilder sind breite x höhe
1. bild 800x300
2. bild 350x600

gruss ralf
Title: Re: mehr profilfelder
Post by: Αndré on September 20, 2013, 02:55:20 pm
Die Upload-Felder.

Schritt 0: make_form erweitern und Formularkodierung anpassen

Suche
Code: [Select]
        default:
            cpg_die(CRITICAL_ERROR, 'Invalid action for form creation ' . $element[0], __FILE__, __LINE__);
        }
und füge darüber folgendes ein
Code: [Select]
        case 'upload':

            $value = $form_data[$element[1]];

            if ($element[2]) {

                echo <<< EOT
    <tr>
        <td width="40%" class="{$cellStyle}" height="25" valign="top">
            {$element[2]}
        </td>
        <td width="60%" class="{$cellStyle}" valign="top">
            <input type="file" style="width: 100%" name="{$element[1]}" class="listbox" />
        </td>
    </tr>


EOT;
            }

            break;


Suche
Code: [Select]
<form name="cpgform" id="cpgform" method="post" action="{$CPG_PHP_SELF}">und ersetze es durch
Code: [Select]
<form name="cpgform" id="cpgform" method="post" action="{$CPG_PHP_SELF}" enctype="multipart/form-data">

Schritt 1: Frontend

Füge wie bereits beschrieben in der Nähe der anderen Zeilen mit
Code: [Select]
$edit_profile_form_param[]etwas in folgender Art hinzu
Code: [Select]
$edit_profile_form_param[] = array('upload', 'custom_upload_1', 'Upload 1');
$edit_profile_form_param[] = array('upload', 'custom_upload_2', 'Upload 2');


Schritt 2: Backend

Jetzt beginnt der Teil, der evtl. nicht deinen Vorstellungen entspricht. Wenn das Formular abgesendet wird, werden entweder neue Bilder mitgesendet oder "nichts". Wenn nichts mitgesendet wird, wird das ggf. bereits hochgeladene Bild weiter verwendet. Wenn etwas mitgesendet wird und es ein Bild mit den korrekten Abmessungen ist, wird ab sofort dieses Bild verwendet. Wenn es kein Bild ist oder die falschen Abmessungen hat, wird das ggf. bereits hochgeladene Bild weiter verwendet. Ein Bild löschen ist erstmal nicht möglich, können wir später ggf. noch einbauen.

Damit Coppermine etwas mit den Erweiterungen anzufangen weiß, suchen wir
Code: [Select]
    $profile6 = $superCage->post->getEscaped('user_profile6');und fügen danach folgenden Code ein:
Code: [Select]
    function custom_upload($custom_upload_x, $width, $height) {
        global $CONFIG;
        $superCage = Inspekt::makeSuperCage();
        if ($superCage->files->getRaw("/{$custom_upload_x}/tmp_name") && is_image($superCage->files->getRaw("/{$custom_upload_x}/name"))) {
            $uploaded_file = $CONFIG['fullpath'].$CONFIG['userpics'].'user_'.USER_ID.'_'.$custom_upload_x.'.png';
            if (move_uploaded_file($superCage->files->getRaw("/{$custom_upload_x}/tmp_name"), $uploaded_file.'_tmp')) {
                $imagesize = cpg_getimagesize($uploaded_file.'_tmp');
                if ($imagesize[0] == $width && $imagesize[1] == $height) {
                    rename($uploaded_file.'_tmp', $uploaded_file);
                } else {
                    unlink($uploaded_file.'_tmp');
                }
            }
        }
    }
    custom_upload('custom_upload_1', 800, 300);
    custom_upload('custom_upload_2', 350, 600);


Schritt 3: Daten im öffentlichen Profil anzeigen

Suche
Code: [Select]
if ($CONFIG['user_profile6_name'] != '') {
    $display_profile_form_param[] = array('text', 'user_profile6', $CONFIG['user_profile6_name']);
}
unter füge darunter folgendes ein:
Code: [Select]
$display_profile_form_param[] = array('text', 'custom_upload_1', 'Upload 1');
$display_profile_form_param[] = array('text', 'custom_upload_2', 'Upload 2');

Suche
Code: [Select]
        'user_profile6' => bb_decode($user_data['user_profile6']),und füge darunter folgendes ein:
Code: [Select]
        'custom_upload_1' => custom_image('custom_upload_1'),
        'custom_upload_2' => custom_image('custom_upload_2'),

Jetzt fügst du vor dem darüberstehenden
Code: [Select]
$form_data = array(noch folgende Funktion hinzu:
Code: [Select]
    function custom_image($img) {
        global $CONFIG;
        $superCage = Inspekt::makeSuperCage();
        $user_id = $superCage->get->getInt('uid');
        $img = $CONFIG['fullpath'].$CONFIG['userpics'].'user_'.$user_id.'_'.$img.'.png';
        if (file_exists($img)) {
            return "<img class=\"image\" src=\"{$img}\" />";
        } else {
            return false;
        }
    }
Title: Re: mehr profilfelder
Post by: ralf45_nrw on September 20, 2013, 11:43:54 pm
hi andre,

super es funktioniert.
wie ich die größe ändern kann weiß ich die muss ich später so anpassen dami es ins profil passt.

nur ist es dumm das man nur .png hochladen kann wäre gut wen man auch noch .jpg hochladen könnte.

und wen man später die auch löschen könnte.

DANKE erst mal super leistung.


gruss ralf
Title: Re: mehr profilfelder
Post by: Αndré on September 21, 2013, 11:50:22 pm
Du kannst auch andere Bilddateien hochladen. Der Einfachheit halber werden aber alle als .png abgespeichert. Ist unsauber, sollte aber trotzdem ohne Probleme funktionieren.
Title: Re: mehr profilfelder
Post by: ralf45_nrw on September 22, 2013, 02:01:18 pm
hi andre,

dann muss ich das script noch mal kontrolieren.

wollte .jpg hochladen hat er nicht genommen, habe das bild dann in .png gespeichet und dann hochgeladen das ging ohne probleme.

gruss ralf
Title: Re: mehr profilfelder
Post by: Αndré on September 22, 2013, 07:24:10 pm
wollte .jpg hochladen hat er nicht genommen
Bitte genauer erläutern. Kam eine Fehlermeldung oder wird das Bild einfach nicht angezeigt?
Title: Re: mehr profilfelder
Post by: ralf45_nrw on September 24, 2013, 02:14:59 pm
hallo andre,

lag an mir hatte versucht eine falche größe hochzuladen.

wer lesen kann ist klar im vorteil.


gruss ralf
Title: Re: mehr profilfelder
Post by: Αndré on October 14, 2013, 04:25:08 pm
Sind wir hiermit eigentlich durch, oder ist noch irgendwas offen?
Title: Re: mehr profilfelder
Post by: ralf45_nrw on October 14, 2013, 04:31:50 pm
hi,

mit den feldern soweit alles ok.

gruss ralf