Avatar billede olzen Nybegynder
28. juni 2007 - 19:25 Der er 24 kommentarer og
2 løsninger

Overflow på <select>

Hej alle,

Mit spørgsmål kunne nok lige så godt være i kategorien CSS - men mit problem går på jeg har sådan en streg her:

<?php echo tep_draw_pull_down_menu('id[' . $products_options_name['products_options_id'] . ']', $products_options_array, $selected_attribute); ?>

Den bliver hvis genereret her:

261  // Output a form pull down menu
262    function tep_draw_pull_down_menu($name, $values, $default = '', $parameters = '', $required = false) {
263      $field = '<select name="' . tep_output_string($name) . '"';
264 
265      if (tep_not_null($parameters)) $field .= ' ' . $parameters;
266 
267      $field .= '>';
268 
269      if (empty($default) && isset($GLOBALS[$name])) $default = stripslashes($GLOBALS[$name]);
270 
271      for ($i=0, $n=sizeof($values); $i<$n; $i++) {
272        $field .= '<option value="' . tep_output_string($values[$i]['id']) . '"';
273        if ($default == $values[$i]['id']) {
274          $field .= ' SELECTED';
275        }
276 
277        $field .= '>' . tep_output_string($values[$i]['text'], array('"' => '&quot;', '\'' => '&#039;', '<' => '&lt;', '>' => '&gt;')) . '</option>';
278      }
279      $field .= '</select>';
280 
281      if ($required == true) $field .= TEXT_FIELD_REQUIRED;
282 
283      return $field;
284    }

Og den indeholde nogle meget lange ord som skubber hele mit design ud.. Der hvor selectroen bliver dannet tror jeg også den bliver brugt andre steder i systemet.. Så kan man sætte en style med overflow på oppe i første PHP streng..?
Avatar billede jakobdo Ekspert
28. juni 2007 - 21:44 #1
I stedet for at anvende overflow, kunne du så ikke bruge php funktionen: substr() og klippe teksterne kortere?
Avatar billede olzen Nybegynder
28. juni 2007 - 21:54 #2
Det lyder som noget der kunne du.. Kan du give et eksempel - kan den benyttes i: <?php echo tep_draw_pull_down_menu('id[' . $products_options_name['products_options_id'] . ']', $products_options_array, $selected_attribute); ?>
Avatar billede jakobdo Ekspert
28. juni 2007 - 22:02 #3
Jeg er ikke helt sikker.
Men måske dette hack kunne gøre det:

$field .= '>' . tep_output_string(substr($values[$i]['text'],0,50), array('"' => '&quot;', '\'' => '&#039;', '<' => '&lt;', '>' => '&gt;')) . '</option>';

Bemærk 50 = længde...
Avatar billede olzen Nybegynder
28. juni 2007 - 22:10 #4
Det må jeg prøve.. Det der er problemet med denne er det ikke at teksten bliver klippet i "stykker" - så der i selecttoren kun kommer de 50 karakter lange ord med.. De skal jo bruges videre i systemet, så derfor tænkte jeg overflow?
Avatar billede cronick Nybegynder
29. juni 2007 - 00:54 #5
Du kan vel bare sætte en bestemt bredde (eks: width: 150px;), og dernæst tilføje din overflow. Mener da, at det plejer at virke.. :)
Avatar billede jakobdo Ekspert
29. juni 2007 - 08:19 #6
Cronick har jo ret. (igen)

<select style="width:150px; overflow:auto;">
<option>NOGET MEGET LANGT OG LÆKKERT</option>
</select>

Dette virker ihf.
Avatar billede olzen Nybegynder
29. juni 2007 - 08:58 #7
Problemet er at hvis jeg sætter en width på, så bliver den <select> jo altid 150px og den bliver som sagt brugt andre steder på site også.. Og de vil jo så også bliver 150px..

Derfor tænkte jeg om man kunne flette noget ind i:

