SWFAddress, SEO og Flex Datagrid for Cut og Paste Coders

Denne artikkelen viser hvordan du konfigurerer dypkobling i Flex-programmet ditt, som kan sees av sluttbrukere, samt søkemotorer.

Det er en veiledning hovedsakelig for alle de andre cut-and-pasters der ute som ikke har tid eller energi til å virkelig lære å lage en proxy klasse for bruk med SWFAddress, og mest sannsynlig ikke programmerere av handel.


Endelig resultatforhåndsvisning

La oss ta en titt på det endelige resultatet vi vil jobbe med, legg merke til hvordan nettleserlinjen gjenspeiler tittelen på siden, Begynnelse:

Last ned kildefilene og bruk dem som en referanse mens du leser denne opplæringen.


Bakgrunn

Dette er min første Flex-veiledning, og en jeg kan bare skrive etter å ha gitt følgende advarsel: Jeg er egentlig bare en kutt-og-lim-koder, om enn en med nesten 10 år med AS1, AS2, og nå AS3-opplevelse, som har gitt Jeg har et ganske godt komfortnivå med det. Jeg skriver noen funksjoner, om-setninger, vars, og slike ting - men jeg er mer en hackmeister enn noe, noe som noen ganger fører til kreativ koding, mens andre ganger fører til bortkastet tid på ting jeg ikke har Les nok om før du eksperimenterer med!

Deep linking handler om mye mer enn bare SEO; Det handler om brukervennlighet. Jeg tenker mye mer om brukervennlighet etter å ha bygget en e-læring-app. Nå legger jeg merke til når en Flex- eller Flash-app gir deg fullstendig ut av appen når du trykker på tilbakeknappen, og tenk hvordan jeg ikke vil at brukerne skal oppleve den irriteringen. Hvem ønsker å bla gjennom alle leksjonene dine og se etter den ene aktiviteten de vil gjøre igjen, eller send e-post til deres venn?

Deep linking handler om mye mer enn bare SEO; Det handler om brukervennlighet.

Dette er en veiledning hovedsakelig for alle de andre cut-and-pasters der ute som ikke har tid eller energi til å virkelig lære å lage en proxy klasse for bruk med SWFAddress, og mest sannsynlig ikke programmerere av handel. Mens jeg kan sette pris på noen av veiledningene fra SWFAddress-siden som gir mye teknisk informasjon om hvorfor du må gjøre ting riktig, og hvor dårlig praksis vil bryte appen din, osv. - noen ganger trenger en person bare en måte å gjøre ting på arbeid på en måte de kan forstå. Noen av disse artiklene gjør at du tror at du ikke kan muligens få dypkobling, med mindre du kan skrive selv kode.

Grunnen til at jeg skal dele min kodende opplevelse på dette er fordi jeg googled heck ut av SWFAddress, datagrid og Flex, til ingen nytte. Jeg fant ingen direkte eksempler på noen som bruker SWFAddress til å lage dynamiske nettadresser fra deres datagrid i deres Flex-app. Min mann joked at det må være fordi det er så opplagt at ingen har plaget å blogge om det, men som du kan finne Flex-eksempler, opplæringsprogrammer og kode for nesten alle grunnleggende kodingsproblemer, tviler jeg på det. Så her går du!


Trinn 1: Samle verktøyene dine

Du trenger følgende elementer for å fullføre denne opplæringen:

  1. Din Flex / Flash-bygning IDE (for eksempel: Flex Builder, Flash, FlashDevelop).
  2. SWFAddress 2.4 og SWFObject 2.2
  3. GAforFlash (Google Analytics-sporing for Adobe Flash).
  4. Et godt regneark-app.
  5. En Apache eller PHP oppsett du kan teste med, eller nettside du kan laste opp og teste til.
  6. Et godt søk og erstatt editor som Notepad ++ for å rydde opp teksten du tar ut av regnearkene.
  7. Den gratis Vigos Gsitemap skaperen.

Du kan også laste ned filpakken for denne opplæringen, som inneholder en nøkkelfil som inneholder akseptseksemplene nedenfor: RoutingEvents.as.


Trinn 2: Importer SWFAddress; Opprett URL-visninger

