Legumes html modules php name. Skapa din egen kromstil för moduler
Vi har repat ytan på metoderna för att återge innehåll i mallens kropp. Låt oss nu titta närmare på vad det är och vad det äts med. Så metoddeklarationerna jdoc finns i varje Joomla-mall och visa den här eller den informationen i mallen (det vill säga på webbplatsens sida). I allmänhet ser metoddeklarationen ut så här
Denna rad visar information från komponenter på webbplatsen, till exempel artiklar från com_content. Typen av utdataelement anges i attributet.
1.type - typer av utdataelement.
- komponent - som jag skrev ovan, visar sidans huvudinnehåll. Kan bara anropas en gång per mall.
- huvud - förklarade detsamma en gång efter inledningen ... Fungerar för att mata ut stilar, skript,
och metadata för den aktuella sidan. - meddelande- visar systemmeddelanden. Det förklaras en gång i själva dokumentet.
- installation - matar inte ut något och är en "instruktion" för installation.
- modul -visar en enda modul på sidan. Antalet annonser är inte begränsat.
- moduler - till skillnad från den tidigare typen tillåter det att visa inte ett enda antal moduler i sin position.
För de första fyra angivna typerna räcker det bara att ange dem på sidan. När det gäller en modultyp är uppgiften lite mer komplicerad. För att kunna visa en modul på sidan måste vi först skapa för den modulär position från unik identifierare (modulpositionens namn). Detta görs med attributnamnet \u003d "positionsnamn" och det obligatoriska tillägget av raden:
2. stil - beskrivning av utdatastilen (mod krom).
Beror på den angivna stilen utseende och modulomslagets struktur. Ser ut som
:
- xhtml - matar ut modulen i ett block med titelfunktionen modChrome_xhtml ($ module, & $ params, & $ attribs)
{
om (! tomt ($ modul-\u003e innehåll)):?\u003e
showtitle! \u003d 0):?\u003e
titel; ?\u003e
innehåll; ?\u003e
} - bord -visar modulen i tabellstrukturens layout
function modChrome_table ($ module, & $ params, & $ attribs)
{ ?>
showtitle! \u003d 0):?\u003e
titel; ?\u003e
innehåll; ?\u003e
} - horz -visar innehållet i en modul i en tabellcell, fungerar horisontellt modChrome_horz ($ module, & $ params, & $ attribs)
{ ?>
} - avrundad - visar modulen i flera kapslade block för komplex styling i form av grafiska gränser (t.ex. rundade hörn) funktion modChrome_rounded ($ module, & $ params, & $ attribs)
{ ?>
showtitle! \u003d 0):?\u003e
titel; ?\u003e
innehåll; ?\u003e
} - översikt - lägger till förinställda css-stilar till modulblockfunktionen modChrome_outline ($ module, & $ params, & $ attribs)
{
statisk $ css \u003d falsk;
om (! $ css)
{
$ css \u003d sant;
jimport ("joomla.environment.browser");
$ doc \u003d JFactory :: getDocument ();
$ webbläsare \u003d JBrowser :: getInstance ();
$ doc-\u003e addStyleDeclaration (". mod-preview-info (vaddering: 2px 4px 2px 4px; kant: 1px fast svart; position: absolut; bakgrundsfärg: vit; färg: röd;)");
$ doc-\u003e addStyleDeclaration (". mod-preview-wrapper (bakgrundsfärg: #eee; border: 1px prickad svart; färg: # 700;)");
if ($ browser-\u003e getBrowser () \u003d\u003d "msie")
{
if ($ browser-\u003e getMajor ()<= 7) {
$ doc-\u003e addStyleDeclaration (". mod-preview-info (filter: alpha (opacity \u003d 80);)");
$ doc-\u003e addStyleDeclaration (". mod-preview-wrapper (filter: alpha (opacity \u003d 50);)");
}
annat (
$ doc-\u003e addStyleDeclaration (". mod-preview-info (-ms-filter: alpha (opacity \u003d 80);)");
$ doc-\u003e addStyleDeclaration (". mod-preview-wrapper (-ms-filter: alpha (opacity \u003d 50);)");
}
}
annan
{
$ doc-\u003e addStyleDeclaration (". mod-preview-info (opacitet: 0,8;)");
$ doc-\u003e addStyleDeclaration (". mod-preview-wrapper (opacitet: 0,5;)");
}
}
?>
position. "[". $ module-\u003e style. "]"; ?\u003e
innehåll; ?\u003e
} - ingen - liknar stil som inte har specificerats alls. Matar ut en modul utan styling eller titelfunktion modChrome_none ($ module, & $ params, & $ attribs)
{
echo $ module-\u003e content;
}
Alla förinställda stilar finns i mallar / system / html / modules.php-fil. Men vi är inte begränsade till att bara använda de angivna alternativen, men vi kan enkelt skapa våra egna.
3. Skapa ett anpassat kromläge.
Så, standardmodulvystyperna uppfyller inte de aktuella kraven. Du måste lägga till din egen designstil. Låt oss som exempel ta en ganska ofta återkommande situation. På uppdrag istället för
sätt modulhuvudet i taggen vilket är semantiskt neutralt. Det krävs också att placera modulens innehållsblock i en separat ... För att skapa vår egen stil för modulutdata använder vi standardverktygen. De flesta Joomla-mallar har en mapp html / (mallar / mallnamn / html /), som används för så kallad mallning. Det vill säga om du kopierar modulmallen till den här mappen, kommer istället för mallen från modulerna / my_module / tmpl / standardkatalogen att filen från mallar / mallnamn / html / my_modules / default matas ut. Komponenter mallas på samma sätt. Bekvämt och praktiskt. Skapa filen modules.php i html / mappen i din mall. Om det inte finns någon sådan mapp i mallen skapar vi den. Vi skriver till filen function modChrome_modbox ($ module, & $ params, & $ attribs) // Ring funktionen
{
if (! tom ($ modul-\u003e innehåll)): / * Kontrollera om positionen innehåller en aktiverad modul * /?\u003e
showtitle! \u003d 0): / * kontrollera om modulhuvudet ingår * /?\u003e
titel; / * Skriv ut titeln * /?\u003e
innehåll; / * Skriv ut innehållet i modulen * /?\u003e
}
?\u003e Klar. Nu behöver du bara ange det som utdatastil. Vi tilldelar en modul till vår position och ser resultatet.
Em-elementet representerar en bit text med en understruken accent. Du kan använda den för att göra läsaren uppmärksam på innebörden av en mening eller ett stycke. Jag berättar vad det betyder när em-elementet har beskrivits.
Tabell 8-6: Em-elementet
Bild 8-3: Använda em-elementet
I detta exempel lägger jag tonvikten på I (I) i början av meningen. När vi tänker på em-elementet, när vi säger en mening högt, överväger vi frågan om denna mening är svaret på en fråga. Tänk dig till exempel att jag frågade "Vem gillar äpplen och apelsiner?" Ditt svar kommer att vara: "Jag älskar äpplen och apelsiner." (När du säger detta högt och lägger tonvikten på Självet, gör du det klart att du är personen som älskar dessa frukter).
Men om jag frågade: "Gillar du äpplen och vad mer?" Du kanske svarar: "Jag älskar äpplen och apelsiner." I det här fallet kommer tonvikten att ligga på det sista ordet och betona att apelsiner är den andra frukten du gillar. Denna HTML-version skulle se ut så här:
Jag gillar äpplen och
apelsiner
.
Definition av främmande ord och tekniska termer
I-elementet betecknar en bit text som har en annan natur än det omgivande innehållet. Detta är en ganska vag definition, men vanliga exempel inkluderar ord från andra språk, tekniska eller vetenskapliga termer och till och med mänskliga tankar (i motsats till tal). Punkt i beskrivs.
Tabell 8-7: Element i
Bild 8-5: Använd s-elementet
![](https://i2.wp.com/storage.smarly.net/html5/8.5.png)
Definition av viktig text
Det starka elementet betecknar ett avsnitt som är viktigt. Denna artikel beskrivs i.
Tabell 8-9: Starkt element
Bild 8-7: Använda u-elementet
![](https://i2.wp.com/storage.smarly.net/html5/8.7.png)
Lägger till små bokstäver
Det lilla elementet betecknar små bokstäver och används ofta för försiktighetsåtgärder och förtydliganden. Det lilla elementet är representerat.
Tabell 8-11: Litet element
Bild 8-8: Använda det lilla elementet
![](https://i2.wp.com/storage.smarly.net/html5/8.8.png)
Lägga till superscript och subscript
Du kan använda sub- och sup-elementen för att beteckna ett superscript respektive ett subscript. Överskrifter används för att stava ord på vissa språk, medan både övertryck och prenumerationer används i enkla matematiska uttryck. Dessa element presenteras i.
Tabell 8-12: Del- och sup-elementen
Bild 8-9: Använda sub- och sup-elementen
Chrome är den slutliga bearbetningen av modulens html-kod innan den sätts in i mallens huvudsida. Det finns flera fördefinierade Chrome-stilar (tabell, horz, xhtml, rundad, kontur), men inte alltid vad som är lämpligt för den aktuella uppgiften.
För att definiera din egen visningsstil i en mall måste du skapa en "modules.php" -fil i "html" -katalogen. Det vill säga, för en mall med namnet "min_mall" bör filen finnas här - "mallar / min_mall / html / modules.php".
I den här filen måste du definiera en funktion som heter "modChrome_STYLE" där STYLE är namnet på din stil. Den här funktionen tar tre argument - $ module, & $ params och & $ attribs som visas nedan:
function modChrome_STYLE ($ module, & $ params, & $ attribs) (/ * bearbetning och utmatning av modul html-kod * /)
I den här funktionen kan du använda vilken PHP-kod som helst, samt alla parametrar för själva modulen, dess egenskaper och alla data som lagras i Joomla-databasen kommer att vara tillgängliga för dig. I grund och botten behövs bara följande
- $ module-\u003e content - innehållet i själva modulen, direkt html-kod.
- $ module-\u003e title - namnet på modulen som anges i kontrollpanelen i modulhanteraren.
- $ module-\u003e showtitle - flagga om du vill visa titel eller inte (true eller false).
Funktionen modChrome_STYLE är en vanlig php-funktion, här kan du använda absolut vilken php-kod som helst. Nedan följer ett exempel, om rubrikvisning är aktiverad i modulinställningarna, kommer rubriktexten att visas före modulinnehållet.
function modChrome_STYLE ($ module, & $ params, & $ attribs) (if ($ module-\u003e showtitle) (echo "
". $ module-\u003e title."
";) echo $ module-\u003e content;)
Det är möjligt att hänvisa till alla modulparametrar. Låt oss till exempel rama in modulen med klassen
Du kan också lägga till dina egna attribut till positionskoden, som används i Chrome. För att göra detta, i positionstaggen lägg till dina egna attribut. Du kan ange godtyckliga namn på ytterligare attribut, de kommer alla att överföras till den associerande arrayen $ attribs.
Ett praktiskt exempel på en Chrome-funktion:
function modChrome_custom ($ module, $ params, $ attribs) (if (isset ($ attribs ["headerLevel"))) ($ headerLevel \u003d $ attribs ["headerLevel"];) else ($ headerLevel \u003d 3;) if (isset ($ attribs ["background"])) ($ background \u003d $ attribs ["background"];) else ($ background \u003d "blue";) echo "
"; if ($ module-\u003e showtitle) (echo" ". $ module-\u003e title." ";) eko" "; echo $ module-\u003e content; echo""; eko"";
}
Praktiska exempel på att använda funktionen "modChrome_custom"
En av de största styrkorna med PHP är hur den hanterar HTML-formulär. Huvudpoängen här är att varje formulärelement automatiskt görs tillgängligt för dina PHP-program. För mer information om hur du använder formulär i PHP, läs avsnittet. Här är ett exempel på HTML-formulär:
Exempel 1 Grundläggande HTML-formulär
Det finns inget speciellt med denna form. Detta är ett vanligt HTML-formulär utan några speciella taggar. När användaren fyller i formuläret och klickar på knappen Skicka kommer action.php-sidan att anropas. Den här filen kan innehålla något som:
Exempel # 2 Visar formulärdata
Hallå,
.
Du år.
Ett exempel på resultatet av detta program:
Hej Sergey. Du är 30 år gammal.
Om du inte tar hänsyn till kodbitarna med htmlspecialchars ()
och (int)bör principen för driften av denna kod vara enkel och okomplicerad. htmlspecialchars ()
Säkerställer att "speciella" HTML-tecken är korrekt kodade så att ingen skadlig HTML eller Javascript sätts in på din sida. Åldersfältet, som vi vet är ett tal, kan vi bara omvandla i heltal
, vilket automatiskt sparar oss från oönskade karaktärer. PHP kan också göra detta automatiskt med hjälp av tillägget filtrera ... Variabler $ _POST ["namn"] och $ _POST ["ålder"] installeras automatiskt åt dig med hjälp av PHP. Vi använde tidigare den superglobala variabeln $ _SERVER , här använder vi superglobalen på samma sätt $ _POST som innehåller alla POST-data. Lägg märke till att leveransmetod (metod) i vårt formulär är POST. Om vi \u200b\u200banvände metoden SKAFFA SIG, då skulle vår formulärinformation vara i superglobalen $ _FÅ ... Dessutom kan du använda variabeln $ _FÖRFRÅN om datakällan är irrelevant. Denna variabel innehåller en blandning av GET, POST, COOKIE-data.
15 år sedan
Enligt HTTP-specifikationen ska du använda POST-metoden när du använder formuläret för att ändra tillståndet för något på serverns ände. Till exempel om en sida har ett formulär för att tillåta användare att lägga till egna kommentarer, så här sida här, ska formuläret använda POST. Om du klickar på "Ladda om" eller "Uppdatera" på en sida som du har nått genom en POST är det nästan alltid ett fel - du borde inte lägga upp samma kommentar två gånger - vilket är varför dessa sidor inte är bokmärkta eller cachade.
Du bör använda GET-metoden när ditt formulär är, ja, ta bort något från servern och egentligen inte ändra någonting. Till exempel bör formuläret för en sökmotor använda GET, eftersom sökning på en webbplats inte borde ändra något som klienten kanske bryr sig om, och bokmärkning eller cachning av resultaten från en sökmotorfråga är lika användbart som bokmärkning eller cachning en statisk HTML-sida.
2 år sedan
Värt att förtydliga:
POST är inte säkrare än GET.
Anledningarna till att välja GET vs POST involverar olika faktorer, såsom avsikten med förfrågan (skickar du information)? Storleken på begäran (det finns gränser för hur länge en URL kan vara och GET-parametrar skickas URL), och hur lätt du vill att åtgärden ska delas - Exempel: Google-sökningar GET eftersom det gör det enkelt att kopiera och dela sökfrågan med någon annan genom att bara dela webbadressen.
Säkerhet är bara ett övervägande här på grund av det faktum att en GET är lättare att dela än en POST. Exempel: du vill inte att ett lösenord ska skickas av GET, eftersom användaren kan dela den resulterande URL: n och oavsiktligt avslöja sitt lösenord.
En GET och en POST är dock lika lätt att fånga upp av en välplacerad skadlig person om du inte distribuerar TLS / SSL för att skydda nätverksanslutningen.
Alla formulär som skickas via HTTP (vanligtvis port 80) är osäkra, och idag (2017) finns det inte många goda skäl för en offentlig webbplats att inte använda HTTPS (vilket i grunden är HTTP + Transport Layer Security).
Som en bonus, om du använder TLS minimerar du risken för att användarna får kod (AD) injiceras i din trafik som inte placerades där av dig.
function modChrome_modbox ($ module, & $ params, & $ attribs) // Ring funktionen
{
if (! tom ($ modul-\u003e innehåll)): / * Kontrollera om positionen innehåller en aktiverad modul * /?\u003e
titel; / * Skriv ut titeln * /?\u003e
innehåll; / * Skriv ut innehållet i modulen * /?\u003e
}
?\u003e Klar. Nu behöver du bara ange det som utdatastil.
Em-elementet representerar en bit text med en understruken accent. Du kan använda den för att göra läsaren uppmärksam på innebörden av en mening eller ett stycke. Jag berättar vad det betyder när em-elementet har beskrivits.
Tabell 8-6: Em-elementet
Bild 8-3: Använda em-elementet
I detta exempel lägger jag tonvikten på I (I) i början av meningen. När vi tänker på em-elementet, när vi säger en mening högt, överväger vi frågan om denna mening är svaret på en fråga. Tänk dig till exempel att jag frågade "Vem gillar äpplen och apelsiner?" Ditt svar kommer att vara: "Jag älskar äpplen och apelsiner." (När du säger detta högt och lägger tonvikten på Självet, gör du det klart att du är personen som älskar dessa frukter).
Men om jag frågade: "Gillar du äpplen och vad mer?" Du kanske svarar: "Jag älskar äpplen och apelsiner." I det här fallet kommer tonvikten att ligga på det sista ordet och betona att apelsiner är den andra frukten du gillar. Denna HTML-version skulle se ut så här:
Jag gillar äpplen och apelsiner .
Definition av främmande ord och tekniska termer
I-elementet betecknar en bit text som har en annan natur än det omgivande innehållet. Detta är en ganska vag definition, men vanliga exempel inkluderar ord från andra språk, tekniska eller vetenskapliga termer och till och med mänskliga tankar (i motsats till tal). Punkt i beskrivs.
Tabell 8-7: Element i
Bild 8-5: Använd s-elementet
![](https://i2.wp.com/storage.smarly.net/html5/8.5.png)
Definition av viktig text
Det starka elementet betecknar ett avsnitt som är viktigt. Denna artikel beskrivs i.
Tabell 8-9: Starkt element
Bild 8-7: Använda u-elementet
![](https://i2.wp.com/storage.smarly.net/html5/8.7.png)
Lägger till små bokstäver
Det lilla elementet betecknar små bokstäver och används ofta för försiktighetsåtgärder och förtydliganden. Det lilla elementet är representerat.
Tabell 8-11: Litet element
Bild 8-8: Använda det lilla elementet
![](https://i2.wp.com/storage.smarly.net/html5/8.8.png)
Lägga till superscript och subscript
Du kan använda sub- och sup-elementen för att beteckna ett superscript respektive ett subscript. Överskrifter används för att stava ord på vissa språk, medan både övertryck och prenumerationer används i enkla matematiska uttryck. Dessa element presenteras i.
Tabell 8-12: Del- och sup-elementen
Bild 8-9: Använda sub- och sup-elementen
![](https://i0.wp.com/storage.smarly.net/html5/8.9.png)
Chrome är den slutliga bearbetningen av modulens html-kod innan den sätts in i mallens huvudsida. Det finns flera fördefinierade Chrome-stilar (tabell, horz, xhtml, rundad, kontur), men inte alltid vad som är lämpligt för den aktuella uppgiften.
För att definiera din egen visningsstil i en mall måste du skapa en "modules.php" -fil i "html" -katalogen. Det vill säga, för en mall med namnet "min_mall" bör filen finnas här - "mallar / min_mall / html / modules.php".
I den här filen måste du definiera en funktion som heter "modChrome_STYLE" där STYLE är namnet på din stil. Den här funktionen tar tre argument - $ module, & $ params och & $ attribs som visas nedan:
function modChrome_STYLE ($ module, & $ params, & $ attribs) (/ * bearbetning och utmatning av modul html-kod * /)
I den här funktionen kan du använda vilken PHP-kod som helst, samt alla parametrar för själva modulen, dess egenskaper och alla data som lagras i Joomla-databasen kommer att vara tillgängliga för dig. I grund och botten behövs bara följande
- $ module-\u003e content - innehållet i själva modulen, direkt html-kod.
- $ module-\u003e title - namnet på modulen som anges i kontrollpanelen i modulhanteraren.
- $ module-\u003e showtitle - flagga om du vill visa titel eller inte (true eller false).
Funktionen modChrome_STYLE är en vanlig php-funktion, här kan du använda absolut vilken php-kod som helst. Nedan följer ett exempel, om rubrikvisning är aktiverad i modulinställningarna, kommer rubriktexten att visas före modulinnehållet.
function modChrome_STYLE ($ module, & $ params, & $ attribs) (if ($ module-\u003e showtitle) (echo "
". $ module-\u003e title."
";) echo $ module-\u003e content;)Det är möjligt att hänvisa till alla modulparametrar. Låt oss till exempel rama in modulen med klassen
Du kan också lägga till dina egna attribut till positionskoden, som används i Chrome. För att göra detta, i positionstaggen
Ett praktiskt exempel på en Chrome-funktion:
function modChrome_custom ($ module, $ params, $ attribs) (if (isset ($ attribs ["headerLevel"))) ($ headerLevel \u003d $ attribs ["headerLevel"];) else ($ headerLevel \u003d 3;) if (isset ($ attribs ["background"])) ($ background \u003d $ attribs ["background"];) else ($ background \u003d "blue";) echo "
Praktiska exempel på att använda funktionen "modChrome_custom"
En av de största styrkorna med PHP är hur den hanterar HTML-formulär. Huvudpoängen här är att varje formulärelement automatiskt görs tillgängligt för dina PHP-program. För mer information om hur du använder formulär i PHP, läs avsnittet. Här är ett exempel på HTML-formulär:
Exempel 1 Grundläggande HTML-formulär
Det finns inget speciellt med denna form. Detta är ett vanligt HTML-formulär utan några speciella taggar. När användaren fyller i formuläret och klickar på knappen Skicka kommer action.php-sidan att anropas. Den här filen kan innehålla något som:
Exempel # 2 Visar formulärdata
Hallå,
.
Du år.
Ett exempel på resultatet av detta program:
Hej Sergey. Du är 30 år gammal.
Om du inte tar hänsyn till kodbitarna med htmlspecialchars () och (int)bör principen för driften av denna kod vara enkel och okomplicerad. htmlspecialchars () Säkerställer att "speciella" HTML-tecken är korrekt kodade så att ingen skadlig HTML eller Javascript sätts in på din sida. Åldersfältet, som vi vet är ett tal, kan vi bara omvandla i heltal , vilket automatiskt sparar oss från oönskade karaktärer. PHP kan också göra detta automatiskt med hjälp av tillägget filtrera ... Variabler $ _POST ["namn"] och $ _POST ["ålder"] installeras automatiskt åt dig med hjälp av PHP. Vi använde tidigare den superglobala variabeln $ _SERVER , här använder vi superglobalen på samma sätt $ _POST som innehåller alla POST-data. Lägg märke till att leveransmetod (metod) i vårt formulär är POST. Om vi \u200b\u200banvände metoden SKAFFA SIG, då skulle vår formulärinformation vara i superglobalen $ _FÅ ... Dessutom kan du använda variabeln $ _FÖRFRÅN om datakällan är irrelevant. Denna variabel innehåller en blandning av GET, POST, COOKIE-data.
15 år sedan
Enligt HTTP-specifikationen ska du använda POST-metoden när du använder formuläret för att ändra tillståndet för något på serverns ände. Till exempel om en sida har ett formulär för att tillåta användare att lägga till egna kommentarer, så här sida här, ska formuläret använda POST. Om du klickar på "Ladda om" eller "Uppdatera" på en sida som du har nått genom en POST är det nästan alltid ett fel - du borde inte lägga upp samma kommentar två gånger - vilket är varför dessa sidor inte är bokmärkta eller cachade.
Du bör använda GET-metoden när ditt formulär är, ja, ta bort något från servern och egentligen inte ändra någonting. Till exempel bör formuläret för en sökmotor använda GET, eftersom sökning på en webbplats inte borde ändra något som klienten kanske bryr sig om, och bokmärkning eller cachning av resultaten från en sökmotorfråga är lika användbart som bokmärkning eller cachning en statisk HTML-sida.
2 år sedan
Värt att förtydliga:
POST är inte säkrare än GET.
Anledningarna till att välja GET vs POST involverar olika faktorer, såsom avsikten med förfrågan (skickar du information)? Storleken på begäran (det finns gränser för hur länge en URL kan vara och GET-parametrar skickas URL), och hur lätt du vill att åtgärden ska delas - Exempel: Google-sökningar GET eftersom det gör det enkelt att kopiera och dela sökfrågan med någon annan genom att bara dela webbadressen.
Säkerhet är bara ett övervägande här på grund av det faktum att en GET är lättare att dela än en POST. Exempel: du vill inte att ett lösenord ska skickas av GET, eftersom användaren kan dela den resulterande URL: n och oavsiktligt avslöja sitt lösenord.
En GET och en POST är dock lika lätt att fånga upp av en välplacerad skadlig person om du inte distribuerar TLS / SSL för att skydda nätverksanslutningen.
Alla formulär som skickas via HTTP (vanligtvis port 80) är osäkra, och idag (2017) finns det inte många goda skäl för en offentlig webbplats att inte använda HTTPS (vilket i grunden är HTTP + Transport Layer Security).
Som en bonus, om du använder TLS minimerar du risken för att användarna får kod (AD) injiceras i din trafik som inte placerades där av dig.