Ankündigung

Einklappen
Keine Ankündigung bisher.

CC-Feld für die Eingabe von Bildquellen mit vorangestelltem Copyright-Zeichen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • CC-Feld für die Eingabe von Bildquellen mit vorangestelltem Copyright-Zeichen

    Das könnte dann so aussehen: PHP-Code:
    $objTarget = array();
    $objResult = \Database::getInstance()->prepare("SELECT bild_copyright from cc_reisen")->execute();
    while (
    $objResult->next())
    {

    $objTarget[] = $objResult->bild_copyright;
    }


    // schön ausgeben
    // sortiert

    asort ($objTarget);
    foreach(
    $objTarget as $bildquelle):
    if (!empty(
    $bildquelle))
    {
    $bildquelle = preg_replace("/,/", "$1<br>", $bildquelle);
    echo
    $bildquelle,"<br />";
    }
    endforeach;


    Bin jetzt von Deiner obenstehenden Belegung der Felder ausgegangen - Ich vermute Du meinst mit den Umbrüchen bei den Kommas, den Arrayinhalt an der Position [0]?
    > [] Ja, [] Nein, [] Ich weiß nicht

    Hoffe das hilft soweit und VG

    Hallo Bubble habe ein neues Thema erstellt. Vielleicht kannst Du mir helfen. Dein Code ist perfekt. Leider haut jedoch die Sortierung bei folgender Eingabe jedoch nicht hin:
    zB.
    ©Anibal Trejo-Fotolia
    ©annebe-Fotolia
    ©Brad Pict-Fotolia
    ©lily-Fotolia
    ©D`July-Fotolia
    ©donyanedomam-Fotolia
    danmir12-Fotolia

    Danke schon mal.

  • #2
    Was für ein Feldtyp ist "bild_copyright"?
    http://www.premium-contao-themes.com

    Kommentar


    • #3
      Feldtyp ist textarea

      Kommentar


      • #4
        Zitat von josephkisler Beitrag anzeigen
        Feldtyp ist textarea
        Oh ha, ok. Dann ist's ok so.
        http://www.premium-contao-themes.com

        Kommentar


        • #5
          Kleinstauftrag für Dich?
          * Sortierung?

          Kommentar


          • #6
            Zitat von josephkisler Beitrag anzeigen
            Kleinstauftrag für Dich?
            * Sortierung?

            Nö. Der Bubble macht das schon

            Tip zum Aufbau:
            Ich würde da erstmal keine Textarea setzen, sondern ein einfaches Textfeld und die jeweiligen Copyrights mit Komma trennen.
            Das macht alles deutlich einfacher als mit ner Textarea, die ggf. html Code führt zu arbeiten.

            Ich verstehe zwar die Mühe hier nicht, wenn man schon ne Textarea spendiert, dann doch einfach alles fertig reinschreiben. Alphabetische Sortierung etc. ist dann redaktionelle Sorgfaltspflicht. Fertig aus.
            Sonst sollten Redakteure nie Textareas bekommen, erst recht nicht mit Tiny. Hier gilt what you see, is what you get.
            http://www.premium-contao-themes.com

            Kommentar


            • #7
              Na, dann will ich mal nicht so sein ;-). Aber wehe ihr lästert über den Aufbau... Ich kratze auch nur an der Oberfläche ...

              Also, wenn Du die Werte nun mal so vorgegeben hast, dann könnte man das wie unten stehend bauen.
              Ich bin dabei davon ausgegangen, dass mal Werte mit und mal ohne Copyrightsymbol auftauchen.
              Mein Ansatz geht dahin, das Symbol vom Text zu trennen, dann die Sortierung des Textes vorzunehmen und dann das Symbol wieder hinzuzufügen. Um die Inhalte zusammenzuhalten, nutze ich ein temporäres Array dafür.

              PHP-Code:
              mb_internal_encoding("UTF-8");
                  
              //Ausgangslage, kommt ggf. aus DB Abfrage
                  
              $quelle = array("©Anibal Trejo-Fotolia","©annebe-Fotolia","©Brad Pict-Fotolia","©lily-Fotolia","©D`July-Fotolia","©donyanedomam-Fotolia","danmir12-Fotolia");
                  
              $tempArray = array();

                  foreach (
              $quelle as $tempTarget): {
                      
              //Wenn das erste Zeichen ein © ist, dann dieses herausnehmen.
                      
              if (mb_substr($tempTarget,0,1)=="©") {
                          
              $temp mb_substr($tempTarget,1);
                          
              $tempArray[] = array('Name'=>$temp,'PreFix'=>"©");
                          }
                      else {
                          
              $tempArray[] = array('Name'=>$tempTarget,'PreFix'=>"");
                          }
                      }
                      endforeach;

                      
              //Das temporäre Array hat nun im ersten Array die reinen Namen, die sortiert werden können.
                      
              $sortiert sortArray($tempArray,'Name');
                      
              //Nun kann das sortierte Array wieder in der gewünschten Form ausgeben. Dabei das Copyrightzeichen wieder an den Anfang setzen. Sollte passen ;-)
                      
              foreach ($sortiert as $key): {
                          echo 
              $key['PreFix'].$key['Name']."<br />";
                      }
                      endforeach;


              function 
              sortArray($data$field)
                {
                  if(!
              is_array($field)) $field = array($field);
                  
              uasort($data, function($a$b) use($field) {
                    
              $retval 0;
                    foreach(
              $field as $fieldname) {
                      if(
              $retval == 0$retval strcasecmp($a[$fieldname],$b[$fieldname]);
                    }
                    return 
              $retval;
                  });
                  return 
              $data;
                } 

              Ich habe es soweit ausprobiert, kann man bestimmt eleganter und kürzer machen, aber ich brauche leider immer noch ein paar Schritte extra. Ich hoffe es hilft und viele Grüße.

              Kommentar


              • #8
                Mr. Dr. Dipl.Ing. Bubble, Du bist der Grösste.

                Kommentar


                • #9
                  Dr. Brubbel, könntest Du mir den Code nur dahingehende verändern, dass
                  * leere Zeilen nicht ausgegeben werden und
                  * da es mehrere Einträge pro Zeile gibt diese in jeweils einer Zeile umgebrochen werden?
                  Ergebnis:
                  Costa_Brava_3799_Spanien_8a_082, Costa_Brava_3800_Spanien_8a_115, Costa_Brava_3820_PICT0056
                  Fotolia_5202779_XS, Fotolia_5415055_XS, Fotolia_71434814_M
                  Fotolia_57151708_M, 1071824_1920_Pixabay, Fotolia_69620263_XS, Fotolia_79091111_M
                  Fotolia_69400914_M_Guatemala_Frau, Fotolia_65221581_XS_Guatemala_Tikal, Fotolia_71194110_XS_Nicaragua_Granada
                  Fotolia_70944339_M, Fotolia_51819949_XS, Fotolia_70944339_M, Fotolia_60224214_XS
                  Fotolia_79805324_XS, Fotolia_85940200_XS, lighthouse-510827_1920_Pixabay
                  Grönland_Fotolia_48228134_XS, MS_Hamburg_Groenland2_puffin_mit_fisch04_m, MS_Hamburg_Groenland3_im_lillehoekfjord01
                  HKGSIN1_hongkong_dschunke_m, HKGSIN2_singapur_marina_bay_morgen01_m, HKGSIN3_vietnam_maedchen_01_m
                  Mauritius1_giant-tortoise-114134_1920_pixabay, Mauritius2-162600_1920_pixabay, Mauritius3_Reunion_Fotolia_85667453_XS
                  MS_Astor_Ostsee1_Frau_153160056_TS, MS_Astor_Ostsee2_Danzig_Polen_138289449_TS, St.Petersburg_Russland_157097268_TS
                  MS_France1_3119_Paris_F217_thumb256x256, MS_France2_3129_Rouen_F501_thumb256x256, MS_France3_3143_Les Andelys_F254_thumb256x256
                  ©wira91-Fotolia.com, ©captblack76-Fotolia.com, ©SamSpiro-Fotolia.com

                  PHP-Code:
                  <?php
                  mb_internal_encoding
                  ("UTF-8");
                  $ErgArray = array();
                  $quelle = \Database::getInstance()->prepare("SELECT bild_copyright FROM cc_reisen")->execute();
                  while (
                  $quelle->next())
                              {
                                  
                              
                  $ErgArray[] = $quelle->bild_copyright;
                              
                              }



                      foreach (
                  $ErgArray as $tempTarget): {
                          
                  //Wenn das erste Zeichen ein © ist, dann dieses herausnehmen.
                          
                  if (mb_substr($tempTarget,0,1)=="©") {
                              
                  $temp mb_substr($tempTarget,1);
                              
                  $tempArray[] = array('Name'=>$temp,'PreFix'=>"©");
                              }
                          else {
                              
                  $tempArray[] = array('Name'=>$tempTarget,'PreFix'=>"");
                              }
                          }
                          endforeach;

                          
                  //Das temporäre Array hat nun im ersten Array die reinen Namen, die sortiert werden können.
                          
                  $sortiert sortArray($tempArray,'Name');
                          
                  //Nun kann das sortierte Array wieder in der gewünschten Form ausgeben. Dabei das Copyrightzeichen wieder an den Anfang setzen. Sollte passen ;-)
                          
                  foreach ($sortiert as $key):
                          if (!empty(
                  $tempArray))
                          {
                              echo 
                  $key['PreFix'].$key['Name']."<br />";
                          }
                          endforeach;


                  function 
                  sortArray($data$field)
                    {
                      if(!
                  is_array($field)) $field = array($field);
                      
                  uasort($data, function($a$b) use($field) {
                        
                  $retval 0;
                        foreach(
                  $field as $fieldname) {
                          if(
                  $retval == 0$retval strcasecmp($a[$fieldname],$b[$fieldname]);
                        }
                        return 
                  $retval;
                      });
                      return 
                  $data;
                    }


                   
                  ?>
                  Danke vielmals.

                  Kommentar

                  Lädt...
                  X