Seleccionar idioma:
Realizar Donación - Mods Premium - Portfolio



Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.
Habitaciones por horas Palma y Chat palma de mallorca 
*

Mensajes: 110


Muchas veces he buscado temas responsive, o por lo menos medio adecuados para móviles, he encontrado uno que me sirve de base, supongo que habrá más. Lo que yo no quería  era tener que usar el tema que quiero que se visualice por defecto y con mediaquery o javascript, toquetear estilos. Entonces el problema era el siguiente. Si encontraba o me hacía un tema decente para móviles o incluso 2, uno para móviles y otro para tablets, ¿Como conseguía que se cargara un tema determinado según el dispositivo?.

Pues para eso sirve este pequeño truquillo, como siempre, muy mejorable, pero que funciona correctamente.

Lo primero que tenemos que hacer es descargar  Mobile Detect, se trata de un script en php capaz de detectar dispositivos móviles y tablets.
podéis descargarlo de la web del autor http://mobiledetect.net/

El archivo Mobile_Detect.php lo copiáis en la carpeta Sources del foro.

Ahora editamos el archivo Load.php que también se encuentra en la carpeta Sources y buscamos esto:
Código: [Seleccionar]
// Load a theme, by ID.
function loadTheme($id_theme = 0, $initialize = true)
{
global $user_info, $user_settings, $board_info, $sc, $boarddir;
global $txt, $boardurl, $scripturl, $mbname, $modSettings, $language;
global $context, $settings, $options, $sourcedir, $ssi_theme, $smcFunc;

y a continuación agregamos esto:
Código: [Seleccionar]
require_once($sourcedir . '/Mobile_Detect.php');
          $detect = new Mobile_Detect;

         // definimos el tema para el móvil
          if ( $detect->isMobile() ) {$id_theme = 21;}
         
         // definimos el tema para la tablet
          if( $detect->isTablet() ){$id_theme = 21;}

Y la magia ya está servida. Para el que quiera probarlo, que entre con un móvil a mi web www.chatpalmademallorca.com. El tema que se carga es el que he comentado antes, con el portal no va muy fino, pero si entráis al foro, no está del todo mal y sirve de base para crear uno. El tema se llama responsif-master y es open source y lo podéis descargar de aquí: https://github.com/tamiweiss/responsif

Como siempre espero que le sea de utilidad a alguien

Nota: 21 es el tema que he puesto tanto en móviles como en tablets, éste debe sustituirse por el ID del tema que cada cuál quiera usar en cada dispositivo.

Nota 2: Es importante leerse las instrucciones de Mobile Detect, porque se le pueden agregar más cosas, por ejemplo excepciones para dispositivos concretos, etc.
Ahora sólo queda que alguien que tenga tiempo y sepa, lo convierta en un mod autoinstalable y que en administración, donde se selecciona el tema por defecto, se pueda especificar uno para ordenadores, otro para tablets y otro para móviles, así funciona exactamente igual, pero quedaría de cine  :laugh:

Unido automaticamente - {Septiembre 23, 2014, 06:16:48 am}


Ya he encontrado el primer bug a mi mod.
SMF en su configuración permite seleccionar un tema para invitados y otro (desde el perfil de cada usuario) para los usuarios, este último, si no se toca nada usará el que hemos designado por defecto al foro, o lo que es lo mismo, el de invitado.
Pues el problema sucede al ingresar el usuario. En este caso, ya no respeta el cambio y cambia el tema al de usuario (o el del foro por defecto).
Imagino que esto ocurre porque la función de mi mod se ejecuta al cargar el foro y al ingresar como usuario, se ejecuta el cambio ya sin remedio.

Estoy trabajando en la solución, ni que decir tiene que toda ayuda o sugerencia, será bienvenida.

Unido automaticamente - {Septiembre 23, 2014, 06:45:53 am}


Edito de nuevo:
Hay más fallos y ya sé porque sucede lo del return false, cuando lo tenga todo claro, lo comento. Por el momento no lo uséis :(

Unido automaticamente - {Septiembre 23, 2014, 11:48:47 am}


Ya he arreglado uno de los fallos:
Lo del return:false, fue un lápsus mio producido por el sueño que tenía :) Simplemente no se ejecutaba el código por los dos puntos y parecía que funcionaba pero no era así. Además un return false no me solucionaba el problema que describo a continuación:
Al ejecutar el script, la página se recarga, por tanto vuelve a ejecutarse una y otra vez hasta el infinito. La solución pasa en ponerle una condición, debe comprobar que ya se ha ejecutado y en ese caso ignorarlo. He buscado por las variables de SMF y no he conseguido nada utilizable, por tanto he decidido crearlo yo de la siguiente manera:
Cuando se ejecuta uno de los dos 'if' tanto el del móvil como el de tablet, se crea una variable de sesión y un 'if' padre, comprueba si ésta existe y sólo ejecutará el código si no existe.
El código de arriba ya está oportunamente modificado para que haga todo eso de forma eficiente.
En cuanto al otro problema, de que cuando inicie sesión un usuario ignore esta configuración, sigue pendiente de solución. Mi idea es localizar donde SMF ejecuta esa función y utilizar la misma variable de sesión (si se puede) para evitar que se ejecute el código, en caso de no poder usarla, pensaré otra cosa, porque me suena que ya tuve problemas con SMF al usar variables de sesión en distintas plantillas.

En cuanto lo sulucione, lo posteo.

MUY IMPORTANTE
Todo solucionado, el post ya está actualizado y he cambiado y mejorado muchas cosas, a continuación las detallo:

- Ya no es necesario usar ningún MOD de apoyo.
- Ya no se recarga la página, sino que SMF selecciona el tema directamente al cargarse, todo es más rápido y limpio así.
- Ya no se crea ninguna variable de sesión, pues al no recargarse, ni se pierde info, ni se ejecuta de nuevo el script.
- Ya no se usa javascript, todo se hace con PHP puro.
- Ya no se cambia el tema por el del usuario al iniciar sesión, excepto naturalmente desde ordenador.
- Código aún más simplificado, hasta el punto de que sorprende que funcione.  :laugh: :laugh: :laugh:

Pido 1000 disculpas por haber lanzado un script con errores, ahora creo que todo funciona perfecto, agradeceré reporte de bugs si los hay.  ;)



Usuario:
Contraseña:
Sesión: