SWFAddress, SEO y Flex Datagrid para codificadores de corte y pegado

Este artículo le muestra cómo configurar enlaces profundos en su aplicación Flex que pueden ver tanto los usuarios finales como los motores de búsqueda..

Es un tutorial principalmente para todos los demás cortar y pegar que no tienen el tiempo o la energía para aprender realmente cómo crear una clase proxy para usar con SWFAddress, y lo más probable es que no sean programadores..


Vista previa del resultado final

Echemos un vistazo al resultado final en el que trabajaremos, observe cómo la barra del navegador refleja el título de la página., Comenzando:

Descargue los archivos de Source y utilícelos como referencia mientras lee este tutorial..


Fondo

Este es mi primer tutorial de Flex, y solo puedo escribirlo después de indicar la siguiente advertencia: en realidad solo soy un programador de cortar y pegar, aunque uno con casi 10 años de experiencia AS1, AS2 y ahora AS3, que me ha brindado Yo tengo un nivel de confort bastante bueno. Escribo algunas funciones, sentencias if, vars y cosas así, pero soy más un hackmeister que cualquier otra cosa, lo que a veces lleva a la codificación creativa, mientras que otras lleva al tiempo perdido en cosas que no tengo. leyó lo suficiente sobre antes de experimentar con!

La vinculación profunda es mucho más que solo SEO; se trata de usabilidad. Pienso mucho más sobre la usabilidad después de haber creado una aplicación de aprendizaje electrónico. Ahora me doy cuenta de que una aplicación Flex o Flash te saca completamente de la aplicación cuando presionas el botón de retroceso, y pienso que no quiero que mis usuarios experimenten esa molestia. ¿Quién quiere desplazarse a través de todas sus lecciones en busca de la actividad que desea volver a hacer, o enviar un correo electrónico a su amigo??

La vinculación profunda es mucho más que solo SEO; se trata de usabilidad.

Este es un tutorial principalmente para todos los demás usuarios que no tienen el tiempo o la energía para realmente aprender cómo crear una clase proxy para usar con SWFAddress, y lo más probable es que no sean programadores por experiencia. Aunque puedo apreciar algunos de los tutoriales del sitio SWFAddress que brindan una gran cantidad de detalles técnicos sobre por qué tiene que hacer las cosas correctamente y cómo las malas prácticas romperán su aplicación, etc. - a veces una persona solo necesita una manera de hacer las cosas. Trabajar de una manera que puedan entender. Algunos de esos artículos te hacen pensar que posiblemente no puedas hacer que funcionen los enlaces profundos a menos que puedas escribir montones de códigos tú mismo.

La razón por la que voy a compartir mi experiencia de codificación en esto es porque busqué en Google la dirección SWFAddress, datagrid y Flex, sin éxito. No encontré ningún ejemplo directo de alguien que use la dirección SWF para crear URL dinámicas desde su red de datos dentro de su aplicación Flex. Mi esposo dijo en broma que debe ser porque es tan obvio que nadie se ha molestado en hacer un blog al respecto, pero como puedes encontrar ejemplos, tutoriales y códigos de Flex para casi todos los problemas de codificación básicos, lo dudo mucho. Así que aquí tienes!


Paso 1: Reúne tus herramientas

Necesitará los siguientes elementos para completar este tutorial:

  1. Su IDE de creación de Flex / Flash (por ejemplo: Flex Builder, Flash, FlashDevelop).
  2. SWFAddress 2.4 y SWFObject 2.2
  3. GAforFlash (Seguimiento de Google Analytics para Adobe Flash).
  4. Una buena aplicación de hoja de cálculo..
  5. Una configuración de Apache o PHP que puede probar, o un sitio web que puede cargar y probar en.
  6. Un buen editor de búsqueda y reemplazo como Notepad ++ para limpiar el texto que saca de las hojas de cálculo.
  7. El creador gratuito de Vigos Gsitemap..

También puede descargar el paquete de archivos para este tutorial, que incluye un archivo clave que contiene los ejemplos de acciones siguientes: RoutingEvents.as.