Siden jeg fokuserer på datagrid og SEO for denne opplæringen; Jeg antar at du allerede vet hvordan du lager URL-visningene for SWFAddress. Hvis du ikke gjør det, kan du se koden for å opprette URL-visningene i RoutingEvents.as fil inkludert for denne opplæringen for å se hvordan jeg gjorde det.


Trinn 3: Lag din datagridvariabel

Jeg visste av flaggermuset at jeg trengte å knytte sidens nettadresser til en variabel som er tilstede i XML som fyller datagrid. Å få den variabelen til å skrive til nettadressen er enkel. Jeg opprettet en var fra attributtet jeg ønsket å bruke fra XML for sidens nettadresser:

 [Bindable] private var slug: String

Så bra, jeg kunne raskt sette nettadressene for mine datagrid-elementer, som umiddelbart resulterte i den hyggelige opplevelsen av at min datagrid-klikk faktisk endret nettadressen i nettleseren min.

Men selvfølgelig dypkobling består av to ting: forteller nettleseren hva du vil at den skal se, og nettleseren din forteller appen hva det vil se. Den andre delen viste seg å være mye vanskeligere.

Det jeg endelig fikk hjernen min rundt etter tinkers dager, var det når du navigerer til en nettadresse i appen din direkte fra nettleseren din - appen din har ingen anelse om hvilke data du vil ha den til å vise. Appen din vet bare hva du kommuniserer via nettadressen, og hva du har satt opp som reglene for å følge hvis visse verdier blir funnet i den nettadressen. Så hvis du har mer enn en datakilde eller xml-fil, som de fleste ganske kompliserte apper gjør - må du sette opp forhold for å presentere de eksakte dataene URL-kravene krever, for å kunne betjene visningen om at nettadressen er ber om.

Først tenkte jeg at det bare ved å bruke det slug Var jeg kunne fortelle SWFAddress å søke etter den verdien, og deretter gå til den tilsvarende oppføringens indeksnummer i datagrid. Men å sette opp det, og få variabelen riktig bestått til rett tid - skjedde bare etter omfattende prøving og feil; tonnevis av Alert.show (slug) og andre varsler for å se hva som faktisk ble passert på hvilket tidspunkt, og noen gode kode jeg fant på nettet for å matche opp en datagrid-rad med en bestemt verdi, deretter bla til indeksen for å vise verdi.

Jeg er enig med en av de mer kompliserte artiklene / opplæringene som finnes på SWFAddress-nettstedet: du må velge variablene dine nøye når du bruker dem med SWFAddress. Sørg for at de inneholder god informasjon - informasjon du kan analysere i ting som side Titler og unike identifikatorer for en datagrid eller listepost. Min activityId variabel fra min XML viste seg å være den perfekte varen fordi alle aktivitetene for en gitt leksjon er:

  1. unik
  2. inneholder leksjonenavnet
  3. inneholde aktivitetstypen

Noen eksempler aktivitetIds:

  • present_verbsvocab
  • present_verbsquiz
  • weather_worksheet

Denne informasjonen er nå hva SWFAddress bruker til å navigere til riktig leksjon, så vel som individuell aktivitet.


Trinn 4: Opprett en seksjonsvariabel hvis nødvendig

For andre ting som seksjoner, kan du sette dem opp ved hjelp av SWFAddress som din setter / getter (Jeg bruker dette begrepet løst og ærlig, jeg er ikke sikker på om dette oppfyller den tekniske definisjonen av en setter / getter! ut med denne opplæringen;)]) - i mitt tilfelle angir jeg variablen seksjon når en bruker klikker på en datagridoppføring i den delen eller navigerer til en ny seksjon, får jeg den verdien tilbake ut av nettadressen dersom noen navigerer til den delen. I mitt tilfelle er mine hovedavsnitt:

  • barne
  • begynnelsen
  • mellomliggende
  • nyhetsbrev

Disse seksjonene er angitt i min handleSWFAddress () funksjon:

 privat funksjon handleSWFAddress (event: SWFAddressEvent): void case "/ childrens": section = "childrens" break; 

Trinn 5: Pass variabellene via Datagrid Click Event

Deretter i min klikkhendelse for datagrid, passerer jeg seksjon og slug variabler på som URL:

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