<?php echo tep_draw_pull_down_menu('id[' . $products_options_name['products_options_id'] . ']', $products_options_array, $selected_attribute); ?>
Avatar billede majbom Novice
29. juni 2007 - 09:04 #8
hvad med at sætte $parameters til: "style=\"width:150px; overflow:auto;\""; ?
Avatar billede cronick Nybegynder
29. juni 2007 - 09:30 #9
Præcis. Du kan vel flette det ind i din funktion - ellers kan du sætte den til 100% (dvs. som standard), og dernæst lade din select vare inde i en afgrænset div eller tabel. Det kræver dog, at du gør det på alle dine sider.
Avatar billede olzen Nybegynder
29. juni 2007 - 09:34 #10
Er detsværre ikke så hård til det - så kunne du prøve og sætte den med parameter ind i min streng ovenfor.. ? :-)
Avatar billede majbom Novice
29. juni 2007 - 09:51 #11
jeg kan ikke se hvorfor du echo'er din funktion... men hvis vi tager udgang i det du postede i starten, så prøv at sæt denne linje ind:
$parameters = "style=\"width:150px; overflow:auto;\"";
på linje 264...
Avatar billede cronick Nybegynder
29. juni 2007 - 10:10 #12
Hvis han ikke echo'ede sin funktion ud (som det ses i starten af hans spørgsmål), ville funktionen ikke give noget. Den ville tilbageholde variablen $field, idet den i funktionen kun bliver returneret?
Avatar billede majbom Novice
02. juli 2007 - 08:57 #13
har du fået det til at virke olzen?
Avatar billede olzen Nybegynder
02. juli 2007 - 11:17 #14
Jeg har desværre ikke kunne få det til at virke ordentlig.. Jeg har prøvet og sætte tingene ind i $parameters som set her:

function tep_draw_pull_down_menu($name, $values, $default = '', $parameters = 'style=\"width:150px; overflow:auto;\"', $required = false) {

Det virkede dog ikke.. I stedet prøvede jeg at sætte det ind i selve select som var lige nedenunder, som her:

  function tep_draw_pull_down_menu($name, $values, $default = '', $parameters = '', $required = false) {
    $field = '<select style="width:150px; overflow:auto;" name="' . tep_output_string($name) . '"';

Det virkede sådan set fint nok.. Men mit problem består i at der er mange dropdown bokse rundt omkring, og ved at sætte den ind der, så bliver alle bokse 150px.. Og det skubber så designet ligeså meget som ikke at have det på.. :-)

Derfor var mit håb at man kunne style det oppe der hvor dropdownboksen bliver sat ind.. Håber dette kan hjælpe lidt videre.. :-)
Avatar billede jakobdo Ekspert
02. juli 2007 - 11:24 #15
Du skal ikke lave det sådan her:

function tep_draw_pull_down_menu($name, $values, $default = '', $parameters = 'style=\"width:150px; overflow:auto;\"', $required = false) {

Meningen er du skal gøre det sådan her:

<?php echo tep_draw_pull_down_menu('id[' . $products_options_name['products_options_id'] . ']', $products_options_array, $selected_attribute,'style=\"width:150px; overflow:auto;\"'); ?>
Avatar billede olzen Nybegynder
02. juli 2007 - 11:40 #16
Hejsa,

Det har jeg nu prøvet - dog uden held.. Der sker ingenting ved at tilføje det..
Avatar billede jakobdo Ekspert
02. juli 2007 - 11:45 #17
Prøv lige:

<?php echo tep_draw_pull_down_menu('id[' . $products_options_name['products_options_id'] . ']', $products_options_array, $selected_attribute,'style="width:150px; overflow:auto;"'); ?>

Altså uden \" men kun med "
Avatar billede olzen Nybegynder
02. juli 2007 - 11:51 #18
PERFEKT!!! :-) Så virker det.. Smid et svar. :-)
Avatar billede jakobdo Ekspert
02. juli 2007 - 11:54 #19
Du får et svar.
Husk dog at beløn: splazz, da han jo kom med guldkornet.
Avatar billede olzen Nybegynder
02. juli 2007 - 11:57 #20
Jamen hvis i er tilfreds med 100 hver, så er de klar til jer.. Kan ikke gennemskue om der er nogen der fortjener mere end andre.. :-)
Avatar billede cronick Nybegynder
02. juli 2007 - 13:35 #21
Ikke fordi jeg ønsker point, men vil da lige sige; "så lidt", da jeg da trods alt fik jer "videre".. :)
Avatar billede olzen Nybegynder
02. juli 2007 - 13:37 #22
Kan jeg sætte flere point af til jer.. ? Du skal da være velkommen til at smide et svar også, så får du også point..
Avatar billede cronick Nybegynder
02. juli 2007 - 13:38 #23
Og forresten - en anden løsning kunne have været, at du havde impliceret en "value" i din option, og så have brugt sub_str på selve teksten der bliver vist.
Avatar billede majbom Novice
02. juli 2007 - 14:17 #24
du får lige et svar her osse så :)
Avatar billede jakobdo Ekspert
02. juli 2007 - 14:58 #25
Takker for point.
Avatar billede majbom Novice
02. juli 2007 - 15:01 #26
takker :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester