SWFAddress, SEO och Flex Datagrid för Cut and Paste Coders

I den här artikeln visas hur du skapar djupkoppling i din Flex-applikation som kan ses av slutanvändare såväl som sökmotorer.

Det är en handledning huvudsakligen för alla andra cut-and-pasters där ute som inte har tid eller energi för att verkligen lära sig att skapa en proxy-klass för användning med SWFAddress, och är troligtvis inte programmerare av handel.


Slutresultatförhandsvisning

Låt oss ta en titt på det slutliga resultatet vi kommer att arbeta för, märka hur webbläsarfältet speglar sidans titel, Början:

Ladda ner källfilerna och använd dem som referens medan du läser denna handledning.


Bakgrund

Det här är min första Flex-handledning, och en jag kan bara skriva efter att ha angett följande granskning: Jag är egentligen bara en cut-and-paste-kodare, om än en med nästan 10 år av AS1, AS2 och nu AS3-erfarenhet, vilket har gett Jag har en ganska bra komfortnivå med den. Jag skriver några funktioner, om-uttalanden, vars och sådana saker - men jag är mer en hackmeister än någonting, vilket ibland leder till kreativ kodning, medan andra gånger leder till bortkastad tid på saker jag inte har läs noga om innan du experimenterar med!

Deep linking handlar om mycket mer än bara SEO; Det handlar om användbarhet. Jag tycker mycket mer om användbarhet efter att ha byggt en e-learning app. Nu märker jag när en Flex- eller Flash-app ger dig dig helt ur appen när du trycker på bakåtknappen och tänker på hur jag inte vill att mina användare ska uppleva den irriterande. Vem vill rulla igenom alla dina lektioner och leta efter den aktivitet de vill göra igen, eller maila till sin vän?

Deep linking handlar om mycket mer än bara SEO; Det handlar om användbarhet.

Detta är en handledning huvudsakligen för alla andra cut-and-pasters där ute som inte har tid eller energi för att verkligen lära sig att skapa en proxyklass för användning med SWFAddress, och sannolikt inte programmerare genom handel. Även om jag kan uppskatta några av handledningarna från SWFAddress-webbplatsen som ger en hel del tekniska detaljer om varför du måste göra saker ordentligt och hur dåliga metoder kommer att bryta din app, etc - ibland behöver en person bara ett sätt att göra saker arbeta på ett sätt som de kan förstå. Några av de artiklarna får dig att tro att du inte kan få djupkoppling att fungera om du inte kan skriva själv kod.

Anledningen till att jag ska dela min kodning erfarenhet på detta är att jag googled heck ut av SWFAddress, datagrid och Flex, till ingen nytta. Jag hittade inga direkta exempel på någon som använder SWFAddress för att skapa dynamiska webbadresser från deras datagrid inom sin Flex-app. Min man skojade att det måste vara för att det är så uppenbart att ingen har stört att blogga om det, men som du kan hitta Flex-exempel, handledning och kod för nästan alla grundläggande kodningsfrågor tvivlar jag mycket på det. Så här går du!


Steg 1: Samla dina verktyg

Du behöver följande saker för att slutföra denna handledning:

  1. Din Flex / Flash-byggnad IDE (till exempel: Flex Builder, Flash, FlashDevelop).
  2. SWFAddress 2.4 och SWFObject 2.2
  3. GAforFlash (Google Analytics-spårning för Adobe Flash).
  4. En bra kalkylark app.
  5. En Apache eller PHP-konfiguration du kan testa med eller webbplats du kan ladda upp och testa till.
  6. En bra sökning och ersättningsredaktör som Notepad ++ för att rensa upp texten du tar ut av kalkylbladen.
  7. Den gratis Vigos Gsitemap skaparen.

Du kan också hämta filpaketet för den här handledningen, som innehåller en nyckelfil som innehåller ActionScript-exemplen nedanifrån: RoutingEvents.as.


Steg 2: Importera SWFAddress; Skapa URL-visningar

Eftersom jag fokuserar på datagrid och SEO för denna handledning Jag antar att du redan vet hur du skapar URL-vyerna för SWFAddress. Om du inte gör det kan du titta på koden för att skapa URL-vyerna i RoutingEvents.as fil som ingår i denna handledning för att se hur jag gjorde det.


Steg 3: Skapa din datagridvariabel

Jag visste av fladdermusen att jag behövde binda mina webbadresser till en variabel i XML som fyller min datagrid. Att få den variabeln att skriva till webbadressen är lätt. Jag skapade ett var från attributet som jag ville använda från XML för mina webbadresser:

 [Bindbar] privat var slug: String

Så bra kunde jag snabbt ange webbadresserna för mina datagrid-objekt, vilket omedelbart resulterade i den trevliga upplevelsen att mina datagrid-klick verkligen ändrar webbadressen i min webbläsare.

Men självklart består det av två saker: att berätta för din webbläsare vad du vill att den ska se och din webbläsare berättar för din app vad det vill se. Den andra delen visade sig vara mycket svårare.

Vad jag äntligen fick min hjärna runt efter tinkningstid var det när du navigerar till en webbadress i din app direkt från din webbläsare - din app har ingen aning om vilken data du vill att den ska visas. Din app vet bara vad du kommunicerar via webbadressen och vad du har ställt in som reglerna att följa om vissa värden hittas i den webbadressen. Så om du har mer än en datakälla eller xml-fil, som de flesta ganska komplicerade appar gör - måste du ställa in villkor för att presentera exakta data som URL-kraven är närvarande för att framgångsrikt kunna tjäna upp visningen att URL är begärande.

Först trodde jag naivt det genom att bara använda det snigel var jag kunde berätta för SWFAddress att leta efter det värdet, gå sedan till motsvarande postens indexnummer i datagrid. Men att ställa in det och att få variabeln korrekt skickad vid rätt tidpunkt - hände bara efter omfattande försök och fel. massor av Alert.show (slug) och andra varningar för att se vad som faktiskt skickades vid vilken tidpunkt och vilken bra kod jag hittade online för att matcha en datagridrad med ett visst värde och bläddra sedan till indexet för att visa värde.

Jag håller med en av de mer komplicerade artiklarna / tutorials som finns på SWFAddress webbplats: du måste välja dina variabler mycket noga när du använder dem med SWFAddress. Se till att de innehåller lite bra information - information du kan analysera till saker som sidtitlar och unika identifierare för en datagrid eller listobjekt. Min activityId variabeln från min XML visade sig vara den perfekta varan eftersom alla aktivitetslängderna för en given lektion är:

  1. unik
  2. innehålla lektionsnamnet
  3. innehålla aktivitetstypen

Några exempel på aktiviteterIds:

  • present_verbsvocab
  • present_verbsquiz
  • weather_worksheet

Denna information är nu vad SWFAddress använder för att navigera till rätt lektion såväl som enskild aktivitet.


Steg 4: Skapa en sektionsvariabel om det behövs

För andra saker som sektioner kan du ställa in dem med hjälp av SWFAddress som din setter / getter (jag använder denna term löst så ärligt, jag är inte säker på om detta uppfyller den tekniska definitionen av en setter / getter! ut med denna handledning;)]) - i mitt fall ställer jag in variabeln sektion När en användare klickar på en datagrid-post i den delen eller navigerar till en ny sektion, får jag det värdet tillbaka ur webbadressen om någon navigerar till den sektionen. I mitt fall är mina huvudavsnitt:

  • barns
  • ändpunkterna blir
  • mellanliggande
  • nyhetsbrev

Dessa avsnitt anges i min handleSWFAddress () fungera:

 privat funktionshandtagSWFAddress (händelse: SWFAddressEvent): void case "/ childrenrens": section = "childrens" break; 

Steg 5: Passera variablerna via din Datagrid Click Event

Därefter passerar jag i mitt klickhändelse för datagrid sektion och snigel variabler som URL:

 selectedRow = Row (myD slug = selectedRow.activityId; SWFAddress.setValue ("/" + avsnitt + "/" + slug);

Steg 6: Skicka din titel till webbläsaren via Datagrid Click Event

Att ställa in titeln var lite svårare eftersom jag ville använda lektionstiteln som inte är en del av den borttagna XML som jag använder för den här demoprogrammet, så jag lade till ett attribut som bara behöver vara närvarande i det första rad i min XML för att ställa in lektionstiteln.

Här är koden från min datagrid-klickhändelse som gör att detta händer:

 SWFAddress.setTitle (myDG.dataProvider.getItemAt (0) .title + "Spanish Lesson -" + selectedRow.lessonTitle);

De getItemAt (0) är en trevlig liten funktion som gjorde det möjligt för mig att placera en titel för webbläsaren i bara den första raden i varje XML-fil, vilket ger sidorna en bättre beskrivning. Nu istället för mina lektionsaktiviteter sidor läser:

Ordlighetsaktivitet

De läser:

Present Verbs Spanska Lesson - Ordförråd Aktivitet

Detta fungerar eftersom getItemAt (0) hämtar den första noden från XML-filen.


Steg 7: Analysera dina datagridvariabler i din SWFAddress Handler

Att använda din snigel värdet effektivt måste du extrahera det från din webbadress. Så slutade jag slutligen att jag behövde en ny variabel, som jag kallar slugAdd. Jag använder det här i min SWFAddress-hanterare:

 privatfunktionshandtagSWFAddress (händelse: SWFAddressEvent): void var path: String = SWFAddress.getPath (); var slugAdd: String = SWFAddress.getPath (); slugAdd = slugAdd.replace (/ \ / childrens \ // g, ""); slugAdd = slugAdd.replace (/ \ / beginning \ // g, ""); slugAdd = slugAdd.replace (/ \ / intermediate \ // g, ""); slugAdd = slugAdd.replace (/ \ / nyhetsbrev \ // g, ""); //Alert.show (slugAdd)

Denna strängparsning är så enkel här - men den måste vara exakt för att kunna fungera! Din slugAdd måste vara identisk med ditt slug-värde, så att din datagrid-matchningsfunktion fungerar, och dina webbadresser tar dig till rätt rad. Så ser lite närmare ut - vi gör en enkel String ersättning. Du tar en webbadress som:

http://www.myapp.com/main.html#/childrens/present_verbsvocab

Och när du gör det

 slugAdd = slugAdd.replace (/ \ / children \ // g, "")

Om du kör Alert.show (slugAdd) - du kommer att få

present_verbsvocab

(Jag är medveten om att min användning av underskridandet i mitt slug-värde inte är bästa metoder för att namnge konventioner för webbadresser, vilket kräver att jag använder rusa istället - men vi har över 1000 lektioner i vår huvudsakliga app som använder det här så jag klarar det).

Saken att komma ihåg om byta ut() funktionen i AS3 är att ditt String-värde måste innehålla mellan framåtskärningar -

 slugAdd.replace (/ childrenrens / g, "myReplacementText");

? och om du också vill ersätta en framåt snedstreck själv, måste du fly dessa karaktärer genom att använda en bakåt snedstreck före den. Så slutar du med

 slugAdd = slugAdd.replace (/ \ / children \ // g, "")

De g del berättar att den ska bytas ut Allt tecken och inte bara den första och den "" är för din ersättning, vilket i mitt fall inte var något värde alls. För mer information, kolla in LiveDocs på String.replace () och RegExp.

Det verkar så enkelt nu, men det tog en hel del google som letade efter mig att räkna ut att jag inte behövde använda någon stor, lång komplicerad funktion för att bara ta bort några värden från en sträng. Caramba Jag önskar att jag hade hittat en handledning så här innan jag började :) Alrighty så nu har vi vår slug eller den URL som vi hämtar från datagrids XML-fil, vidarebefordrad som en ny var kallad slugAdd. Men vi behöver fortfarande do något med denna variabel.


Steg 8: Få din Datagrid att visa rätt rad och brand eventuella händelser

Det finns i grunden tre viktiga funktioner som gör mitt SWFAddress djupt länkande arbete (jag kommer inte att täcka SWFAddress.setValue () eftersom det är så enkelt och uppenbart jag tror att en grotta man skulle kunna använda det :)

Funktion One: handleSWFAddress ()

 handleSWFAddress (event: SWFAddressEvent): void

Din arbetshorse för alla navigationsspår. Att ha det som ett evenemang verkar vara viktigt, som i början använde jag ett annat exempel på nätet som inte använde den skillnaden, och det fungerar definitivt bättre.

Funktion två: getSelectedItem ()

 getSelectedItem (): void

Detta måste kallas efter uppgifterna är redan befolkade eller i din resultathanterare för ditt dataanrop. Timing är mycket viktigt här, eller dina saker kommer inte att laddas när människor skriver webbadressen direkt i webbläsaren istället för att klicka på din app! Den här funktionen matchar en inkommande URL med ett specifikt objekt från en datagrid.

Funktion Tre: itemfromAddress ()

 itemfromAddress (): void

Detta är vad egentligen gör något med datagrid-posten - replikering av min datagrid-klickhanterare i en icke händelse funktion, eftersom du inte kan ringa en händelsebaserad funktion från en annan funktion.

Låt oss ta dessa i ordning för hur de ska användas om någon skriver in en webbadress i webbläsaren, letar efter data från din app. Eftersom denna handledning är inriktad på att navigera din datagrid - kommer jag att skicka detta exempel från min handleSWFAddress () även om du kan se resten om du tittar på RoutingEvents.as fil som ingår i nedladdningen för denna handledning.

 case "/ childrens /" + slugAdd:

Koden nedan är Google Analytics-koden som är lätt att lägga till höger bredvid SWFAddress.

 tracker.trackPageview ("/ childrenrens /" + slugAdd);

Detta if-statement kontrollerar om myURL variabel som matar min HTTPService datasamtal är vad vi behöver för det här avsnittet, och om den här variabeln inte redan är inställd beror det troligen på att användaren navigerar via URL och appen har inte laddats ännu, så vi måste berätta för appen vilken data den här webbadressen är väntar på att se. Vi vill inte ta bort den dataleverantörens data om användaren redan är i appen och navigerar genom datagriden, varför vi behöver om påstående. Också, om de har varit någonstans i vår app med andra data och navigerar via URL till den här vyn - vi måste chucka den data, uppdatera datagrid och skicka tillbaka den HTTPService datasamtal - annars kommer vi att sluta med extra data i vår datagrid som kommer att förstöra vår matchning av snigel variabler med slugAdd variabler.

 om (myUrl! = 'data / childrens_updown.xml') myUrl = 'data / childrens_updown.xml' invalidateDisplayList (); lessonsDataProvider.removeAll () lessonsDataProvider.refresh () httpService.send (); myDG.dataProvider = lessonsDataProvider; myDG.validateNow () //Alert.show("I've ändrat data till "+ myUrl)

Om användaren skriver in via URL - har de redan kört getSelectedItem () funktion i slutet av deras datasamtal. Men om dessa data redan är laddade och de fortfarande försöker navigera via webbläsaren istället för att klicka på datagriden, måste de matcha upp den webbläsarens URL med den aktivitet som webbläsaren förväntar sig att se, så vi behöver ringa den här funktionen isåfall:

 getSelectedItem () currentState = "class1State"

Vi ställer in vår sektion Variera här för att försäkra dig om att som användare klickar via appen, är rätt sektion kommer att läggas till webbadressen,

 section = "childrens" break;

Så låt oss titta på koden igen alla tillsammans:

 case "/ childrens /" + slugAdd: tracker.trackPageview ("/ childrens /" + slugAdd); om (myUrl! = 'data / childrens_updown.xml') myUrl = 'data / childrens_updown.xml' invalidateDisplayList (); lessonsDataProvider.removeAll () lessonsDataProvider.refresh () httpService.send (); myDG.dataProvider = lessonsDataProvider; myDG.validateNow () getSelectedItem () currentState = "class1State" section = "childrens" break;

Låt oss nu titta på den skönhet som verkligen gjorde det hela. Jag modifierade detta från en kod kodad av Anuj Gakhar på hans blogginmatning Flex: Så här väljer du ett föremål i DataGrid:

 privat funktion getSelectedItem (): void //Alert.show ("Jag gör en getSelectedItem") var slugAdd: String = SWFAddress.getPath (); slugAdd = slugAdd.replace (/ \ / childrens \ // g, ""); slugAdd = slugAdd.replace (/ \ / beginning \ // g, ""); slugAdd = slugAdd.replace (/ \ / intermediate \ // g, ""); slugAdd = slugAdd.replace (/ \ / nyhetsbrev \ // g, ""); //Alert.show (slugAdd) //Alert.show (myDG.dataProvider.length + "dataProvider length") var gData: Objekt = myDG.dataProvider; om (slugAdd) för (var i: int = 0; i < myDG.dataProvider.length; i++)  if (myDG.dataProvider[i].activityId == slugAdd)  myDG.selectedItem = myDG.dataProvider[i]; //Alert.show (myDG.selectedItem.activityId + " " + slugAdd + " index = " + myDG.selectedIndex) myDG.validateNow(); myDG.scrollToIndex(i); itemfromAddress()    

Dessa varningar hjälpte mig verkligen, som ursprungligen hade jag den här koden på toppen av mina handleSWFAddress () funktion, som inte fungerade. Denna funktion behövs för att ringas i slutet av min data Providerens resultathanterare, som i sin tur måste kallas av mina omkopplare som innehåller slugAdd variabel fångad av SWFAddress. Annars är uppgifterna inte kvar, och din getSelectedItem () hittar inga föremål som matchar upp till URL-värdet som har tagits.

Och slutligen hanterar funktionen som binder min SWFAddress alla tillsammans med händelser som ändrar ut vad användaren ser: itemfromAddress (). Detta ändrar lektionen SWF som visas i min SWFLoader, precis som om en användare klickade på en annan rad i datagrid.

 privat funktion itemfromAddress (): void swfLoader.unloadAndStop (); SoundMixer.stopAll (); selectedRow = Row (myDG.selectedItem); swfLoader.source = selectedRow.fileName; 

Steg 9: Se till att dataProvider är korrekt och data listas endast en gång

Jag stötte på ett annat problem: i mitt fall fann jag att laddning av data till min huvudsakliga datagrid vid appens init skulle orsaka problem när man försökte byta data när människor försöker få åtkomst till olika data direkt via URL. Samma data som skulle laddas bra när de klickade via appen blev otillgängliga om de försökte använda samma webbadress direkt på en ny sida där appen ännu inte hade laddats. Detta orsakade mig en hel dag av sorg medan jag tillfogade ännu en massa varningar till min kod och försökte ta reda på vad problemet var med datatillförseln.

Till sist, för min data Provider som är dynamisk, var jag tvungen att lämna detta tomt på init av appen. Detta innebar att ändra min startsida från en med data till en utan. Den andra lösningen kan vara att använda en annan dataleverantör, men jag bestämde mig för att jag inte behövde göra det, eftersom en statisk skärm fungerar bättre på appens hemskärm ändå.

Jag fann också att jag behövde använda dem om uttalanden för att kontrollera om rätt dataProvider redan var laddad eller inte.

Medan jag fick min hjärna runt SWFAddress, var jag tvungen att påminna mig om att webbläsaren inte har någon aning om vilka data du försöker ladda om du inte berätta vilka data borde finnas där I sig själv är din variabel slugAdd betyder ingenting. Men när du har tagit det värdet och lägger variabeln i spel i din handleSWFAddress () funktion kan du enkelt matcha det med ditt datagridindex och utföra något som din klickfunktion för din datagrid.

En annan sak som jag behövde var att hålla mina data inte listade två gånger i datagridet, vilket kan vara ett problem när du skickar samma HTTPService Begäran i olika delar av din app. Jag fann att det här fungerar bra för att hålla datagrids från att misslyckas med att ta bort XML från tidigare databasförfrågan.

 lessonsDataProvider.removeAll () lessonsDataProvider.refresh () httpService.send (); myDG.dataProvider = lessonsDataProvider; myDG.validateNow ()

Gör ta bort alla() på lektionernaDataProvider (namnet på mina HTTPService begäran variabel) var nyckeln till att bli av med dubbla XML-poster. Medan du inte är säker måste du fortsätta att göra httpService.send () varje gång du vill ladda en specifik dataset direkt från en URL istället för bara i i det() av appen, gör det som det här fungerar, så det är vad jag fastnat med. Jag har två dataförfrågningar i olika delar av appen men (lessonsDataProvider och lessonsDataProvider6, vänster från min löjliga SIX HTTPService begär att jag började med :) - så om du bara har en dataförfrågan kanske det inte är nödvändigt (i den andra delen av min app, httpService6.send () är nödvändigt).


Steg 10: Förberedelser för SEO-implementering

Nu för det ganska förvärrande extra arbetet jag var tvungen att göra för att göra min app SEO vänlig. I sig erbjuder SWFAddress exakt noll SEO fördel. Dina sidor kommer inte in i Google, Yahoo eller någon annan sökmotor. Nej ands, ifs eller buts. Varför är det så? Eftersom hela djupkopplingssystemet för SWFAddress beror på dessa "hash" -fragmenten - pundteckenet # som används på varje sida skapad av SWFAddress. Och Google ignorerar allt efter den symbolen, så roboten kommer aldrig se något annat än din huvudsida. Oavsett hur många webbadresser du har.

Och SEO-exemplet som tillhandahålls av SWFAddress-folket gör inte exakt det till en intuitiv sak att kopiera den med egna data. Tanken att du skulle behöva återskapa din webbplats i HTML för att dölja dig under din andra webbplats - är egentligen bara ett alternativ för personer som har en Flash-webbplats eller något. För någon med en seriös Flex app snarare än en puff webbplats av något slag, det är lite av ett skämt. Hur exakt ska du bygga en alternativ webbplats när allt är baserat på SWF-aktiviteter som matas av XML?

Men jag räknade ut att jag verkligen inte behövde bygga något annat än en länk, en titel och en beskrivning som bara är en annan version av samma titel och med hjälp av ett kalkylblad som jag använder för att bygga alla mina lektionsenheter kan jag enkelt klippa och klistra in de värden som motsvarar mina Flex-appadresser.


Steg 11: Hämta Alternativ SEO PHP Paket; Följ kort handledning

Filerna som jag använde för mitt eget genomförande av SEO för SWFAddress ändrades från paketet som hittades på pokd.org. Handledningen för att använda dessa filer är kort, enkel och lätt att följa. Du kan hitta handledningen här. SEO-versionen från Asual.com fungerade inte alls för mig, och jag har hittat andra som klagar över samma sak. Slösa inte bort din tid: ladda ner versionen från pokd.org, eller använd filerna i nedladdningspaketet för den här handledningen. Jag stympade mina egna filer lite för att visa bara mina två första avsnitt: barn och början, för att göra filerna enklare att läsa.


Steg 12: Slå av Javascript i din webbläsare för testning

Du måste stäng av javascript i din webbläsare för att testa icke-Flex / Flash-versionen av din webbplats! Det och gör översvämningen av huvuddelningen synlig. Om du inte har någon sida på 5 eller 10 sidor, gör att överflödet dolt gör testning omöjligt. De extra SEO-filerna du ska använda består av 2 PHP-filer, 1 .htaccess-fil och 1 extra Javascript-fil som måste placeras i din / swfaddress mappen inuti din flex / Bin-frisättning mapp).


Steg 13: Skapa dina SEO-webbadresser och sidtitlar via kalkylblad

Öppna kalkylbladsprogrammet och öppna filnamnet swfaddress_seo_index.ods eller .xls som du hittar i nedladdningspaketet för den här handledningen. Ändra dem för att passa dina egna behov. Detta är kalkylbladet där jag drog in värdena för min programadress, sektionerna och snigel adresser för att skapa alla swf_link [a hrefs] som behövs för index.php fil (Du behöver din fullständiga "rengjorda" url till varje länk utan main.html # samt din sidtitel). Klipp och klistra in från kalkylarksappen till Notepad ++ eller vilken textkodredigerare du använder och se till att du inte har några onödiga flikar eller mellanslag, och att allt ser rätt ut för att klistra in i din PHP-fil.

Mina nya fullständiga webbadresser ser ut så här i webbläsaren, notera att hashsymbolen (#) är borta nu:

http://www.instaspanish.com/dev/demo/childrens/up_downvocab


Steg 14: Lägg till dina länkar och titlar till Index.php-filen

Eftersom jag har över 70 sidor valde jag bara att placera delarna på index.php sida. De andra demos jag har sett alla inkluderar alla sidor sidor, men det är små webbplatser. Inkluderar en länk till varje sida på din index.php innebär att varje gång Google bot besöker en enskild sida kommer det att se alla dessa länkar. Det är en dålig idé. Lägg bara dina huvudsidor i index.php sida och låt datasource.php ta hand om resten.


Steg 15: Skapa dina omställningar via kalkylblad

Ta en titt på kalkylbladet med titeln swfaddress_seo_datasource.ods eller .xls i filerna för detta projekt. I det här exemplet visas hur jag skär och klistrar in värden från min databas för att fylla i omkopplingsdeklarationen. När du har fyllt i detta kalkylblad med egna värden, använd en kodredigerare som Notepad ++ för att ta bort eventuella extra flikar och kontrollera rätt formatering innan du klistrar in i din PHP-fil.


Steg 16: Lägg till omkopplingsmeddelanden till din Datasource.php-fil

Omkopplingsutlåtandena är ganska enkla, även om jag i mitt fall också skulle inkludera innehållet i varje XML-fil som matar ut mina utbildningsaktiviteter, för att använda dessa nyckelord i varje fil som ses av sökmotorerna. De exempel jag har sett har alla antagit att någon skulle sätta sig ner och skapa unika sidbeskrivningar för varje fil som representeras i datasource.php fil, men det är ett fruktansvärt tidskrävande alternativ för någon med dussintals eller hundratals datagrid-poster på deras Flex-sida. Så skapade jag en ny content.php-sida som använder en annan sidbeskrivning beroende på vilken aktivitet som finns i webbadressen. Jag lägger också till utskriften från XML för en sida som också har en XML-fil som är associerad med den.

 fall "/ början": echo ('

Det här avsnittet är för personer i åldrarna 10 år och uppe som vill börja med grunderna i en spanskkurs på 18 veckor. Några höjdpunkter: uttal och accenter verb och tider börjar prata spanska kalkylblad och frågesporter Insta spanska eLearning Demo Början Spanish Lesson.

'); ha sönder; fallet "/ barns / up_downvocab": echo ('

Barnens spanska lektion - Upp och ner - Lektionordförrådslista

'); $ xml_file = 'http://www.instaspanish.com/dev/activities/assets/lessons/up_down/xml/hover_word_list.xml'; givemeText (); outputXML (); ha sönder;

Steg 17: Ändra din .htaccess-fil

.Htaccess-filen måste justeras baserat på basmappen för din specifika serverinställning. Till exempel, min XAMPP testmapp inuti / htdocs kallas instademo, så min .htaccess har denna linje för RewriteBase:

RewriteBase / instademo

Flex-applikationen på min live-server finns också i en undermapp och inte min hemmapp, så raden ovanför pekar i den här mappen. Observera att det börjar med ett snedstreck framåt men gör inte ha en slående slash.


Steg 18: Testa din SEO PHP-webbplats lokalt

Avfyra XAMPP eller vad som helst du använder för din lokala Apache / PHP-inställning, och lägg in dina PHP, .htaccess, javascript och Flex-installationsfiler i en undermapp i / htdocs mapp eller vad din inställning använder som mapp för webbfiler. Om du vill testa SEO-webbplatsen måste du stäng av javascript. Det är den version sökmotorn bots kommer att se, liksom alla webb besökare som inte har javascript eller Flash aktiverat. Kontrollera att du inte ser några PHP-fel och att dina länkar fungerar korrekt.


Steg 19: Skapa din webbplatskarta

Sitemap är det enklaste att skapa. Ta swfaddress_link värden från din swfaddress_seo_index.ods eller .xls kalkylblad. Klistra in dem alla i Notepad ++ eller din kodredigerare, och kör en sökning och ersätt för att ta bort några mellanslag eller flikar och lägg sedan till din fullständiga URL. I mitt fall tog jag värderingar som:

/ Barn / up_downvocab

/ Barn / up_downlesson1

/ beginningpresent_verbslesson1

/ beginningpresent_verbslesson2

Och ändrade dem till:

http://www.instaspanish.com/dev/demo/childrens/up_downvocab

http://www.instaspanish.com/dev/demo/childrens/up_downlesson1

http://www.instaspanish.com/dev/demo/beginningpresent_verbslesson1

http://www.instaspanish.com/dev/demo/beginningpresent_verbslesson2

Spara den här filen som en .Text fil och öppna sedan ditt Vigos Gsitemaps-program och importera dessa webbadresser för att skapa din Google Sitemap.


Steg 20: Skicka in din webbplatskarta till Google

Din SEO-sidor har en bättre chans att snabbt hittas av Google om du skickar in en webbplatskarta. Om du inte redan har en, skapa ett konto för webbansvariga på google.com. Därifrån kan du enkelt lägga till din webbplats och skicka in XML-webbplatskartan du redan har skapat i Gsitemap-programmet.


Slutsats

Jag hoppas att denna handledning har hjälpt till att erbjuda några prover och en vägkarta för alla som kämpar med SWFAddress och Flex Datagrid. Om du följer handledningen och vill titta närmare på koden från exemplen, se till att titta på huvudfilen i källkodspaketet som vi använde i hela kodproverna: RoutingEvents.as.

Även om det tar lite tid att genomföra, är fördelarna med att ha en helt djup länkad och sökmotor indexerad ansökan enorm och väl värt ansträngningen. Tack så mycket för att du tog dig tid att läsa den här handledningen, och jag ser entusiastiskt fram emot några frågor, kritik eller kommentarer som du kanske har.


Ytterligare Deeplinking Resources på Activetuts+

  • Skapa en enkel webbplatsmall med SWFAddress
  • Skapa en Dynamic Deep Linking Flash-webbplats med SWFAddress
  • Serier: Skapa en helskärm, skalbar Flash-webbplats