Trinn 6: Send ditt tittel til nettleseren via Datagrid Click Event

Angi tittelen var litt vanskeligere fordi jeg ønsket å bruke leksjonstittelen, som egentlig ikke er en del av den fjernede XML-en, jeg bruker for denne demo-appen, så jeg la til et attributt som bare må være til stede i det første rad av XML-en for å sette leksjonstittelen.

Her er koden fra min datagrid-klikkhendelse som gjør at dette skjer:

 SWFAddress.setTitle (myDG.dataProvider.getItemAt (0) .title + "Spansk leksjon -" + valgtRow.lessonTitle);

De getItemAt (0) er en fin liten funksjon som tillot meg å sette en tittel for nettleseren i bare den første raden i hver XML-fil, noe som gir sidene en bedre beskrivelse. Nå i stedet for min leksjonsaktivitetsside leser:

Ordforråd Aktivitet

De leser:

Present Verbs Spansk Leksjon - Ordforråd Aktivitet

Dette fungerer fordi getItemAt (0) henter den første noden fra XML-filen.


Trinn 7: Analyser datagridvariabelstrenger i SWFAddress Handler

Å bruke din slug Verdien effektivt, du må trekke den ut fra nettadressen din. Så jeg skjønte endelig at jeg trengte en ny variabel, som jeg ringer slugAdd. Jeg bruker dette i min SWFAddress-handler:

 privat funksjonshåndtakSWFAddress (hendelse: 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)

Denne strengsparsing er så enkel her - men det må være nøyaktig for å kunne fungere! Din slugAdd må være identisk med slugverdien din, slik at datagrid-matchingsfunksjonen vil fungere, og nettadressene dine tar deg til den riktige raden. Så ser litt nærmere - vi gjør en enkel String erstatning. Du tar en nettadresse som:

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

Og etter at du gjør det

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

Hvis du kjører Alert.show (slugAdd) - du vil få

present_verbsvocab

(Jeg er klar over at min bruk av underskuddet i min slugverdien ikke er best praksis for å navngi konvensjoner for nettadresser, som krever at jeg bruker bindestrek i stedet - men vi har over 1000 leksjoner i hovedapplikasjonen vår som bruker dette, så jeg holder meg til det).

Ting å huske om erstatte() funksjon i AS3 er at din String verdi må være inneholdt mellom fremoverstreker -

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

? og hvis du også ønsker å erstatte en fremre skråstrek selv, må du unnslippe disse tegnene ved å bruke et bakoverstrekk før det. Det er slik du ender med

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

De g Del forteller at den skal skiftes ut på alle tegn og ikke bare den første, og "" er for din erstatning, som i mitt tilfelle var ingen verdi i det hele tatt. For mer informasjon, sjekk ut LiveDocs på String.replace () og RegExp.

Dette virker så enkelt nå, men det tok mye google på jakt etter meg å finne ut at jeg ikke behøvde å bruke noen store, lange kompliserte funksjoner bare for å fjerne noen verdier fra en streng. Caramba Jeg skulle ønske jeg hadde funnet en opplæring slik før jeg begynte :) Alrighty så nå har vi vår slug, eller nettadressen vi får fra datagrids XML-fil, sendes videre som en ny var kalt slugAdd. Men vi trenger fortsatt gjøre noe med denne variabelen.


Trinn 8: Få din datagrid til å vise riktig rekkefølge og brann noen hendelser

Det er i utgangspunktet tre viktige funksjoner som gjør at SWFAddress dypt kobler arbeidet mitt (jeg skal ikke dekke SWFAddress.setValue () fordi det er så enkelt og tydelig at jeg tror en hule mann kunne bruke det :)

Funksjon One: handleSWFAddress ()

 handleSWFAddress (event: SWFAddressEvent): void

Din arbeidshorse for alt navigasjonsutstyr. Å ha det som en hendelse ser ut til å være viktig, som i begynnelsen brukte jeg et annet eksempel på nettet som ikke brukte det skillet, og dette fungerer definitivt bedre.

Funksjon to: getSelectedItem ()

 getSelectedItem (): void

Dette må kalles etter dataene er allerede fylt, eller i resultatbehandleren for datasamtalen din. Timing er veldig viktig her, eller elementene dine mislykkes i å laste når folk skriver nettadressen direkte i nettleseren i stedet for å klikke gjennom appen din! Denne funksjonen samsvarer med en innkommende URL med et bestemt element fra en datagrid.

Funksjon Tre: itemfromAddress ()

 itemfromAddress (): void

Dette er hva egentlig gjør noe med datagrid-oppføringen - replikering av datagrid-klikkbehandleren i et ikke-format begivenhet funksjon, siden du ikke kan ringe en hendelsesbasert funksjon fra en annen funksjon.

La oss ta disse i rekkefølge av hvordan de skal brukes hvis noen skriver inn en nettadresse i nettleseren, ser etter data fra appen din. Siden denne opplæringen er fokusert på å navigere datagridet ditt - jeg legger inn dette eksemplet fra min handleSWFAddress () selv om du kan se resten hvis du ser på RoutingEvents.as fil inkludert med nedlastingen for denne opplæringen.

 case "/ childrens /" + slugAdd:

Denne koden nedenfor er Google Analytics-koden som er lett å legge til rett ved siden av SWFAddress.

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

Denne if-setningen kontrollerer om myURL variabel som feeds min HTTPService dataanrop er det vi trenger for denne delen, og hvis denne variabelen ikke allerede er angitt, er det mest sannsynlig fordi brukeren navigerer via URL, og appen er ikke lastet inn ennå, så vi må fortelle appen hvilke data denne nettadressen er forventer å se. Vi vil ikke ha fjernet dataProvider's data hvis brukeren allerede er i appen og navigerer gjennom datagrid, derfor trenger vi hvis uttalelse. Også, bare hvis de har vært et annet sted i vår app med andre data, og naviger via URL til denne visningen - vi må kaste dataene, oppdatere datagridet og sende den på nytt HTTPService dataanrop - ellers vil vi ende opp med ekstra data i datagridet vårt, som vil ødelegge vår matchende oppgave slug variabler med slugAdd variabler.

 hvis (myUrl! = 'data / childrens_updown.xml') myUrl = 'data / childrens_updown.xml' invalidateDisplayList (); leksjonerDataProvider.removeAlle () leksjonerDataProvider.refresh () httpService.send (); myDG.dataProvider = lessonsDataProvider; myDG.validateNow () //Alert.show("I've endret data til "+ myUrl)

Hvis brukeren skriver inn via URL - har de allerede utført getSelectedItem () funksjonen på slutten av datasamtalen. Men hvis dataene allerede er lastet og de fremdeles prøver å navigere via nettleseren i stedet for å klikke på datagritten, må de samsvare med nettleserens nettadresse med aktiviteten nettleseren forventer å se, så vi må ringe denne funksjonen i så fall:

 getSelectedItem () currentState = "class1State"

Vi setter inn vår seksjon variabel her for å forsikre deg om at det som en bruker klikker gjennom appen, er riktig seksjon vil bli lagt til URL-adressen,

 section = "childrens" pause;

Så la oss se på koden igjen alle sammen:

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

La oss nå se på skjønnheten som virkelig gjorde det hele. Jeg endret dette fra et stykke kode skrevet av Anuj Gakhar på blogginnlegget Flex: Hvordan forhåndselekterer et element i DataGrid:

 privat funksjon getSelectedItem (): void //Alert.show ("Jeg gjø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 lengde") var gData: Object = myDG.dataProvider; hvis (slugAdd) for (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()    

Disse varslene hjalp meg virkelig, som opprinnelig hadde jeg denne koden på toppen av min handleSWFAddress () funksjon, som ikke fungerte. Denne funksjonen ble kalt på slutten av data Providerens resultatbehandler, som igjen måtte bli kalt av mine brytere som inneholdt slugAdd variabel fanget av SWFAddress. Ellers er dataene ikke der ennå, og din getSelectedItem () vil ikke finne noen elementer som stemmer overens med URL-verdien som er blitt tatt.

Og til slutt, funksjonen som binder min SWFAddress håndtering alle sammen med hendelser som endrer ut hva brukeren ser: itemfromAddress (). Dette endrer leksjonen SWF som vises i min SWFLoader, akkurat som det ville hvis en bruker klikket på en annen rad i datagridet.

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

Trinn 9: Pass på at dataProvider er riktig, og data er kun oppført en gang

Jeg kjørte inn i et annet problem: i mitt tilfelle fant jeg at lasting av data i min hoveddatagrid på appens init ville føre til problemer når du prøver å bytte data når folk prøver å få tilgang til forskjellige data direkte via URL. De samme dataene som ville belastes like bra når de klikket gjennom appen, ble utilgjengelige hvis de prøvde å bruke den samme nettadressen direkte på en fersk side der appen ennå ikke var lastet inn. Dette forårsaket meg en hel dag med sorg mens jeg la enda en gang med varsler til koden min, og prøvde å finne ut hva problemet var med datalastingen.

Til slutt, for min dataProvider som er dynamisk, måtte jeg la dette stå tomt på init av appen. Dette betydde å endre startskjermbildet mitt fra en med data til en uten. Den andre løsningen kan være å bruke en annen dataleverandør, men jeg bestemte meg for at jeg ikke behøvde å gjøre det, da en statisk skjerm fungerer bedre, er appens hjemmeskjerm likevel.

Jeg har også funnet ut at jeg trengte å bruke dem hvis uttalelser for å sjekke om den korrekte dataleverandøren allerede var lastet inn eller ikke.

Mens jeg fikk hjernen min rundt SWFAddress, måtte jeg påminne meg selv om at nettleseren ikke aner hvilke data du prøver å laste med mindre du Fortell det hvilke data skal være der. I seg selv er variabelen din slugAdd betyr ingenting. Men når du fanger den verdien, og legger variabelen i spill i din handleSWFAddress () funksjon, kan du enkelt samsvare med datagrid-indeksen og utføre noe som din klikkfunksjon for datagrid.

En annen ting jeg måtte gjøre var å holde dataene mine oppført to ganger i datagridet, noe som kan være et problem når du sender det samme HTTPService forespørsel i ulike deler av appen din. Jeg fant ut at dette fungerer pent for å holde datagrids fra å ikke fjerne XML fra tidligere dataforespørsel.

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

Gjør Fjern alle() på lessonsDataProvider (navnet på min HTTPService forespørsel variabel) var nøkkelen til å kvitte seg med dupliserte XML-poster. Mens jeg ikke er sikker på at du må fortsette å gjøre det httpService.send () hver gang du vil laste et bestemt datasett direkte fra en nettadresse i stedet for bare i i det() av appen, gjør det som dette fungerer, så det er det jeg sitter fast med. Jeg har to dataforespørsler i forskjellige deler av appen skjønt (lessonsDataProvider og lessonsDataProvider6, igjen fra min latterlige SIX HTTPService ber om at jeg startet med :) - så hvis du bare har en dataforespørsel, er dette kanskje ikke nødvendig (i den andre delen av appen min, httpService6.send () er nødvendig).


Trinn 10: Forbereder SEO Implementering

Nå for det ganske forverrende tilleggsarbeidet jeg måtte gjøre for å gjøre appen min app-vennlig. I seg selv tilbyr SWFAddress nøyaktig null SEO fordel. Dine sider kommer ikke inn i Google, Yahoo eller noen annen søkemotor. Ingen ands, ifs eller buts. Hvorfor det? Fordi hele dypkoblingsordningen for SWFAddress avhenger av disse "hash" -fragmentet - pundskiltet # som brukes på hver side opprettet av SWFAddress. Og Google ignorerer alt etter det symbolet, så roboten vil aldri se noe annet enn hovedsiden din. Uansett hvor mange URLer du har.

Og SEO-eksemplet fra SWFAddress-folkene gjør ikke akkurat det en intuitiv ting å replikere det ved å bruke dine egne data. Ideen om at du vil gjenskape nettstedet ditt i HTML for å gjemme deg under ditt andre nettsted, er egentlig bare et alternativ for folk som har en Flash-nettside eller noe. For noen med en seriøs Flex app i stedet for en puff nettside av noe slag, det er litt av en vits. Hvor nøyaktig skal du bygge et alternativt nettsted når alt er basert på SWF-aktiviteter matet av XML?

Men jeg fant ut at jeg egentlig ikke måtte bygge noe annet enn en lenke, en tittel og en beskrivelse som bare er en annen versjon av samme tittel, og ved å bruke et regneark som er det jeg bruker til å bygge alle mine leksjonsenheter uansett, kunne jeg enkelt klippe og lime inn verdiene som samsvarer med mine Flex-appadresser.


Trinn 11: Last ned Alternativ SEO PHP pakke; Følg Kort opplæring

Filene jeg brukte til min egen implementering av SEO for SWFAddress ble endret fra pakken funnet på pokd.org. Opplæringen for bruk av disse filene er kort, enkel og lett å følge. Du finner opplæringen her. SEO-versjonen fra Asual.com virket ikke for meg i det hele tatt, og jeg har funnet andre mennesker klager over det samme. Ikke kast bort tiden din: Last ned versjonen fra pokd.org, eller bruk filene som finnes i nedlastingspakken for denne opplæringen. Jeg avkortet mine egne filer litt for å vise bare mine to første seksjoner: barn og begynnelse, for å gjøre filene enklere å lese.


Trinn 12: Slå av Javascript i nettleseren din for testing

Du må slå av javascript i nettleseren din for å teste ikke-Flex / Flash-versjonen av nettstedet ditt! Det og gjør overløpet av hoveddivisjonen synlig. Med mindre du har et nettsted på 5 eller 10 sider, er det umulig å teste overflaten som er skjult. De ekstra SEO-filene du vil bruke består av 2 PHP-filer, 1 .htaccess-fil og 1 ekstra Javascript-fil som må plasseres i din / swfaddress mappe i din flex / Bin-frigivelse mappe).


Trinn 13: Opprett dine SEO-nettadresser og sidetitler via regneark

Åpne regnearkprogrammet ditt og åpne filnavnet swfaddress_seo_index.ods eller .xls som du finner i nedlastingspakken for denne opplæringen. Endre dem for å dekke dine behov. Dette er regnearket der jeg trakk i verdiene for søknadsadressen min, seksjonene og slug adresser for å opprette alle swf_link [a hrefs] som trengs for index.php fil (Du trenger din fulle "rengjorte" url til hver kobling uten main.html # samt sidetittelen din). Klipp og lim inn fra regneark-appen til Notepad ++ eller hvilken tekstkodeditor du bruker, og sørg for at du ikke har noen unødvendige faner eller mellomrom, og at alt ser riktig ut for å lime inn i PHP-filen din.

Mine nye fulle url ser slik ut i nettleseren, merk at ish-symbolet (#) er nå borte:

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


Trinn 14: Legg til dine lenker og titler til Index.php-filen

Siden jeg har over 70 sider, valgte jeg bare å sette seksjonene på index.php side. De andre demoer jeg har sett alle inkluderer alle sidesider, men disse er små sider. Inkludert en lenke til hver side på din index.php betyr at hver gang Google bot besøker en individuell side, vil det se alle disse linkene. Det er en dårlig ide. Så bare legg inn hovedsidene dine i index.php side, og la datasource.php ta vare på resten.


Trinn 15: Opprett oversiktserklæringer via regneark

Ta en titt på regnearket med tittelen swfaddress_seo_datasource.ods eller .xls i filene for dette prosjektet. Dette eksemplet viser hvordan jeg kutter og limer verdier fra databasen min for å fylle ut bryteretningene. Når du har fylt inn dette regnearket med dine egne verdier, bruk en kodeditor som Notepad ++ for å fjerne eventuelle ekstra faner og for å sjekke riktig formatering før du limer inn i PHP-filen din.


Trinn 16: Legg til svarserklæringer til Datasource.php-filen

Bryterklæringene er ganske enkle, men i mitt tilfelle ønsket jeg også å inkludere innholdet i hver XML-fil som mater min pedagogiske aktiviteter, for å kunne bruke disse søkeordene i hver fil sett av søkemotorene. Eksemplene jeg har sett har alle antatt at noen ville sette seg ned og lage unike sidebeskrivelser for hver fil som er representert i datasource.php fil, men det er et fryktelig tidkrevende alternativ for noen med dusinvis eller hundrevis av datagridoppføringer i deres Flex-side. Så jeg opprettet en ny content.php-side som bruker en annen sidebeskrivelse avhengig av hvilken aktivitet som finnes i nettadressen. Jeg legger også til utskriften fra XML for en side som også har en XML-fil tilknyttet den.

 sak '/ begynnelse': ekko ('

Denne delen er for folk i alderen 10 og oppe som vil starte med det grunnleggende i et spanskkurs på 18 uker. Noen høydepunkter: Uttale- og aksent-verb og tider som begynner å snakke spansk regneark og spørrekonkurranser Insta Spansk eLearning Demo Begynnende Spansk leksjon.

'); gå i stykker; case '/ childrens / up_downvocab': echo ('

Barnas spanske leksjon - Opp og Ned - Leksjon Vocabulary List

'); $ xml_file = 'http://www.instaspanish.com/dev/activities/assets/lessons/up_down/xml/hover_word_list.xml'; givemeText (); outputXML (); gå i stykker;

Trinn 17: Rediger din .htaccess-fil

.Htaccess-filen må justeres basert på basemappen for ditt bestemte serveroppsett. For eksempel, min XAMPP testmappe inne i / htdocs er kalt instademo, så min .htaccess har denne linjen for RewriteBase:

RewriteBase / instademo

Flex-programmet på min live-server finnes også i en undermappe og ikke min hjemmemappe, slik at linjen over i det tilfellet peker til denne mappen. Legg merke til at det begynner med et fremoverstrekk, men gjør ikke ha et skråstrek.


Trinn 18: Test ditt SEO PHP-nettsted lokalt

Slå opp XAMPP eller hva du bruker for ditt lokale Apache / PHP-oppsett, og legg inn PHP, .htaccess, javascript og Flex distribusjonsfiler i en undermappe av / htdocs mappe eller hva ditt oppsett bruker som mappe for webfiler. Hvis du vil teste SEO-siden, må du Slå av javascript. Det er versjonen søkemotoren roboter vil se, samt noen web besøkende som ikke har javascript eller Flash aktivert. Kontroller at du ikke ser noen PHP-feil, og at linkene dine fungerer riktig.


Trinn 19: Lag ditt sitemap

Nettkartet er det enkleste å skape. Ta swfaddress_link verdier fra din swfaddress_seo_index.ods eller .xls regneark. Lim dem alle inn i Notepad ++ eller kodeditoren din, og kjør et søk og erstatt for å fjerne mellomrom eller faner, og legg deretter til hele nettadressen din. I mitt tilfelle tok jeg verdier som:

/ Barne / up_downvocab

/ Barne / up_downlesson1

/ beginningpresent_verbslesson1

/ beginningpresent_verbslesson2

Og forandret dem til:

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

Lagre denne filen som en .tekst fil, og åpne deretter Vigos Gsitemaps-programmet og importer disse nettadressene for å opprette Google Sitemap.


Trinn 20: Send inn sitemap til Google

SEO-sidene dine har en bedre sjanse til å bli funnet raskt av Google hvis du sender inn et nettstedkart. Hvis du ikke allerede har en, opprett en konto for nettredaktører på google.com. Derfra kan du enkelt legge til nettstedet ditt og sende inn XML-sitekartet du allerede har opprettet i Gsitemap-programmet.


Konklusjon

Jeg håper denne veiledningen har hjulpet tilby noen eksempler og et veikart for alle som sliter med SWFAddress og en Flex Datagrid. Hvis du følger opplæringen og vil se nærmere på koden fra eksemplene, sørg for å se på hovedfilen i Kilde nedlastingspakken som vi brukte i hele kodesamplene: RoutingEvents.as.

Selv om det tar litt tid å implementere, er fordelene ved å ha en helt dypt koblet og søkemotor indeksert søknad enorm og vel verdt innsatsen. Tusen takk for at du tok deg tid til å lese denne opplæringen, og jeg ser entusiastisk fram til eventuelle spørsmål, kritikk eller kommentarer som du kanskje har.


Videre Deeplinking Resources på Activetuts+

  • Bygg en enkel nettsidemal med SWFAddress
  • Opprett et dynamisk Deep Linking Flash-nettsted med SWFAddress
  • Serie: Lag en fullskjerm, skalerbar Flash-nettside