Paso 2: Importar SWFAddress; Crear vistas de URL

Desde que me enfoco en el datagrid y SEO para este tutorial; Supongo que ya sabe cómo crear las vistas de URL para SWFAddress. Si no lo hace, puede mirar el código para crear las vistas de URL en el RoutingEvents.as archivo incluido para este tutorial para ver cómo lo hice.


Paso 3: Crea tu variable Datagrid

Supe de inmediato que necesitaba vincular las URL de mi página a una variable presente en el XML que llena mi datagrid. Conseguir que la variable escriba en la URL es fácil. Creé una var del atributo que quería usar del XML para las URL de mi página:

 [Bindable] privado var slug: String

Tan genial, pude establecer rápidamente las URL para mis elementos de la red de datos, lo que resultó instantáneamente en la agradable experiencia de ver que mis clics de la red de datos realmente cambiaron la URL en mi navegador.

Pero, por supuesto, la vinculación profunda consta de dos cosas: decirle a su navegador lo que quiere que vea y su navegador a decirle a su aplicación lo que TI quiere ver. La segunda parte resultó ser mucho más difícil..

Lo que finalmente conseguí con mi cerebro después de días de retoques, fue que cuando navega a una URL dentro de su aplicación directamente desde su navegador, su aplicación no tiene idea de qué datos desea que se muestren. Su aplicación solo sabe lo que comunica a través de la URL, y lo que ha configurado como las reglas a seguir si se encuentran ciertos valores en esa URL. Por lo tanto, si tiene más de una fuente de datos o un archivo xml, como ocurre con las aplicaciones más complicadas, tendrá que configurar las condiciones para presentar los datos exactos que exigen las URL para poder cumplir con éxito la vista de que la URL es solicitando.

Al principio pensé ingenuamente que con solo usar eso babosa var Podría decirle a SWFAddress que busque ese valor y luego ir al número de índice de la entrada correspondiente en el datagrid. Pero configurarlo, y pasar la variable correctamente en el momento adecuado, solo sucedió después de un extenso ensayo y error; toneladas de Alert.show (slug) y otras alertas para ver qué se pasó realmente a qué hora, y un código excelente que encontré en línea para hacer coincidir una fila de datos con un valor particular, luego, desplácese hasta el índice para mostrar el valor.

Estoy de acuerdo con uno de los artículos / tutoriales más complicados que se encuentran en el sitio web de SWFAddress: tiene que elegir sus variables con mucho cuidado cuando las utilice con SWFAddress. Asegúrese de que contengan buena información: información que puede analizar en elementos como los títulos de la página y los identificadores únicos para un elemento de lista de datos o de lista de datos. Mi activityId La variable de mi XML resultó ser la var perfecta, porque todos los ID de actividad para una lección dada son:

  1. único
  2. contiene el nombre de la lección
  3. contiene el tipo de actividad

Algunos ejemplos de actividad:

  • present_verbsvocab
  • present_verbsquiz
  • hoja de trabajo del tiempo

Esta información es ahora lo que SWFAddress está utilizando para navegar a la lección correcta, así como a la actividad individual.


Paso 4: crear una variable de sección si es necesario

Para otras cosas como las secciones, puedes configurarlas usando SWFAddress como tu setter / getter (¡estoy usando este término de manera muy franca, francamente no estoy seguro si esto cumple con la definición técnica de un setter / getter! [Ed: puedes encontrar con este tutorial;)]) - en mi caso, puse la variable llamada sección cuando un usuario hace clic en una entrada de datagrid en esa sección, o navega a una nueva sección, entonces obtengo ese valor fuera de la URL si alguien navega a esa sección. En mi caso mis secciones principales son:

  • para niños
  • comenzando
  • intermedio
  • hoja informativa

Estas secciones se encuentran en mi handleSWFAddress () función:

 Función privada handleSWFAddress (evento: SWFAddressEvent): void case "/ childrens": section = "childrens" break; 

Paso 5: pase las variables a través de su evento de clic de Datagrid

