Hur gör jag en function av detta?

PHPportalen Forum Index » PHP
Lägg ett bokmärke på hela tråden
Skapa nytt inlägg   Svara på inlägget
Visa föregående ämne :: Visa nästa ämne  
Startad av: Meddelande
marcusgarden



Medlem i: 3225 dagar

Status: Offline



#742448
Inlägg Skrivet: 2019-01-21 00:34      Ämne: Hur gör jag en function av detta? Citera

Jag har en kodsnutt där jag skapar en dropdown, denna kodsnutt har jag på flera olika ställen och koden upprepas då flera gånger, jag vill lära mig att minimera kodningen så hur gör jag en function av detta?



KOD:
1:
<SELECT name="this_id[]">
2:
                                 <OPTION value="0">0</OPTION>
3:
                                 <?php foreach ($this->number_of_ids as $id)
4:
                                            {
5:
                                               
6:
                                    if($klass2->id == $id->id){$selected = 'selected';}else{$selected = '';} ?>
7:
                                                <OPTION value="<?php echo $id->id; ?>" <?php echo $selected; ?>><?php echo $id->id_nr; ?></OPTION>
8:
                                            <?php
9:
                                            }
10:
                                 if($klass2->id == 0){$numberof0++;}
11:
                                            ?>
12:
                                            </SELECT>


Så att jag kan använda ungefär

function writeDropdown($id_id, $id_nr)
{
...här ska en dropdown skapas
}

writeDropdown($array[$i3]['id'], $ids[$i3]['id']);

Tack på förhand!
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
webbhelp



Medlem i: 4443 dagar
Från: Sverige
Status: Offline



#742449
Inlägg Skrivet: 2019-01-21 10:01      Ämne: Citera

Att placera markup/html i en funktion är inget jag rekommenderar.
Däremot kan du lägga det i en egen PHP fil och använda som en komponent.
När du sen behöver select:en så inkluderar du bara filen.
KOD:
1:
include('components/custom-select.php')


Extra:
Det är lite märkligt att använda uppercase på html taggar idag.
Jag har själv inte något jättebra referens till varför du bör undvika det. Det är nog mest att det är väldigt sällsynt att se det numera.
Det skrivs lite om det här:
https://stackoverflow.com/a/19808671/5290444
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Skicka e-post Besök användarens hemsida MSN Messenger
harald_b
Moderator



Medlem i: 4686 dagar
Från: Tavesta
Status: Offline



#742450
Inlägg Skrivet: 2019-01-21 14:49      Ämne: Citera

Det bästa argumentet jag känner till för att använda gemener i taggarna (och xml-syntax i övrigt) är att kunna bearbeta koden med verktyg avsedda för xml.
Du får helt enkelt en kod som är mer mångsidigt användbar till en mycket litet extraarbete.
Dessutom blir det lättare att läsa koden om man följer de etablerade konventionerna i hur den skall skrivas.
 

_________________
R.r - Ett fritt affärssystem
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Wedge
Administratör



Medlem i: 6079 dagar
Från: Järfälla
Status: Offline



#742467
Inlägg Skrivet: 2019-02-04 13:57      Ämne: Citera

webbhelp skrev:

Däremot kan du lägga det i en egen PHP fil och använda som en komponent.
När du sen behöver select:en så inkluderar du bara filen.
KOD:
1:
include('components/custom-select.php')


Det löser problemet med att skriva upprepad kod, men funkar det?
Hur parametriserar du "komponenten"? Utan att veta hur koden runtomkring ser ut kan jag bara säga att kodstycket som sådant nyttjar en hel hoper in- och utvariabler, plus att det använder egna temporära variabler där risken är stor att det finns "riktiga och viktiga" variabler med samma namn. Nedskitning av sin egen context är IMO värre än att ha en funktion som genererar HTML.
En funktion låter som en bra tanke, tycker jag.
 

_________________
I am Groot
Till toppen på sidan
Visa användarprofil Skicka privat meddelande MSN Messenger
webbhelp



Medlem i: 4443 dagar
Från: Sverige
Status: Offline



#742469
Inlägg Skrivet: 2019-02-04 16:36      Ämne: Citera

Jag tycker det du skriver är bra Wedge och jag håller med. Ingen av lösningarna är bra men att lägga det i en include och vara beroende av variabler utanför "komponenten" är väldigt osäkert.

Att använda en template engine är ju att rekommendera, men det är nog inte ett alternativ i detta fallet så jag har en tredje lösning som kan vara ett intressant sätt att lösa det på.

KOD:
1:
function component(string $path, array $data = [])
2:
{
3:
    extract($data);
4:
    include($path);
5:
}


Argument 1: Filens sökväg
Argument 2: En array med variabler som ska vara tillgängliga för just den komponenten.

Då funktionen är i ett eget scope så kommer den inte åt variabler utanför det scopet. Du skickar alltså in de variabler du behöver i komponenten.
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Skicka e-post Besök användarens hemsida MSN Messenger
Visa tidigare inlägg:   
Skapa nytt inlägg   Svara på inlägget
PHPportalen Forum Index » PHP
Hoppa till:  
Du kan inte skapa nya inlägg i det här forumet
Du kan inte svara på inlägg i det här forumet
Du kan inte ändra dina inlägg i det här forumet
Du kan inte ta bort dina inlägg i det här forumet
Du kan inte rösta i det här forumet
Du kan inte bifoga filer i detta forum
Du kan inte ladda ner filer från detta forum
Kontakta oss på adressen: info@phpportalen.net
Webbplatsen bygger i grunden på phpBB © 2001, 2002 phpBB Group

Modifieringar har senare gjorts i systemet av PHPportalen
Sid och logotypdesign skapad av Daren Jularic