Trade Republic - Provisionsfrei Aktien handeln
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: Ich möchte die Buttons im Shopcontent ohne Grafiken, also nur mit CSS gestalten

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.990
    • Geschlecht:
    Für CSS-Buttons gibt es bereits Lösungen im Forum.
    Meist wurde eine neue inc-Funktion für die Buttons geschrieben und in den Funktionen xtc_image_button() und xtc_image_submit() aufgerufen.
    Von mir gibt's sogar eine Implementation mit Admin-Interface und Font-Icons wo man die Texte, die Styles und die Icons editieren kann; diese Version gibt's jedoch nicht für lau im Forum.

    Gruß,
    noRiddle

    newnoise

    • Neu im Forum
    • Beiträge: 2
    Hallo!

    Gibt es hier mittlerweile eine einfachere Lösung die Buttons durch CSS zu ersetzen?

    Danke!
    noise

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.990
    • Geschlecht:
    Einfacher als was bzw. welche Lösung ?

    Gruß,
    noRiddle

    newnoise

    • Neu im Forum
    • Beiträge: 2
    Einfacher als das auf der letzten Seite von hpzeller vorgeschlagene.

    Ich habe mehrere Plugins gefunden, die aber alle zuletzt irgendwann 2014 geupdatet wurden und ich ihnen daher nicht so richtig traue. Daher bin ich etwas unschlüssig was zzt. die beste / einfachste Lösung ist.

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.990
    • Geschlecht:
    Warten bis jemand die Zeit und Lust hat die vorhandenen Erweiterungen an die 2.0 anzupassen oder die hier vorgeschlagenen template-basierten Änderungen machen oder sich etwas bauen lassen oder auf das responsive Template des modified-Teams warten oder...

    Jedenfalls nicht darauf warten, daß dir hier einer altruistisch die für dich beste und gewünschte Lösung präsentiert.

    Gruß,
    noRiddle

    myfeedr

    • Neu im Forum
    • Beiträge: 1
    Hallo,
    ich bin gerade dabei, unseren alten Shop auf die aktuelle Version zu bringen. Bei den Anpassungen im Template ist mir dieses alte Thema hier wieder hochgekommen. Ich habe die aktuelle Shopversion installiert und in der Datei xtc_image_button.inc.php etwas gesehen, was für mich wie eine Umsetzung der CSS-Buttons aussieht:
    Code: PHP  [Auswählen]
      if (function_exists('css_button') && $useCssButton) {
          return css_button($image, $alt, $parameters, false); //function parameters: imagename, alttext, parameters, isSubmitBtn
        }
     

    Mir ist nicht ganz klar, wie ich diese Funktion aktivieren kann?

    Gruß Thomas

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.990
    • Geschlecht:
    Du müsstest die Funktion css_button() bauen und sie in /templates/DEIN_TEMPLATE/source/inc/ ablegen und die Datei in /templates/DEIN_TEMPLATE/source/boxes.php include-n.
    Der Kommentar in dem von dir geposteten Code gibt einen Hinweis darauf welche Parameter in der Funktion css_button() benutzt werden sollen und wofür sie stehen.

    Gruß,
    noRiddle

    flip

    • Neu im Forum
    • Beiträge: 20
    Guten Abend zusammen!

    Die bisherigen Module waren immer sehr viel Arbeit.
    Außerdem bin ich kein freund von core-änderungen und schließe das basteln an manchen Dateien sogar komplett aus  :-D ging hier zwar "nur" um button outputs, aber nach jedem Update die Änderungen wiederherzustellen ist mir doch etwas zu aufwändig.

    Meine vorrübergehende Lösung besteht ausschließlich auf JQuery und CSS.
    Würde gerne ein paar Augen drüberschauen lassen, getestet habe ich schon - es kann aber sein, dass mir evtl. weitere Button-Elemente entgangen sind. Testen bitte also vorerst nicht auf euren Live-Shops :-)

    Ausgehen werde ich hier von tpl_modified (Meine Version aktuell 2.0.2.1)

    Also das ganze sieht bisher so aus:
    Man navigiere zur templates/tpl_modified/javascript/general_bottom.js.php und füge am ENDE der Datei folgenden Code ein:
    Code: Javascript  [Auswählen]

    <script type="text/javascript">

          // START Ersetzen von image-buttons durch submit
          $('input[type=image]').each(function (index, value){
            var altAttr = $(this).attr("alt");
            $(this).removeAttr('src').attr('type','submit').attr('value', altAttr).addClass('btn btn-primary');
          });
          // ENDE Ersetzen von image-buttons durch submit


          // START Weitere Buttons (Verlinkte Bilder => werden zu input-elementen umgewandelt)
          $('.button_left > a > img').each(function (index, value){
            var altAttr = $(this).attr("alt");
            $(this).removeAttr('src').attr('type','button').attr('value', altAttr).addClass('btn btn-primary');
                       
            // New type of the tag
            var replacementTag = 'input';
            var outer = this.outerHTML;

            // Replace opening tag
            var regex = new RegExp('<' + this.tagName, 'i');
            var newTag = outer.replace(regex, '<' + replacementTag);

            // Replace closing tag
            regex = new RegExp('</' + this.tagName, 'i');
            newTag = newTag.replace(regex, '</' + replacementTag);

            $(this).replaceWith(newTag);

          });
          $('.button_right > a > img').each(function (index, value){
            var altAttr = $(this).attr("alt");
            $(this).removeAttr('src').attr('type','button').attr('value', altAttr).addClass('btn btn-success');
         

            // New type of the tag
            var replacementTag = 'input';
            var outer = this.outerHTML;

            // Replace opening tag
            var regex = new RegExp('<' + this.tagName, 'i');
            var newTag = outer.replace(regex, '<' + replacementTag);

            // Replace closing tag
            regex = new RegExp('</' + this.tagName, 'i');
            newTag = newTag.replace(regex, '</' + replacementTag);

            $(this).replaceWith(newTag);
            });

          $('.checkout_button_right > a > img').each(function (index, value){
            var altAttr = $(this).attr("alt");
            $(this).removeAttr('src').attr('type','button').attr('value', altAttr).addClass('btn btn-success');


            // New type of the tag
            var replacementTag = 'input';
            var outer = this.outerHTML;

            // Replace opening tag
            var regex = new RegExp('<' + this.tagName, 'i');
            var newTag = outer.replace(regex, '<' + replacementTag);

            // Replace closing tag
            regex = new RegExp('</' + this.tagName, 'i');
            newTag = newTag.replace(regex, '</' + replacementTag);

            $(this).replaceWith(newTag);
           
            });

          $('.lb_buttons > a:first-of-type > img').each(function (index, value){
            var altAttr = $(this).attr("alt");
            $(this).removeAttr('src').attr('type','button').attr('value', altAttr).addClass('btn btn-primary');
            // New type of the tag
            var replacementTag = 'input';
            var outer = this.outerHTML;

            // Replace opening tag
            var regex = new RegExp('<' + this.tagName, 'i');
            var newTag = outer.replace(regex, '<' + replacementTag);

            // Replace closing tag
            regex = new RegExp('</' + this.tagName, 'i');
            newTag = newTag.replace(regex, '</' + replacementTag);

            $(this).replaceWith(newTag);
         
          });
          // ENDE Weitere Buttons (Verlinkte Bilder => werden zu input-elementen umgewandelt)
    </script>

     

    Die dazuhörigen JQuery Funktionen habe ich mir zusammengesucht, weiß leider nicht genau ab welcher JQuery Version das ganze läuft - Ich persönlich habe JQuery 3.0.0 und dazu noch jquery-migrate 1.4.1 laufen. Grundsätzlich ersetze ich via JQuery die attribute (z.b. "type=image" => type="submit"), entferne einige unnötige (z.b. src="buttonbildpfad.gif"). Verlinkte <img> buttons ersetzte ich durch inputs(type button) und übernehme die vorherigen Attribute (title, alt etc.) - für die fehlende Buttonbeschriftung verwende ich das value-attribut und nehme den Wert aus dem alt-attribut. Zusätzlich werden dann natürlich die Klassen für die Buttonstyles hinzugefügt.

    Als CSS-Klassen habe ich vorerst aus Faulheit die Bootstrap-Klassen verwendet, da es ohnehin bereits bei mir verbaut ist. Wer diese nicht hat - einfach folgendes CSS in eurem Stylesheet hinzufügen:
    Code: CSS  [Auswählen]

    .btn {
      display: inline-block;
      padding: 6px 12px;
      margin-bottom: 0;
      font-size: 14px;
      font-weight: normal;
      line-height: 1.42857143;
      text-align: center;
      white-space: nowrap;
      vertical-align: middle;
      -ms-touch-action: manipulation;
          touch-action: manipulation;
      cursor: pointer;
      -webkit-user-select: none;
         -moz-user-select: none;
          -ms-user-select: none;
              user-select: none;
      background-image: none;
      border: 1px solid transparent;
      border-radius: 4px;
    }
    .btn:focus,
    .btn:active:focus,
    .btn.active:focus,
    .btn.focus,
    .btn:active.focus,
    .btn.active.focus {
      outline: 5px auto -webkit-focus-ring-color;
      outline-offset: -2px;
    }
    .btn:hover,
    .btn:focus,
    .btn.focus {
      color: #333;
      text-decoration: none;
    }
    .btn:active,
    .btn.active {
      background-image: none;
      outline: 0;
      -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
              box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
    }


    .btn-primary {
      color: #fff;
      background-color: #337ab7;
      border-color: #2e6da4;
    }
    .btn-primary:focus,
    .btn-primary.focus {
      color: #fff;
      background-color: #286090;
      border-color: #122b40;
    }
    .btn-primary:hover {
      color: #fff;
      background-color: #286090;
      border-color: #204d74;
    }
    .btn-primary:active,
    .btn-primary.active,
    .open > .dropdown-toggle.btn-primary {
      color: #fff;
      background-color: #286090;
      border-color: #204d74;
    }
    .btn-primary:active:hover,
    .btn-primary.active:hover,
    .open > .dropdown-toggle.btn-primary:hover,
    .btn-primary:active:focus,
    .btn-primary.active:focus,
    .open > .dropdown-toggle.btn-primary:focus,
    .btn-primary:active.focus,
    .btn-primary.active.focus,
    .open > .dropdown-toggle.btn-primary.focus {
      color: #fff;
      background-color: #204d74;
      border-color: #122b40;
    }

    .btn-success {
      color: #fff;
      background-color: #5cb85c;
      border-color: #4cae4c;
    }
    .btn-success:focus,
    .btn-success.focus {
      color: #fff;
      background-color: #449d44;
      border-color: #255625;
    }
    .btn-success:hover {
      color: #fff;
      background-color: #449d44;
      border-color: #398439;
    }
    .btn-success:active,
    .btn-success.active,
    .open > .dropdown-toggle.btn-success {
      color: #fff;
      background-color: #449d44;
      border-color: #398439;
    }
    .btn-success:active:hover,
    .btn-success.active:hover,
    .open > .dropdown-toggle.btn-success:hover,
    .btn-success:active:focus,
    .btn-success.active:focus,
    .open > .dropdown-toggle.btn-success:focus,
    .btn-success:active.focus,
    .btn-success.active.focus,
    .open > .dropdown-toggle.btn-success.focus {
      color: #fff;
      background-color: #398439;
      border-color: #255625;
    }

     
    (Habe ich mal aus bootstrap übernommen und nur die beiden bei mir verwendeten Button-styles eingefügt.) Zu gegebener Zeit kann ich hier auch nochmal passendere Buttonstyle nachreichen.

    Es ist noch nicht perfekt und ich bin mir auch nicht ganz sicher ob es eine gute Lösung ist das über Jquery zu machen - aber es erfüllt seinen Zweck bisher  :mrgreen:.  Ich möchte aber euch aber trotzdem gerne nochmal drüber schauen lassen.

    Eventuell ja auch ein guter Ansatz zur CSS-Button Lösung.  :?:

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.990
    • Geschlecht:
    Ohne mir deinen Ansatz genauer angeschaut zu haben:
    Wie in meinem Post vor deinem bereits dargelegt kann man in der 2.0 einfach und ohne Core-Datei-Änderungen CSS-Buttons bauen.
    Dann hat man die CSS-Buttons auch wenn jemand Javascript im Browser deaktiviert hat.

    Gruß,
    noRiddle

    nicson

    • Fördermitglied
    • Beiträge: 132
    Also im Standardtemplate ist das eigentlich ganz einfach, da kannst du dir die jquery Quellcode Manipulation auch sparen :).... template/source/inc

    Datei Anlegen css_button.inc.php, auf die schnelle zusammengefummelt sieht das dann so aus:

    Code: PHP  [Auswählen]
    <?php
    function css_button($image, $alt, $parameters, $useCssButton = true){  
            return '<button type="submit" '.$parameters.' >'.$alt.'</button>';     
    }
    ?>
     

    Und so sieht dann die Zeile z.B. in der loginbox.php aus:
    Code: PHP  [Auswählen]
    $box_smarty->assign('BUTTON', xtc_image_submit('button_login_small.gif', IMAGE_BUTTON_LOGIN, 'class="btn btn-default"'));
    Das image hab ich einfach noch drin gelassen und am ende einfach die gewünschte CSS Klasse angegeben.

    Ausgespuckt wird dann:

    Code: XML  [Auswählen]
    <button type="submit" class="btn btn-default">Anmelden</button>

    Denke das ist die einfachste Art ohne den Core zu ändern, das haben die Jungs schon gut gelöst.

    robi24

    • Neu im Forum
    • Beiträge: 3
    • Geschlecht:
    Also im Standardtemplate ist das eigentlich ganz einfach, da kannst du dir die jquery Quellcode Manipulation auch sparen :).... template/source/inc

    Datei Anlegen css_button.inc.php, auf die schnelle zusammengefummelt sieht das dann so aus:

    Code: PHP  [Auswählen]
    <?php
    function css_button($image, $alt, $parameters, $useCssButton = true){  
            return '<button type="submit" '.$parameters.' >'.$alt.'</button>';     
    }
    ?>
     

    Und so sieht dann die Zeile z.B. in der loginbox.php aus:
    Code: PHP  [Auswählen]
    $box_smarty->assign('BUTTON', xtc_image_submit('button_login_small.gif', IMAGE_BUTTON_LOGIN, 'class="btn btn-default"'));
    Das image hab ich einfach noch drin gelassen und am ende einfach die gewünschte CSS Klasse angegeben.

    Ausgespuckt wird dann:

    Code: XML  [Auswählen]
    <button type="submit" class="btn btn-default">Anmelden</button>

    Denke das ist die einfachste Art ohne den Core zu ändern, das haben die Jungs schon gut gelöst.

    Funktioniert soweit einwandfrei, aber einige Fehler treten auf: Artikeldaten drucken geht aber das Produkt wird automatisch im Warenkorb abgelegt oder im Warenkorb funktioniert das löschen des Produktes nicht...

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.990
    • Geschlecht:
    Du mußt in der Funktion und dem was sie ausgibt noch unterscheiden zwischen Submit-Buttons und anderen Buttons, z.B. einfach Link-Buttons.
    • Submit-Buttons senden ein Formular ab wenn sie innerhalb eines form-tags stehen.
    • Link-Buttons sind einfach Links in Form eines Buttons.

    Das heißt die Funktion benötigt noch einen anderen Parameter als vierten solchen.
    Schau dir die Funktionen xtc_image_submit() und xtc_image_button() an.
    Dort findest du
    das
    Code: PHP  [Auswählen]
    return css_button($image, $alt, $parameters, true);
    bzw. das
    Code: PHP  [Auswählen]
    return css_button($image, $alt, $parameters, false);

    Der vierte Paramter, also true oder false bestimmt ob es ein Submit-Button ist.
    Die Funktion muß also eher so aussehen:
    Code: PHP  [Auswählen]
    function css_button($image, $alt, $parameters = '', $submit) {
    ....
    }
    $useCssButton = true hat da nichts zu suchen.

    Wenn $submit === true  mußt du dann eben einen Submit-Button ausgeben lassen und wenn nicht eben einen Link-Button.

    Wie du die Buttons aufbaust ist dann dir überlassen.

    Gruß,
    noRiddle

    robi24

    • Neu im Forum
    • Beiträge: 3
    • Geschlecht:
    Du mußt in der Funktion und dem was sie ausgibt noch unterscheiden zwischen Submit-Buttons und anderen Buttons, z.B. einfach Link-Buttons.
    • Submit-Buttons senden ein Formular ab wenn sie innerhalb eines form-tags stehen.
    • Link-Buttons sind einfach Links in Form eines Buttons.

    Das heißt die Funktion benötigt noch einen anderen Parameter als vierten solchen.
    Schau dir die Funktionen xtc_image_submit() und xtc_image_button() an.
    Dort findest du
    das
    Code: PHP  [Auswählen]
    return css_button($image, $alt, $parameters, true);
    bzw. das
    Code: PHP  [Auswählen]
    return css_button($image, $alt, $parameters, false);

    Der vierte Paramter, also true oder false bestimmt ob es ein Submit-Button ist.
    Die Funktion muß also eher so aussehen:
    Code: PHP  [Auswählen]
    function css_button($image, $alt, $parameters = '', $submit) {
    ....
    }
    $useCssButton = true hat da nichts zu suchen.

    Wenn $submit === true  mußt du dann eben einen Submit-Button ausgeben lassen und wenn nicht eben einen Link-Button.

    Wie du die Buttons aufbaust ist dann dir überlassen.

    Gruß,
    noRiddle

    Genau! Habe einfach zwei verschiedene Klassen gesetzt und entspr. geschleift: Image-Button setze ich als <span class... und  Submit-Button als <button class...  Wenn submit nicht zutrifft, dann span, funktioniert tiptop!

    lalelu69

    • Neu im Forum
    • Beiträge: 3
    Wo gibt's die Version und zu welchem Preis? Meine Frage bezieht sich auf Antwort #15.
    2 Antworten
    2732 Aufrufe
    22. Dezember 2015, 10:32:06 von bepegkg
    6 Antworten
    7266 Aufrufe
    12. Juli 2012, 19:16:12 von h-h-h
    2 Antworten
    3259 Aufrufe
    15. August 2011, 13:16:25 von ut2k3
               
    anything