Luego en mi evento de clic para el datagrid, paso el sección y babosa variables en como la URL:

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

Paso 6: pase su título al navegador a través del evento Click de Datagrid

La configuración del título fue un poco más complicada, porque quería usar el título de la lección que no es en realidad parte del XML simplificado que estoy usando para esta aplicación de demostración, así que agregué un atributo que solo debe estar presente en la primera fila de mi XML para establecer el título de la lección.

Aquí está el código de mi evento datagrid click que hace que esto suceda:

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

los getItemAt (0) es una pequeña y agradable función que me permitió poner un título para el navegador en la primera fila de cada archivo XML, lo que le da a las páginas una mejor descripción. Ahora en lugar de leer mis páginas de actividad de la lección:

Actividad de vocabulario

Ellos leen:

Lecciones de español de verbos actuales - Actividad de vocabulario

Esto funciona porque getItemAt (0) recupera el primer nodo del archivo XML.


Paso 7: Analice sus cadenas variables de Datagrid en su manejador SWFAddress

Usar tu babosa valorar efectivamente, tienes que extraerlo de tu URL. Así que finalmente me di cuenta de que necesitaba una nuevo variable, a la que llamo slugAdd. Yo uso esto en mi controlador SWFAddress:

 Función privada handleSWFAddress (evento: 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 (/ \ / middle \ // g, ""); slugAdd = slugAdd.replace (/ \ / newsletter \ // g, ""); //Alert.show (slugAdd)

Este análisis de cadenas es muy simple aquí, ¡pero tiene que ser exacto para que funcione! Tu slugAdd debe ser idéntico a su valor de slug, de modo que su función de emparejamiento de datos funcione, y sus URL lo llevarán a la fila correcta. Así que, mirando un poco más de cerca, estamos haciendo un reemplazo de cadena simple. Tomas una URL como:

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

Y despues de que hagas

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

Si ejecuta el Alert.show (slugAdd) - conseguirás

present_verbsvocab

(Soy consciente de que mi uso del guión bajo en mi valor slug no es la mejor práctica para nombrar convenciones para URL, que exigen que use la guión en cambio, pero tenemos más de 1000 lecciones en nuestra aplicación principal que usan esto, así que me quedo con ella).

Lo que hay que recordar acerca de la reemplazar() La función en AS3 es que su valor de cadena debe estar contenido entre barras inclinadas -

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

? y si desea reemplazar también una barra diagonal, debe escapar de esos caracteres utilizando una barra diagonal anterior. Así es como terminas con

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

los sol parte le dice que haga el reemplazo en todos personajes y no solo el primero, y el "" es para su reemplazo, que en mi caso no tenía ningún valor. Para obtener más información, consulte los LiveDocs en String.replace () y RegExp.

Esto parece tan simple ahora, pero me llevó un montón de búsquedas en Google para darme cuenta de que no tenía que usar una función grande y complicada para quitar algunos valores de una cadena. Caramba Ojalá hubiera encontrado un tutorial como este antes de comenzar :) Muy bien, ahora tenemos nuestro slug, o la URL que obtenemos del archivo XML del datagrid, que se transmite como una nueva var llamada slugAdd. Pero todavía necesitamos hacer algo con esta variable.


Paso 8: Haz que tu Datagrid muestre la fila correcta y dispare cualquier evento

Básicamente, hay tres funciones esenciales que hacen que mi SWFAddress sea un enlace profundo (no voy a cubrir el SWFAddress.setValue () porque es tan fácil y obvio que creo que un hombre de las cavernas podría usarlo :)

Función uno: handleSWFAddress ()

 handleSWFAddress (evento: SWFAddressEvent): void

Tu caballo de batalla para todas las cosas de navegación. Tenerlo como un evento parece ser importante, ya que al principio usé otro ejemplo en línea que no usaba esa distinción, y esto definitivamente funciona mejor.

Función dos: getSelectedItem ()

 getSelectedItem (): void

Esto debe ser llamado después los datos ya están completos o en su manejador de resultados para su llamada de datos. El tiempo es muy ¡importante aquí, o sus elementos no se cargarán cuando las personas escriban la URL directamente en el navegador en lugar de hacer clic en su aplicación! Esta función hace coincidir una URL entrante con un elemento específico de un datagrid.

Función tres: itemfromAddress ()

 itemfromAddress (): void

Esto es lo que realmente hace algo con la entrada datagrid - replicando mi controlador de clic datagrid en un no evento función, ya que no se puede llamar a una función basada en eventos desde otra función.

Tomemos esto de acuerdo con la forma en que se utilizarán si alguien escribe una URL en el navegador y busca datos de su aplicación. Ya que este tutorial se enfoca en navegar por su red de datos, publicaré este ejemplo desde mi handleSWFAddress () A pesar de que puedes ver el resto si miras el RoutingEvents.as Archivo incluido con la descarga de este tutorial..

 caso "/ childrens /" + slugAdd:

Este código a continuación es el código de Google Analytics que es fácil de agregar junto con SWFAddress.

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

Esta declaración if comprueba si el myURL variable que alimenta mi HTTPService lo que necesitamos es una llamada de datos para esta sección, y si esta variable aún no está configurada, es muy probable que el usuario esté navegando a través de la URL y la aplicación aún no se haya cargado, por lo que debemos indicar a la aplicación qué datos es esta URL esperando ver No querríamos eliminar los datos del proveedor de datos si el usuario ya está en la aplicación y está navegando a través de la red de datos, por lo que necesitamos el Si declaración. Además, en caso de que hayan estado en otro lugar en nuestra aplicación con otros datos, y navegue a través de la URL a esta vista: debemos eliminar esos datos, actualizar la red de datos y reenviar la HTTPService llamada de datos: de lo contrario, terminaremos con datos adicionales en nuestra base de datos, lo que desordenará nuestra comparación de babosa variables con slugAdd variables.

 if (myUrl! = 'data / childrens_updown.xml') myUrl = 'data / childrens_updown.xml' invalidateDisplayList (); lessonsDataProvider.removeAll () lessonsDataProvider.refresh () httpService.send (); myDG.dataProvider = lessonsDataProvider; myDG.validateNow () //Alert.show("He cambiado los datos a "+ myUrl)

Si el usuario ingresa a través de la URL, ya ejecutó el getSelectedItem () Funcionan al final de su llamada de datos. Pero si esos datos ya están cargados y aún intentan navegar a través del navegador en lugar de hacer clic en la red de datos, tendrán que hacer coincidir esa URL del navegador con la actividad que el navegador espera ver, por lo que debemos llamar a esta función en ese caso:

 getSelectedItem () currentState = "class1State"

Estamos configurando nuestro sección variable aquí para asegurar que cuando un usuario hace clic a través de la aplicación, la correcta sección será añadido a la URL,

 section = "childrens" break;

Así que veamos el código de nuevo todos juntos:

 caso "/ childrens /" + slugAdd: tracker.trackPageview ("/ childrens /" + slugAdd); if (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;

Ahora veamos la pieza de belleza que realmente hizo que todo funcionara. Lo modifiqué a partir de un código escrito por Anuj Gakhar en su entrada del blog Flex: cómo preseleccionar un artículo en DataGrid:

 función privada getSelectedItem (): void //Alert.show ("Estoy haciendo un getSelectedItem") var slugAdd: String = SWFAddress.getPath (); slugAdd = slugAdd.replace (/ \ / childrens \ // g, ""); slugAdd = slugAdd.replace (/ \ / beginning \ // g, ""); slugAdd = slugAdd.replace (/ \ / middle \ // g, ""); slugAdd = slugAdd.replace (/ \ / newsletter \ // g, ""); //Alert.show (slugAdd) //Alert.show (myDG.dataProvider.length + "length del proveedor de datos") var gData: Object = myDG.dataProvider; if (slugAdd) para (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()    

Estas Alertas realmente me ayudaron, ya que originalmente tenía este código en la parte superior de mi handleSWFAddress () Función, que no funcionó. Esta función debía llamarse al final del controlador de resultados de mi proveedor de datos, que a su vez tenía que llamar mis conmutadores que contenían slugAdd Variable capturada por SWFAddress. De lo contrario, los datos aún no están allí, y su getSelectedItem () no encontrará ningún elemento que coincida con el valor de URL que se ha capturado.

Y, por último, la función que vincula mi manejo de SWFAddress con eventos que cambian lo que el usuario ve: itemfromAddress (). Esto cambia la lección SWF que se muestra en mi SWFLoader, al igual que lo haría si un usuario hiciera clic en una fila diferente en el datagrid.

 Función privada itemfromAddress (): void swfLoader.unloadAndStop (); SoundMixer.stopAll (); selectedRow = Fila (myDG.selectedItem); swfLoader.source = selectedRow.fileName; 

Paso 9: Asegúrese de que el proveedor de datos sea correcto y que los datos se enumeren solo una vez

Me encontré con otro problema: en mi caso, encontré que cargar datos en mi red de datos principal en el inicio de la aplicación causaría problemas al intentar cambiar esos datos cuando las personas intentan acceder a diferentes datos directamente a través de una URL. Los mismos datos que se cargarían bien al hacer clic en la aplicación, se volvieron inaccesibles si intentaban usar la misma URL directamente en una página nueva donde aún no se había cargado la aplicación. Esto me causó un día entero de dolor mientras agregué otro grupo de Alertas a mi código e intenté averiguar cuál era el problema con la carga de datos.

Al final, para mi proveedor de datos que es dinámico, tuve que dejar esto en blanco en el inicio de la aplicación. Esto significó cambiar mi pantalla de inicio de uno con datos a uno sin. La otra solución podría ser usar otro proveedor de datos, pero decidí que no necesitaba hacerlo, ya que una pantalla estática funciona mejor en la pantalla de inicio de la aplicación..

También me di cuenta de que necesitaba usar esos Si instrucciones para comprobar si el proveedor de datos correcto ya estaba cargado o no.

Al tener mi cerebro en torno a SWFAddress, tuve que recordarme otra vez que el navegador no tiene idea de qué datos está intentando cargar a menos que Dilo Qué datos deberían estar allí. Por sí misma, tu variable. slugAdd no significa nada. Pero una vez que capture ese valor, y ponga la variable en juego en su handleSWFAddress () función, puede asociarlo fácilmente con su índice de datagrid y realizar algo como su función de clic para su datagrid.

Otra cosa que tuve que hacer fue evitar que mis datos se incluyeran en la lista de datos dos veces, lo que puede ser un problema cuando se envía el mismo HTTPService Solicita en diferentes partes de tu aplicación. Encontré que esto funciona muy bien para evitar que datagrids no elimine el XML de la solicitud de datos anterior.

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

Haciendo el eliminar todo() en el lessonsDataProvider (el nombre de mi HTTPService variable de solicitud) fue la clave para deshacerse de las entradas XML duplicadas. Aunque no estoy seguro de que tengas que seguir haciendo el httpService.send () Cada vez que desee cargar un conjunto de datos específico directamente desde una URL en lugar de solo en el en eso() de la aplicación, hacerlo de esta manera funciona, así que eso es con lo que me quedé. Sin embargo, tengo dos solicitudes de datos en diferentes partes de la aplicación (lessonsDataProvider y lessonsDataProvider6, remanentes de mi ridículo SIX HTTPService solicitudes con las que comencé :) - así que si solo tiene una solicitud de datos, tal vez no sea necesario (en la otra parte de mi aplicación, httpService6.send () es necesario).


Paso 10: Preparación para la implementación de SEO

Ahora, por el agravante trabajo adicional que tenía que hacer para hacer que mi aplicación fuera amigable con SEO. Por sí mismo, SWFAddress ofrece exactamente cero ventajas de SEO. Sus páginas no entrarán en Google, Yahoo ni ningún otro motor de búsqueda. No hay ands, ifs o buts. ¿Porqué es eso? Debido a que todo el esquema de enlace profundo de SWFAddress depende de estos elementos de "hash": el signo de número # que se usa en cada página creada por SWFAddress. Y Google ignora todo lo que está detrás de ese símbolo, por lo que el robot nunca verá nada más que tu página principal. No importa cuantos urls tengas.

Y el ejemplo de SEO provisto por la gente de SWFAddress no lo hace exactamente intuitivo para replicarlo utilizando sus propios datos. La idea de que necesitaría volver a crear su sitio en HTML para ocultarse debajo de su otro sitio es realmente solo una opción para las personas que tienen un sitio web Flash o algo así. Para cualquiera con una aplicación Flex seria en lugar de un sitio web de algún tipo, es una broma. ¿Cómo se supone exactamente cómo construir un sitio alternativo cuando todo se basa en actividades SWF alimentadas por XML??

Pero me di cuenta de que realmente no tenía que construir nada más que un enlace, un título y una descripción que es solo otra versión del mismo título, y al usar una hoja de cálculo que es la que uso para construir todos mis unidades de lecciones de todos modos, podría cortar y pegar fácilmente los valores correspondientes a las URL de mi aplicación Flex.


Paso 11: Descarga el paquete alternativo de PHP PHP; Siga el tutorial corto

Los archivos que usé para mi propia implementación de SEO para SWFAddress fueron modificados del paquete que se encuentra en pokd.org. El tutorial para usar estos archivos es breve, directo y fácil de seguir. Usted puede encontrar el tutorial aquí. La versión SEO de Asual.com no me funcionó en absoluto, y encontré que otras personas se quejan de lo mismo. No pierda el tiempo: descargue la versión de pokd.org o use los archivos que se encuentran en el paquete de descarga para este tutorial. Trunqué un poco mis propios archivos para mostrar solo mis dos primeras secciones: childrens y comienzo, para facilitar la lectura de los archivos..


Paso 12: desactiva Javascript en tu navegador para probar

Tienes que desactivar javascript en su navegador para probar la versión no Flex / Flash de su sitio! Eso y hacer visible el desbordamiento de la división principal. A menos que tenga un sitio de 5 o 10 páginas, tener el desbordamiento oculto hace que las pruebas sean imposibles. Los archivos SEO adicionales que utilizará consisten en 2 archivos PHP, 1 archivo .htaccess y 1 archivo Javascript adicional que se deben colocar en su / swfaddress carpeta dentro de tu flexión / bin-release carpeta).


Paso 13: crea tus URL de SEO y títulos de página a través de una hoja de cálculo

Abra su aplicación de hoja de cálculo y abra el archivo titulado swfaddress_seo_index.ods o .xls que encontrarás en el paquete de descarga de este tutorial. Modifíquelos para satisfacer sus propias necesidades. Esta es la hoja de cálculo en la que obtuve los valores de la URL de mi aplicación, las secciones y la babosa para crear todos los enlaces swf [a hrefs] necesarios para la index.php archivo (Necesitará su URL completa "limpia" en cada enlace sin el main.html # así como el título de su página). Corte y pegue desde su aplicación de hoja de cálculo a Notepad ++ o cualquier editor de código de texto que use, y asegúrese de que no tenga ninguna pestaña o espacio innecesario, y que todo se vea bien para pegarlo en su archivo PHP.

Mis nuevas URL completas se parecen a esto en el navegador, tenga en cuenta que el símbolo de hash (#) ahora se ha ido:

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


Paso 14: agrega tus enlaces y títulos al archivo Index.php

Como tengo más de 70 páginas, elegí solo poner las secciones en el index.php página. Las otras demostraciones que he visto incluyen todas las páginas del sitio, pero estos son sitios pequeños. Incluyendo un enlace a cada página en su index.php significa que cada vez que el bot de Google visite una página individual, verá todos esos enlaces. Esa es una mala idea. Así que solo pon tus páginas principales en el index.php página, y dejar que el fuente de datos.php cuidate del resto.


Paso 15: Crea tus declaraciones de cambio a través de hoja de cálculo

Echa un vistazo a la hoja de cálculo titulada swfaddress_seo_datasource.ods o .xls En los archivos de este proyecto. Este ejemplo muestra cómo corte y pegue los valores de mi base de datos para rellenar las declaraciones del switch. Una vez que haya completado esta hoja de cálculo con sus propios valores, use un editor de código como Notepad ++ para eliminar las pestañas adicionales y verificar el formato correcto antes de pegar en su archivo PHP.


Paso 16: Agregue declaraciones de cambio a su archivo Datasource.php

Las declaraciones de cambio son bastante sencillas, aunque en mi caso también quería incluir el contenido de cada archivo XML que alimenta mis actividades educativas, para usar esas palabras clave en cada archivo que ven los motores de búsqueda. Los ejemplos que he visto suponen que alguien se sentaría y crearía descripciones de página únicas para cada archivo representado en el fuente de datos.php archivo, pero esa es una opción tremendamente lenta para alguien con docenas o cientos de entradas de datos en su sitio Flex. Así que creé una nueva página content.php que usa una descripción de página diferente dependiendo de qué actividad se encuentra en la URL. Además, adjunto la impresión del XML para cualquier página que también tenga un archivo XML asociado..

 caso '/ inicio': eco ('

Esta sección es para personas de 10 años en adelante que desean comenzar con lo básico en un curso de español de 18 semanas. Algunos aspectos destacados: pronunciación y acentos verbos y tiempos verbales que comienzan a hablar Hojas de trabajo en español y cuestionarios Insta Spanish eLearning Demo Beginning Spanish Lesson.

'); descanso; case '/ childrens / up_downvocab': echo ('

Lección de español para niños - Arriba y abajo - Lista de vocabulario de la lección

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

Paso 17: Edita tu archivo .htaccess

El archivo .htaccess debe ajustarse según la carpeta base para la configuración de su servidor en particular. Por ejemplo, mi carpeta de prueba XAMPP dentro de / htdocs se llama instademo, así que mi .htaccess tiene esta línea para el RewriteBase:

RewriteBase / instademo

La aplicación Flex en mi servidor en vivo también está contenida en una subcarpeta y no en mi carpeta de inicio, por lo que la línea anterior en ese caso apunta a esta carpeta. Tenga en cuenta que comienza con una barra inclinada hacia adelante, pero no tener una barra al final.


Paso 18: Prueba tu sitio PHP PHP localmente

Inicie XAMPP o lo que sea que use para su configuración local de Apache / PHP, y coloque sus archivos de implementación de PHP, .htaccess, javascript y Flex en una subcarpeta de / htdocs carpeta o lo que su configuración utiliza como la carpeta para archivos web. Si quieres probar el sitio SEO, tendrás que desactivar javascript. Esa es la versión que verán los bots del motor de búsqueda, así como cualquier visitante web que no tenga habilitado JavaScript o Flash. Comprueba que no veas ningún error de PHP y que tus enlaces funcionen correctamente.


Paso 19: Crea tu Sitemap

El Sitemap es lo más fácil de crear. Tomar el swfaddress_link valores de tu swfaddress_seo_index.ods o .xls hoja de cálculo. Péguelos todos en Notepad ++ o en su editor de código, y realice una búsqueda y reemplazo para eliminar cualquier espacio o pestaña, luego agregue su URL completa. En mi caso, tomé valores como:

/ childrens / up_downvocab

/ childrens / up_downlesson1

/ beginningpresent_verbslesson1

/ beginningpresent_verbslesson2

Y los cambié a:

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

Guarde este archivo como .TXT y luego abra su programa Vigos Gsitemaps e importe estas URL para crear su Google Sitemap.


Paso 20: envía tu sitemap a Google

Sus páginas de SEO tienen más posibilidades de ser encontradas rápidamente por Google si envía un sitemap. Si aún no tiene una, cree una cuenta de Herramientas para webmasters en Google.com. Desde allí puede agregar fácilmente su sitio web y enviar el mapa del sitio XML que ya ha creado en el programa Gsitemap.


Conclusión

Espero que este tutorial haya ayuda