Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Verbesserungsvorschlag: IDs für Formularfelder für bessere CSS Integration

    wstrubbi

    • Neu im Forum
    • Beiträge: 19
    Hallo Gemeinde,

    um die Formular-Textfelder für die CSS Formatierung besser ansprechen zu können, habe ich in der xtc_draw_input_field.inc.php folgende Änderungen durchgeführt um bei jedem Input Text Field eine ID mit dem Namen des Feldes zu erzeugen.

    Vorher:
    Code: PHP  [Auswählen]
    <input type="text" name="products_qty" value="1" size="3">

    Nachher:
    Code: PHP  [Auswählen]
    <input type="text" name="products_qty" id="products_qty" value="1" size="3">

    Zeile 20:
    Code: PHP  [Auswählen]
        $field = '<input type="' . xtc_parse_input_field_data($type, array('"' => '&quot;')) . '" name="' . xtc_parse_input_field_data($name, array('"' => '&quot;')) . '"';

    geändern in:
    Code: PHP  [Auswählen]
        $field = '<input type="' . xtc_parse_input_field_data($type, array('"' => '&quot;')) . '" name="' . xtc_parse_input_field_data($name, array('"' => '&quot;')) . '" id="' . xtc_parse_input_field_data($name, array('"' => '&quot;')) . '"';

    Zeile 36:
    Code: PHP  [Auswählen]
        $field = '<input type="' . xtc_parse_input_field_data($type, array('"' => '&quot;')) . '" name="' . xtc_parse_input_field_data($data['name'], array('"' => '&quot;')) . '"';

    geändern in:
    Code: PHP  [Auswählen]
        $field = '<input type="' . xtc_parse_input_field_data($type, array('"' => '&quot;')) . '" name="' . xtc_parse_input_field_data($data['name'], array('"' => '&quot;')) . '" id="' . xtc_parse_input_field_data($data['name'], array('"' => '&quot;')) . '"';

    Man kann die Formularfelder natürlich auch unter ihrem Namen im CSS ansprechen. Bei dem Input Text Field "products_qty", welches auf der Seite Produkt Details verwendet wird, würde das dann so aussehen:

    Code: PHP  [Auswählen]
    <input type="text" name="products_qty" id="products_qty" value="1" size="3">

    Code: CSS  [Auswählen]
    #content input[type="text"] {
      width:185px;
    }
    #content input[name=products_qty] {
      width:35px;
    }

    Während die 1. CSS Anweisung allen Input Feldern vom Typ "text" eine Standardlänge zu weist, wird in der 2. CSS Anweisung das Input Feld direkt über den Namen angesprochen.

    Vielleicht kann´s ja jemand brauchen oder man baut das für alle Formularfelder gleich direkt in eine der nächsten Versionen ein.

    VG
    Wolfgang


    Linkback: https://www.modified-shop.org/forum/index.php?topic=30916.0

    Godzilla

    • Schreiberling
    • Beiträge: 489
    Vielleicht kann´s ja jemand brauchen oder man baut das für alle Formularfelder gleich direkt in eine der nächsten Versionen ein.

    Ich hoffe mal nicht, dass das in eine nächste Version eingebaut wird, denn der Quelltext sollte sich durch Verbesserungen und Neuerungen eigentlich eher verkleinern anstatt unnötig vergrößern.

    CSS
    Code: PHP  [Auswählen]
    input[name=products_qty] { }

    Code: PHP  [Auswählen]
    input[value="In den Warenkorb"] { }

    Code: PHP  [Auswählen]
    a[target=_blank] { }

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.988
    • Geschlecht:
    Sorry, aber das ist Blödsinn.
    Eine ID für input-und textarea-Felder sollte selbstverständlich sein, allein weil man dann auch mit label arbeiten kann, was im übrigen sehr zu empfehlen ist.
    Das ist ja nun wirklich keine "Vergrößerung" des Codes.

    Wenn man IE6 nicht mehr unterstützen möchte (was man nicht möchte ;-)), geht das Ansprechen der Felder per Attribut-Selektor natürlich, aber es gibt noch andere Gründe den input- und textarea-Feldern eine ID zu vergeben (z.B. die Verwendung von label, wie ich bereits erwähnte).

    @wstrubbi
    Es gibt jedoch einen kleinen Drawback bei deiner Idee (die ich auf andere Weise bereits umgesetzt habe).
    Das Passwortfeld in der Login-Box und das Passwort-Feld auf der Login-Seite haben den gleichen name, nämlich "password" (dummerweise, ansonsten ist deine Idee genau richtig).
    Das führt dazu, daß man auf der Login-Seite (= /login.php) zweimal die gleiche ID vergeben hat, was nicht valide ist und bei evtl. Javascript-Implmentationen die die Felder per ID ansprechen auch zu Problemen führen würde.
    Lösung:
    • entweder
      Login-Box auf der Login-Seite ausblenden
      oder
    • Im Core-Code rumfummeln und die Variable $parameters der Funktion xtc_draw_input_field() benutzen um eine jeweils gewünschte ID zu vergeben.

    Gruß,
    noRiddle

    wstrubbi

    • Neu im Forum
    • Beiträge: 19
    Hallo noRiddle,

    das dachte ich mir schon, dass es vereinzelt zu Konflikten führen kann.

    In meinem Fall ist das valide, da die Login Box ausgeblendet ist und ein Link im Header immer zur Login-Page führt.

    Die Idee mit der Variablen $parameters ist interessant.

    Da bin ich noch nicht durchgestiegen, wie die verwendet werden kann. Hast Du einen Link auf ein Tutorial oder einen Thread zu diesem Thema. Falls nicht wäre ich auch für eine paar erklärende Worte Deinerseits dankbar.

    VG
    Wolfgang

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.988
    • Geschlecht:
    Naja, du kannst es ja so machen wie du es gemacht hats, die Idee ist ja genau die richtige. Daß zwei input-Felder den gleichen name haben ist halt ein kleiner Unfall und kommt bei dir ja nicht zum tragen.

    Ansonsten schau dir doch die Funktion an:
    Code: PHP  [Auswählen]
    function xtc_draw_input_field($name, $value = '', $parameters = '', $type = 'text', $reinsert_value = true) {
    ...
    }

    $parameters steht an dritter Stelle und bei Aufruf der Funktion werden die Variablen der Funktion ja mit Werten ersetzt wo nötig.
    Am Beispiel der Login-Box (/templates/DEIN_TEMPLATE/source/boxes/loginbox.php) sähe das dann z.B.so aus:
    Code: PHP  [Auswählen]
    $box_smarty->assign('FIELD_PWD', xtc_draw_password_field('password', '', 'id="DEINE_ID" maxlength="30" style="width:80px;"'));
    Hier standen an der Stelle der $parameters bereits Werte für maxlength usw., die ich einfach ergänzt habe.
    Wenn die letzte Variable nicht von der des Default in der Funktion abweicht ($type = 'text') kann sie auch weggelassen werden bei Aufruf der Funktion.

    Gruß,
    noRiddle

    Godzilla

    • Schreiberling
    • Beiträge: 489
    Daß zwei input-Felder den gleichen name haben ist halt ein kleiner Unfall und kommt bei dir ja nicht zum tragen.

    Woher willst du das wissen? Er hat bisher nur gesagt, dass er die Login-Box nicht nutzt.

    Sollte er z.B. das Geschlecht seiner Kunden abfragen (und das sollte er), dann gibt es noch doppelte name="gender" auf den Seiten:

    account_edit.html
    address_book_details.html
    checkout_new_address.html
    checkout_payment_address.html
    checkout_shipping_address.html
    create_account.html
    create_account_guest.html

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.988
    • Geschlecht:
    Inwiefern sind die doppelt ?
    Du kannst so oft du willst die gleiche ID vergeben für ein HTML-Element, solange es nicht auf derselben Seite ist.

    Gruß,
    noRiddle
    Werbung / Banner buchen
    19 Antworten
    7708 Aufrufe
    09. Juli 2014, 14:55:41 von ShopNix
    5 Antworten
    4115 Aufrufe
    26. März 2014, 10:22:23 von p3e
    1 Antworten
    1140 Aufrufe
    22. März 2022, 21:43:15 von lullifatz