Jump to content
  • Sky
  • Blueberry
  • Slate
  • Blackcurrant
  • Watermelon
  • Strawberry
  • Orange
  • Banana
  • Apple
  • Emerald
  • Chocolate
  • Charcoal

Search the Community

Showing results for tags 'Complementos-Mod'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • El núcleo de PHPost
    • Novedades e información
    • Off Topic
    • Presentaciones
  • PHPost Risus
    • Actualizaciones
    • Versión 1.1
    • Versión 1.2
  • La esquina
    • Rincón del PC
    • Rincón del móvil
  • Juegos de Steam Gratis's Activos
  • Juegos de Steam Gratis's Finalizados
  •                                                                                                                                                                                                                                                                's TRABAJOS
  •                                                                                                                                                                                                                                                                's EL CLUB
  •                                                                                                                                                                                                                                                                's PRESENTACIONES
  •                                                                                                                                                                                                                                                                's OTROS FRAMEWORKS
  •                                                                                                                                                                                                                                                                's DERIVACIONES
  •                                                                                                                                                                                                                                                                's WEBS CON BOOTSTRAP
  •                                                                                                                                                                                                                                                                's TEMAS TERMINADOS
  •                                                                                                                                                                                                                                                                's TEMAS EN VENTA
  •                                                                                                                                                                                                                                                                's MODS EN DESARROLLO
  •                                                                                                                                                                                                                                                                's MODS EN VENTA
  •                                                                                                                                                                                                                                                                's MODS TERMINADOS
  •                                                                                                                                                                                                                                                                's TEMAS EN DESARROLLO
  •                                                                                                                                                                                                                                                                's OFF-TOPIC
  •                                                                                                                                                                                                                                                                's MODS PARA OTROS SCRIPTS
  •                                                                                                                                                                                                                                                                's TEMAS PARA OTROS SCRIPTS
  • MozzFire's Bug's
  • MozzFire's Noticias
  • MozzFire's MozzFire v4.1.3
  • MozzFire's MozzFire MDLite
  • Escuela de Actualización de Risus Phpost's Presentación
  • Escuela de Actualización de Risus Phpost's PHP 7.X
  • Escuela de Actualización de Risus Phpost's Smarty
  • Escuela de Actualización de Risus Phpost's Jquery & JS
  • Escuela de Actualización de Risus Phpost's PHP
  • Escuela de Actualización de Risus Phpost's EXTRAS
  • Escuela de Actualización de Risus Phpost's Fixes
  • Escuela de Actualización de Risus Phpost's Actualizados

Calendars

  •                                                                                                                                                                                                                                                                's CALENDARIO

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


AIM


MSN


Sitio web


ICQ


Yahoo


Jabber


Skype


Localización


Intereses

Found 732 results

  1. Hola, este complemento podría considerarse en realidad una "plantilla" para el anterior RChat que publiqué ya que la mayor parte del funcionamiento es el mismo. Para instalar este chat no es necesario tener el anterior RChat y si lo tienes también puedes instalarlo sin problemas, los archivos se sobrescribirán. Actualización 06/03/2015 a las 18:00 - Descarga actualizada: se ha corregido un fallo en el instalador que evita que aparezca el icono de los emoticonos. 08/03/2015 a las 22:10 - Descarga actualizada: se añadió seguridad adicional para evitar el flood. 09/03/2015 a las 23:15 - Descarga actualizada: ahora se muestran todos los emoticonos y se pueden agregar desde el chat. Más capturas Caja de emoticonos abierta. Lista de moderación. Eliminar mensajes (onmouseover). Suspender usuario (onmouseover). Características Color de nick aleatorio como en grupos de WhatsApp. Suspender usuario por nick y por mensaje. Ver/editar/eliminar usuarios suspendidos. Borrar mensajes individualmente o todos de un usuario. Agrupar mensajes seguidos del mismo usuario. Mensajes propios diferenciados (alineado a la derecha en verde) BBCodes: [b], [i], [u], [br], [url], [color]. Imágenes y URLs automáticas. Censuras globales. Emoticonos globales a través de censuras. Antiflood, suspende durante 2 horas. El antiflood no afecta al staff. Diseño separado para funcionar con cualquier plantilla. Agregar emoticonos desde el chat. Selector de emoticonos. Descarga Para Risus 1.2 o superior: rchat_whatsapp_1.2.zip Instrucciones Subir el directorio "install" a la raíz y acceder desde el navegador a http://www.tuweb.com/install/index.php
  2. Importante! Ésta versión está desactualizada, para instalar la nueva versión entra a este tema: http://www.phpost.net/index.php?showtopic=28557 _____________________________________________________________________________________________________________ Hola, esta es la segunda versión del editor wysiwyg y posiblemente la última si no se encuentran fallos graves. Para los que ya habían instalado el anterior mod, sugiero realizar toda la instalación otra vez aunque parezca que ya lo habéis hecho. Actualización 16/12/2013 a las 02:10 - Se actualizó la descarga, faltaba el archivo iupload.php (necesario). 16/12/2013 a las 02:15 - Se actualizó la descarga, faltaba el archivo Instrucciones.txt. 16/12/2013 a las 19:57 - Se actualizó el complemento, nueva descarga, se actualizan: wysibb.js y wysibb.css (necesario). 16/12/2013 a las 20:09 - Se actualizó la instalación, añadida una nueva modificación en el paso 2 (necesario). 18/12/2013 a las 14:21 - Se actualizó la descarga (wysibb.js), error en tamaño de fuente corregido. 01/07/2014 a las 23:58 - Se actualizó la descarga (wysibb.js), corrección temporal para los interrogantes. 09/07/2014 a las 18:31 - Se actualizó la descarga (wysibb.js), añadido fix de Goear. Mejoras de la versión Se han corregido cerca de 30 errores menores. Todos los bbcodes funcionan al 100% Se ha añadido el editor a los mensajes y comentarios. Se han agregado nuevos bbcodes. Los vídeos de YouTube ahora funcionan con SSL. Y muchas más cosas que iré poniendo cuando me acuerde xD Instalación: Paso 1 - Descargar y subir archivos necesarios. Descargar el archivo wysiwyg_beta_v1.2.1.zip, extraer su contenido y subir el contenido de los directorios extraídos en el lugar que se indica en las instrucciones. Paso 2 - Incluir archivos necesarios para el funcionamiento del editor. Abrir el archivo main_header.tpl y agregar: <link href="{$tsConfig.css}/wysibb.css" rel="stylesheet" type="text/css" /> debajo de: <link href="{$tsConfig.tema.t_url}/extras.css" rel="stylesheet" type="text/css" /> Después, en el mismo archivo, agregar: <script src="{$tsConfig.js}/wysibb.js" type="text/javascript"></script> debajo de: <script src="{$tsConfig.js}/funciones.js" type="text/javascript"></script> Por último, añadir: {literal} $(document).ready(function() { var comments = { buttons: "smilebox,|,bold,italic,underline,strike,sup,sub,|,img,video,link,|,fontcolor,fontsize,fontfamily,|,bullist,numlist,spoiler,table,|,left,center,right,|,quote,code,goear,swf,|,removeFormat", resize_maxheight: 400, } var messages = { buttons: "smilebox,|,bold,italic,underline,strike,sup,sub,|,img,video,link,|,removeFormat", resize_maxheight: 400, } $("#wysibb").wysibb(); $("#respuesta").wysibb(messages); $("#body_comm").wysibb(comments); }); {/literal} antes de: </script> </head> Paso 3 - Sustituir el editor actual. Abrir el archivo m.agregar_form.tpl, buscar: <textarea id="markItUp" name="cuerpo" tabindex="2" style="min-height:400px;" class="required">{$tsDraft.b_body}</textarea> <div style="margin:10px 0 0;">{include file='modules/m.global_emoticons.tpl'}</div> y sustituirlo por: <textarea id="wysibb" name="cuerpo" tabindex="2" style="min-height:400px;" class="required">{$tsDraft.b_body}</textarea> (sí, se ha eliminado una línea) Después, abrir el archivo m.posts_comments_form.tpl, buscar: <textarea id="body_comm" class="onblur_effect autogrow" tabindex="1" title="Escribir un comentario..." style="resize:none;" onfocus="onfocus_input(this)" onblur="onblur_input(this)">Escribir un comentario...</textarea> y sustituirlo por: <textarea id="body_comm" class="onblur_effect autogrow" tabindex="1" title="" style="height: 100px; resize: none;" onfocus="onfocus_input(this)" onblur="onblur_input(this)"></textarea> (se ha vaciado title="", borrado el texto antes de </textarea> y agregado height: 100px; al style="") En el mismo archivo, buscar: <div class="floatR"> <a href="#" onclick="moreEmoticons(true); return false;" class="floatR" id="moreemofn"> M&aacute;s emoticones</a> </div> {include file='modules/m.global_emoticons.tpl'} y borrarlo. Finalmente, abrir m.mensajes_leer.tpl y buscar: <textarea id="respuesta" onfocus="onfocus_input(this)" onblur="onblur_input(this)" title="Escribe una respuesta..." class="autogrow onblur_effect">Escribe una respuesta...</textarea> y sustituirlo por: <textarea id="respuesta" style="height: 100px;" onfocus="onfocus_input(this)" onblur="onblur_input(this)" title="" class="autogrow onblur_effect"></textarea> (se ha vaciado title="", borrado el texto antes de </textarea> y añadido style="height: 100px;") Paso 4 - Editar el JavaScript para adaptar las funciones del editor. Abrir el archivo m.agregar_javascript.tpl y buscar: obj = $(obj).parent().parent().parent(); y sustituir por: obj = $(obj).parent().parent(); (hay dos líneas así, se sustituyen las dos) Después, en el mismo archivo, buscar: function save_borrador(){ agregar debajo: wysi.on(); y antes de que cierre la función (antes del "}" de la línea 85 en el tema default), añadir: wysi.off(); Debería quedar algo así: function save_borrador(){ wysi.on(); <CONTENIDO DE LA FUNCIÓN> wysi.off(); } Después, aún en el mismo archivo, buscar: function postSave() { y debajo agregar: wysi.on(); Por último en este archivo, antes de: </script> {/literal} agregar: $(function() { $(window).scroll(function() { var position = $('.wysibb').offset(), y = position.top, h = $('.wysibb').height(), yh = y + h, w = $('.wysibb').width() - 47; var th = $('.wysibb-toolbar').height(), pad = $('.wysibb-toolbar').height(); if(window.pageYOffset > y && window.pageYOffset < yh) { $('.wysibb-toolbar').css({'position':'fixed', 'top':'0', 'width':w, 'height':th}); $('#wysibb, .wysibb-body').addClass('padtop'); }else { $('.wysibb-toolbar').removeAttr('style'); $('#wysibb, .wysibb-body').removeClass('padtop'); } }); }); Ahora, abrir acciones.js y buscar: if($('#body_comm') && !$('#markItUpbody_comm').length){ $('#body_comm').markItUp(mySettings_cmt); } y borrarlo. En el mismo archivo, buscar: mydialog.buttons(true, true, 'Enviar', 'mensaje.enviar(0)', true, true, true, 'Cancelar', 'close', true, false); mydialog.center(); y agregar debajo: var messages = {buttons: "smilebox,|,bold,italic,underline,strike,sup,sub,|,img,video,link,|,removeFormat",resize_maxheight: 400,} $('#msg_body').wyisbb(messages); Un poco más abajo, buscar: enviar: function (enviar){ debajo agregar: wysi.on('msg_body'); y antes de que cierre la función (antes de "},"), agregar: wysi.off('msg_body'); Quedaría algo así: Por último, siguiendo en el mismo archivo y dentro de la misma variable, buscar: responder: function(mp_id){ debajo agregar: wysi.on('respuesta'); después, dentro de la función buscar: $('#respuesta').val(''); // LIMPIAMOS y agregar debajo: $('.wysibb-body').html(''); y antes de cerrar la función (antes de "},"), agregar: wysi.off('respuesta'); Debería quedar así: Ahora, abrir el archivo funciones.js y buscar la función: nuevo: function(mostrar_resp, comentarionum){ debajo agregar: wysi.on('body_comm'); y antes de que termine la función (antes de "},"), agregar: wysi.off('body_comm'); Así es como debe quedar: Por último, en el mismo archivo buscamos la función: preview: function(id, type){ y debajo agregar: wysi.on('body_comm'); y antes de que termine la función (antes de "},"), agregar: wysi.off('body_comm'); Así es como debe quedar: Paso 5 - Añadir nuevos bbcodes en PHP Abrir el archivo bbcode.inc.php, buscar: public $restriction = Array("url", "code", "quote", "quotePHPost", "font", "size", "color", "img", "b", "i", "u", "align", "spoiler", "swf", "goear", "hr", "li"); y añadir antes de ");" esto: , "s", "sub", "sup", "table", "td", "tr", "ul", "ol", "li", "notice", "info", "warning", "error", "success" En el mismo archivo, buscar: array("name" => "b","pre" => "<b>","suf" => "</b>"), y debajo añadir: array("name" => "s","pre" => "<s>","suf" => "</s>"), array("name" => "sub","pre" => "<sub>","suf" => "</sub>"), array("name" => "sup","pre" => "<sup>","suf" => "</sup>"), array("name" => "table","pre" => "<table class=\"bbctab\"><tbody>","suf" => "</tbody></table>"), array("name" => "tr","pre" => "<tr>","suf" => "</tr>"), array("name" => "td","pre" => "<td>","suf" => "</td>"), array("name" => "ul","pre" => "<ul class=\"bbclist\">","suf" => "</ul>"), array("name" => "ol","pre" => "<ol class=\"bbclist\">","suf" => "</ol>"), array("name" => "li","pre" => "<li>","suf" => "</li>"), array("name" => "notice","pre" => "<div class=\"bbcmsg notice\">","suf" => "</div>"), array("name" => "info","pre" => "<div class=\"bbcmsg info\">","suf" => "</div>"), array("name" => "warning","pre" => "<div class=\"bbcmsg warning\">","suf" => "</div>"), array("name" => "error","pre" => "<div class=\"bbcmsg error\">","suf" => "</div>"), array("name" => "success","pre" => "<div class=\"bbcmsg success\">","suf" => "</div>"), Para acabar la instalación, abrir el archivo c.core.php y buscar: case 'normal': en el array que tiene debajo: $parser->restriction = array('url', 'code', 'quote', 'quotePHPost', 'font', 'size', 'color', 'img', 'b', 'i', 'u', 'align', 'spoiler', 'swf', 'goear', 'hr', 'li'); añadir antes de ");" esto: , 's', 'sup', 'sub', 'table', 'tr', 'td', 'ul', 'ol', 'li', 'notice', 'info', 'warning', 'error', 'success' Y por fin tienes instalado el editor Demo y capturas: Demo: wysibb.rcdesign.es Usuario: demo Contraseña: demo123
  3. Pedido: [Mod] Imagen de cabecera en comunidades Por: @fellomix Una segunda forma de poder hacerlo! 1 - Ejecutar esta consulta ALTER TABLE `c_comunidades` ADD `c_headercom` VARCHAR(255) NOT NULL AFTER `c_nombre_corto`; 2 - Buscar en c.comunidades.php en la función nueva_comunidad() 'fecha' => time(), 'nombre' => $tsCore->setSecure($tsCore->parseBadWords($_POST['nombre']), true), 'ncorto' => $tsCore->setSeo($tsCore->setSecure($_POST['ncorto'], true)), y debajo agregamos 'headercom' => $tsCore->setSeo($tsCore->setSecure($_POST['headercom'], true)), un poco más abajo buscamos // Insertamos if(db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO c_comunidades (c_autor, c_nombre, c_nombre_corto, y le agregamos a lado c_headercom, un poquito más abajo de VALUES ( \''.$tsUser->uid.'\', \''.$dato['nombre'].'\', \''.$dato['ncorto'].'\', agregamos \''.$dato['headercom'].'\', Luego buscamos la función editar_comunidad($comid) 'pais' => $tsCore->setSecure($_POST['pais']), 'desc' => $tsCore->setSecure($_POST['descripcion']), 'color' => $tsCore->setSecure($_POST['back_color']), y debajo pegamos 'headercom' => $tsCore->setSecure($_POST['headercom']), más abajo buscamos c_acceso = \''.(int)$dato['acceso'].'\', c_permisos = \''.$dato['permisos'].'\', y debajo pegamos c_headercom = \''.$dato['headercom'].'\', 3 - Después buscamos en c.crear_left.tpl <div class="item_form clearfix"> <label>Categoría</label> <select name="categoria" id="ShowCats" class="required" onChange="com.subcat()" tabindex="3"> <option value="0">Selecciona una categoría</option> {foreach from=$tsCats item=c} <option value="{$c.cid}" {if $tsDato.c_categoria == $c.cid}selected="selected"{/if}>{$c.c_nombre}</option> {/foreach} </select> </div> y debajo o arriba pegamos (se me olvido quitar los required, ya que no es obligatorio) <div class="item_form clearfix"> <label>Cabecera!</label> <input type="text" name="headercom" tabindex="10" maxlength="180" size="60" class="required input_text https" placeholder="URL de portada (debe tener https://)" pattern="https://.*" value="{$tsDato.c_headercom}"> <small class="mg-lt">Solo admitirá los https!</small> </div> 4 - Después buscamos c.com_info.tpl [línea 24 y 25] <div class="ver_com_info"> <div class="vci_left floatL"> y la reemplazamos por <div class="ver_com_info" style="background-image: url({$tsCom.c_headercom});"> <div class="opacity"> <div class="vci_left floatL"> luego debajo de la línea 61 agregaremos un </div> 5 - Por último agregaremos esto a comunidades.css .ver_com_info { padding: 0; } .headercom { background-position: center center; background-size: cover; background-repeat: no-repeat; } .opacity { padding: 20px 8px; background-color: rgba(255,255,255,.6); }
  4. Hola amigos, hace ya mucho tiempo les traje una tienda automática, cuya administración era muy pobre. Como he visto que bastante gente lo usaba he desarrollado una v2 mas manejable. ¿Que tiene? - Administración completa de los productos de la tienda - Sección tienda - Instalación más sencilla que la v1 - Código más optimizado Próximamente más productos 1) Suben todos estos archivos como se indica: https://www.mediafire.com/?8rx9r8mk3ou7fa7 m.admin_tienda.tpl -> themes/TUTEMA/templates/admin_mods m.tienda.tpl -> themes/TUTEMA/templates/modules t.tienda.tpl -> themes/TUTEMA/templates tienda.php -> inc/php c.tienda.php -> inc/class 2) Hacen esta SQL en su BD: CREATE TABLE IF NOT EXISTS `t_productos` ( `id` int(11) NOT NULL AUTO_INCREMENT, `type` int(1) NOT NULL, `precio` int(4) NOT NULL, `obj` int(5) NOT NULL DEFAULT '0', `obj_2` int(5) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 3) Abren el t.admin.tpl de themes/TUTEMA/templates y buscan: {elseif $tsAction == 'rangos'} {include file='admin_mods/m.admin_rangos.tpl'} Y abajo agregan: {elseif $tsAction == 'tienda'} {include file='admin_mods/m.admin_tienda.tpl'} 4) Abren el admin.php de inc/php y buscan: } elseif($action == 'configs'){ // GUARDAR CONFIGURACION if(!empty($_POST['titulo'])) { if($tsAdmin->saveConfig()) $tsCore->redirectTo($tsCore->settings['url'].'/admin/configs?save=true'); } Y justo debajo añaden: /** TIENDA **/ } elseif($action == 'tienda'){ include('../class/c.tienda.php'); $tsTienda = new tsTienda; if(empty($act)){ $productos = $tsTienda->getProductos(); if(is_array($productos)) $smarty->assign("tsProductos", $productos); else $smarty->assign("tsError", $productos); }elseif($act == 'nuevo' && !empty($_POST['type'])){ $producto = $tsTienda->nuevoProducto(); if($producto == 1) $tsCore->redirectTo($tsCore->settings['url'].'/admin/tienda?save=true'); else $smarty->assign("tsError", $producto); } elseif($act == 'editar'){ if(!empty($_POST['type'])){ $producto = $tsTienda->editProducto((int)$_GET['id']); if($producto == 1) $tsCore->redirectTo($tsCore->settings['url'].'/admin/tienda?save=true'); else{ $smarty->assign("tsError", $producto); $producto = $tsTienda->getProducto((int)$_GET['id']); if(is_array($producto)) $smarty->assign("tsProducto",$producto); else $smarty->assign("tsError", $producto); } } else{ $producto = $tsTienda->getProducto((int)$_GET['id']); if(is_array($producto)) $smarty->assign("tsProducto",$producto); else $smarty->assign("tsError", $producto); } } elseif($act == 'borrar'){ $producto = $tsTienda->delProducto(); if($producto == 1) $tsCore->redirectTo($tsCore->settings['url'].'/admin/tienda?save=true'); else $smarty->assign("tsError", $producto); } 5) Abren el c.user.php de inc/class y buscan: // NOMBRE $this->nick = $this->info['user_name']; $this->uid = $this->info['user_id']; $this->is_banned = $this->info['user_baneado']; Abajo añaden: $this->puntos = $this->info['user_puntos']; 6) Abren el m.admin_sidemenu.tpl de themes/TUTEMA/templates/admin_mods y buscan: <li id="a_cats"><span class="cat-title"><a href="{$tsConfig.url}/admin/cats">Categor&iacute;as</a></span></li> Abajo añaden: <li id="a_ads"><span class="cat-title"><a href="{$tsConfig.url}/admin/tienda">Tienda</a></span></li> 7) Para acabar, abren el head_menu.tpl de themes/TUTEMA/templates/sections y buscan: <li class="tabbed {if $tsPage == 'tops'}here{/if}" id="tabbedtops"> <a title="Ir a TOPs" onclick="menu('tops', this.href); return false;" href="{$tsConfig.url}/top/">TOPs <img alt="Drop Down" src="{$tsConfig.tema.t_url}/images/arrowdown.png"></a> </li> Y abajo añaden: <li class="tabbed {if $tsPage == 'tienda'}here{/if}" id="tabbedtops"> <a title="Ir a Tienda" onclick="menu('tops', this.href); return false;" href="{$tsConfig.url}/tienda/">Tienda <img alt="Drop Down" src="{$tsConfig.tema.t_url}/images/arrowdown.png"></a> </li> Y listo!! Caps: Demo: http://programu.net/tienda/ User: demo Pass: demo1234 Espero que les guste P.D: Proximamente nuevos productos, si desean algún producto en concreto no duden en pedirlo
  5. PopAds Linkbucks Administrable Aqui les comparto este complemento que podran generar ingresos para su web/s , dependiendo del trafico que se de abtendran mayores ganancias.. Se trata de un PopAds que se genera al hacer clic en algun enlace de tu web, y podras elegir si solo lo toma a visitantes o global a todos.. Este se puede usar con cualquier acortador, Recomendable usarlo con linkbucks ya que podes usar un solo enlace acortado y te sumara siempre, caso de los demas que no te suman si tenes la misma IP. Hacemos esta consulta SQL: ALTER TABLE `w_configuracion` ADD `popads` tinytext NOT NULL, ADD `popadasoff` int(1) NOT NULL DEFAULT '0', ADD `popadasvg` int(1) NOT NULL DEFAULT '1'; En c.admin.php buscamos: 'offline_message' => $tsCore->setSecure($tsCore->parseBadWords($_POST['offline_message'])), Y agregamos abajo: 'popads' => $tsCore->setSecure($tsCore->parseBadWords($_POST['popads'])), 'popadasoff' => empty($_POST['popadasoff']) ? 0 : 1, 'popadasvg' => empty($_POST['popadasvg']) ? 0 : 1, Mas abajo buscamos: , `offline_message` = \'' . $c['offline_message'] . '\' Y agregamos al lado: , `popads` = \'' . $c['popads'] . '\', `popadasoff` = \'' . $c['popadasoff'] . '\', `popadasvg` = \'' . $c['popadasvg'] . '\' En m.admin_configs.tpl buscamos: <dl> <dt><label for="ai_chat">Chatango ID:</label><br /><span>Por defecto puedes agregar un chat de <a href="http://chatango.com">Chatango</a> para tu web, solo crea tu grupo he ingresa el nombre. (Dejar vac&iacute;o para usar xat)</span></dt> <dd><input type="text" id="ai_chat" name="chat" maxlength="20" value="{$tsConfig.chat_id}" /> </dd> </dl> Y agregamos arriba: <hr> <dl> <dt><label for="popadasoff">Activar Popads:</label><br /><span>Ingresar la url del enlace acortado.</span></dt> <dd> <label><input name="popadasoff" type="radio" id="popadasoff" value="1" {if $tsConfig.popadasoff == 1}checked="checked"{/if} class="radio"/>Si</label> <label><input name="popadasoff" type="radio" id="popadasoff" value="0" {if $tsConfig.popadasoff != 1}checked="checked"{/if} class="radio"/>No</label> <br /> <input type="text" name="popads" id="popads" value="{$tsConfig.popads}" /> </dd> </dl> <dl> <dt><label for="popadasvg">Popads a visitantes o global:</label><br /><span>Indica si los popads seran solo para visitantes o global para todos.</span></dt> <dd> <label><input name="popadasvg" type="radio" id="popadasvg" value="1" {if $tsConfig.popadasvg == 1}checked="checked"{/if} class="radio"/>Si</label> <label><input name="popadasvg" type="radio" id="popadasvg" value="0" {if $tsConfig.popadasvg != 1}checked="checked"{/if} class="radio"/>No</label> </dd> </dl> <hr> En main_header.tpl buscamos: <script src="{$tsConfig.js}/funciones.js" type="text/javascript"></script> Y agregamos abajo: {if $tsConfig.popadasoff == 1}{if $tsConfig.popadasvg == 1 && $tsUser->is_member==false}<script src="{$tsConfig.js}/popads.js" type="text/javascript"></script>{elseif $tsConfig.popadasvg == 0}<script src="{$tsConfig.js}/popads.js" type="text/javascript"></script>{/if}{/if} Subimos los archivos a sus respectivas carpetas. Archivos Pueden ver una Demo en mi web que se aplica a los visitantes, si quieren pueden optar que les salga a todos asi sumarian mas rapido, queda a disposición de cada uno. Ingresos Generados con Visitas En su cuenta de linkbucks deberan acortar un enlace de la siguiente manera: Pago Recibido Con esto sacaran mejores ingresos que con los demas acortadores, si utilizan este no usar los demas. Espero les sea de Utilidad y generen ingresos para poder mantener sus web. Dependiendo la actividad en su/s web/s sumaran mejores ingresos, lo probe en una web y sacaba mas de 1 usd por dia, aveces hasta 3 usd. Espero les resulte y obtengan ingresos para pagar al menos gastos para hosting o mas. Hasta la Próxima..
  6. Quienes tenemos servidor de pago necesitamos de alguna manera rentabilizar nuestras paginas webs (ya sea para pago del servicio de alojamiento web o alguna ganancia extra) y por ello es que se inserta publicidad en ella, claro esta que algunos lo tendran de manera discreta como tambien hay paginas que se pasan con la publicidad haciendo molesta la navegacion pos sus sitios. En resumen este scripts lo que hace es detectar los bloqueadores de publicidad que los usuarios instalan en sus navegadores para de esa forma ver limpia la pagina, pero no se ponen a pensar que con esa publicidad se esta generando ingresos para el mantenimiento de la misma, al detectarlo les saldra un aviso de tipo: Su instalacion es muy simple: Abrir el archivo "main_footer.tpl" del theme que usen y busquen: </body> Agregar antes de eso: {literal} <style>#i32c{position:fixed!important;position:absolute;top:0;top:expression((t=document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop)+"px");left:0;width:100%;height:100%;background-color:#fff;opacity:0.9;filter:alpha(opacity=90);display:block}#i32c p{opacity:1;filter:none;font:bold 16px Verdana,Arial,sans-serif;text-align:center;margin:20% 0}#i32c p a,#i32c p i{font-size:12px}#i32c ~ *{display:none}</style><noscript><font id=i32c><p>Please enable JavaScript!<br>Bitte aktiviere JavaScript!<br>S'il vous pla&icirc;t activer JavaScript!<br>Por favor,activa el JavaScript!<br></p></font></noscript><script>(function(w,u){var d=w.document,z=typeof u;function i32c(){function c(c,i){var e=d.createElement('font'),b=d.body,s=b.style,l=b.childNodes.length;if(typeof i!=z){e.setAttribute('id',i);s.margin=s.padding=0;s.height='100%';l=Math.floor(Math.random()*l)+1}e.innerHTML=c;b.insertBefore(e,b.childNodes[l-1])}function g(i,t){return !t?d.getElementById(i).getElementsByTagName(t)};function f(v){if(!g('i32c')){c('<p>Please disable your ad blocker!<br>Bitte deaktiviere Deinen Werbeblocker!<br>Veuillez d&eacute;sactiver votre bloqueur de publicit&eacute;!<br>Por favor, desactive el bloqueador de anuncios! <br/><b>erotizate.info</b> no funciona con Adblock. Para ver este sitio es necesario no bloquear la publicidad,<br/> la publicidad de este sitio no es intrusiva y es gracias a ella que pagamos los gastos del servidor. <br> <img src="http://i.imgur.com/BG0YlJU.png"/></p>','i32c')}};(function(){var a=['ad11','ad_468x60','ad_bigsize_wrapper','adv-x36','backad','left_ad','topad2','ad','ads','adsense'],l=a.length,i,s='',e;for(i=0;i<l;i++){if(!g(a[i])){s+='<a id="'+a[i]+'"></a>'}}c(s);l=a.length;setTimeout(function(){for(i=0;i<l;i++){e=g(a[i]);if(e.offsetParent==null||(w.getComputedStyle?d.defaultView.getComputedStyle(e,null).getPropertyValue('display'):e.currentStyle.display)=='none'){return f('#'+a[i])}}},250)}());(function(){var t=g(0,'img'),a=['ad&largead=','/ad-server/ad','/ad_space.','/adgitize-','/adnetwork468.','/adtagtc.','/bannerfarm/ad','/showflashad.','/turbo_ad.','_ad_right.'],i;if(typeof t[0]!=z&&typeof t[0].src!=z){i=new Image();i.onload=function(){this.onload=z;this.onerror=function(){f(this.src)};this.src=t[0].src+'#'+a.join('')};i.src=t[0].src}}());(function(){var o={'http://pagead2.googlesyndication.com/pagead/show_ads.js':'google_ad_client','http://js.adscale.de/getads.js':'adscale_slot_id','http://get.mirando.de/mirando.js':'adPlaceId'},S=g(0,'script'),l=S.length-1,n,r,i,v,s;d.write=null;for(i=l;i>=0;--i){s=S[i];if(typeof o[s.src]!=z){n=d.createElement('script');n.type='text/javascript';n.src=s.src;v=o[s.src];w[v]=u;r=S[0];n.onload=n.onreadystatechange=function(){if(typeof w[v]==z&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){n.onload=n.onreadystatechange=null;r.parentNode.removeChild(n);w[v]=null}};r.parentNode.insertBefore(n,r);setTimeout(function(){if(w[v]===u){f(n.src)}},2000);break}}}())}if(d.addEventListener){w.addEventListener('load',i32c,false)}else{w.attachEvent('onload',i32c)}})(window);</script> {/literal} Pueden editar a su gusto, espero les sirva.
  7. tutan-kabron

    [mod] mi tipo tariinga

    hola traigo este mod mi pedido x muchos deben tener instalado los mods: -hashtags -pins -editar publicacion -cerrar comentarios (no pongo los links xq no recuerdo cuales son) subimos y reemlazamos estos archivos: https://mega.co.nz/#!c1pFmaCB!tH8D4-DhRXLQ47lc7VV8jCTq6chWaerD_UNVX-AVt1g hagan respaldos de sus archivos de la carpeta inc que viene en el rar ejecutan estas sqls ALTER TABLE u_muro ADD p_status ENUM( '0', '1' ) NOT NULL DEFAULT '0'; ALTER TABLE u_muro ADD p_nick varchar(16) NOT NULL; CREATE TABLE IF NOT EXISTS `u_muro_tags` ( `id` int(11) NOT NULL AUTO_INCREMENT, `p_id` int(11) NOT NULL, `p_tags` varchar(35) NOT NULL, `p_date` varchar(35) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; CREATE TABLE IF NOT EXISTS `u_pins` ( `pid` int(11) NOT NULL AUTO_INCREMENT, `p_user` int(11) NOT NULL, `p_data` text NOT NULL, `p_fecha` varchar(35) NOT NULL, PRIMARY KEY (`pid`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=21 ; ALTER TABLE u_muro ADD p_compa ENUM( '0', '1' ) NOT NULL DEFAULT '0'; ALTER TABLE u_muro ADD p_shared int(4) NOT NULL; ALTER TABLE u_muro ADD p_user_shared int(4) NOT NULL; CREATE TABLE IF NOT EXISTS `u_muro_compartir` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `post_id` int(11) NOT NULL, `p_date` varchar(35) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1; ALTER TABLE u_muro ADD p_favorito int(4) NOT NULL; CREATE TABLE IF NOT EXISTS `u_muro_favorito` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `post_id` int(11) NOT NULL, `p_date` varchar(35) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1; ojo en las sqls vienen lo de hashtags y pins si ya los tienen no las ejecuten x ultimo agreguen esto a su htaccess # MI RewriteRule ^mi/([a-z]+)$ index.php?do=portal&action=$1 [QSA,L] se reemplazaran c.muro,c.portal,portal.php.perfil..php y los archivos ajax correspondientes esta basado en v5 demo: http://www.mytech.com.mx/mi/ si encuentrarn algun problema avisenme caps: me olvide de esto: vayan a su tema/templates/modules/ y suban estas carpeta https://mega.co.nz/#!Ykp02YCS!hlIOxusUsrEc6pL3_DqGwjZEM1BqLh12kuC3DBX0jhw https://mega.co.nz/#!AlByDbZB!MOqR9xI7MQnqcERAUly0hGxbX4ok8DjQbk8mkNyaF8Q y t.perfil lo editan x este: {include file='sections/main_header.tpl'} <script type="text/javascript" src="{$tsConfig.default}/js/perfil.js"></script> <div class="bg-perfil"> {if $tsType == 'story'} {include file='modules/perfil/abrir-shout.tpl'} {else} <div class="bloque-i"> {include file='modules/perfil/cabecera-info.tpl'} {include file='modules/perfil/estadisticas-perfil.tpl'} {include file='modules/perfil/datos-ajax.tpl'} </div> <div class="sidebar-d" style="padding: 5px 10px 10px 10px;"> {include file='modules/perfil/administrar-usuario.tpl'} {include file='modules/perfil/redes-sociales.tpl'} {include file='modules/perfil/karma.tpl'} {include file='modules/perfil/medallas.tpl'} {include file='modules/perfil/seguidores.tpl'} {include file='modules/perfil/siguiendo.tpl'} {include file='modules/perfil/mis-imagenes.tpl'} </div> {/if} </div> {include file='sections/main_footer.tpl'}
  8. Hola amigos, les traigo un MOD que consiste en respuestas en los comentarios como en T!. El MOD está hecho para los comentarios que tengan el mismo diseño que la v4, no necesariamente tiene que ser el tema default ¿Que trae el MOD? - Respuestas en comentarios. - Citas en respuestas de otros comentarios. - Automatizado con JS 1) Abren el funciones.js de themes/TUTEMA/js y buscan: case '1': //OK $("#nuevos").slideUp(1); $('#preview').remove(); /*textarea.attr('title', 'Escribir un comentario...').val(''); onblur_input(textarea);*/ $('#nuevos').html(h.substring(3)).slideDown('slow', function () { $('#no-comments').hide('slow'); getUrls(gget('postid')); $('.miComentario').html('<div class="emptyData">Tu comentario fue agregado correctamente </div>'); }); // SUMAMOS var ncomments = parseInt($('#ncomments').text()); $('#ncomments').text(ncomments + 1); //$('#btnsComment').attr({'disabled':''}); // POR SI HABIA ERROR //$('.miComentario .error').html(''); break; } $('#loading').fadeOut(350); // $('.miComentario #gif_cargando').hide(); mydialog.close(); } }); }, Abajo añaden: resp: function(id){ $('#'+id).removeAttr('style'); var textarea = $('#bodys_comm_'+cid); textarea.focus(); }, nuevos: function(mostrar_resp, comentarionum, cid){ // EVITAR FLOOD $('#btnssComment').attr({'disabled':'disabled'}); // var textarea = $('#bodys_comm_'+cid); var text = textarea.val(); // VACIO o DEFAULT if(text == '' || text == textarea.attr('title')){ textarea.focus(); $('#btnssComment').attr({'disabled':''}); return; }else if(text.length > 1500){ alert("Tu comentario no puede ser mayor a 1500 caracteres."); textarea.focus(); $('#btnssComment').attr({'disabled':''}); return; } // IMAGEN $('.resp #gif_cargando').show(); var auser = $('#ausers_post').val(); var respuesta = $('#respuesta_'+cid).val(); $('#loading').fadeIn(250); $.ajax({ type: 'POST', url: global_data.url + '/comentario-agregar.php', data: 'comentario=' + encodeURIComponent(text) + '&postid=' + gget('postid') + '&mostrar_resp=' + mostrar_resp + '&auser=' + auser + '&respuesta=' + respuesta, success: function(h){ switch(h.charAt(0)){ case '0': //Error $('.resp .error').html(h.substring(3)).show('slow'); $('#btnssComment').attr({'disabled':''}); break; case '1': //OK $("#nuevoss_"+cid).slideUp(1); $('#preview').remove(); /*textarea.attr('title', 'Escribir un comentario...').val(''); onblur_input(textarea);*/ $('#nuevoss_'+cid).html(h.substring(3)).slideDown('slow', function () { $('.especial3').attr('class', 'especial1'); $('#nuevoss_'+cid+' .especial1 .comentario-post .comment-box').attr('style', 'width: 698px!important;'); $('#no-comments').hide('slow'); getUrls(gget('postid')); $('.resp').attr("style", "margin-left: 131px!important; width: 701px!important;"); $('.resp').html('<div class="emptyData">Tu comentario fue agregado correctamente </div>'); }); // SUMAMOS var ncomments = parseInt($('#ncomments').text()); $('#ncomments').text(ncomments + 1); //$('#btnsComment').attr({'disabled':''}); // POR SI HABIA ERROR //$('.miComentario .error').html(''); break; } $('#loading').fadeOut(350); // $('.resp #gif_cargando').hide(); mydialog.close(); } }); }, 2) Abren el c.posts.php de inc/class y buscan: c.* FROM u_miembros AS u LEFT JOIN p_comentarios AS c ON u.user_id = c.c_user WHERE c.c_post_id = \''.(int)$post_id.'\' Y al lado añaden: AND c.c_resp = \'0\' Quedaría algo asi: c.* FROM u_miembros AS u LEFT JOIN p_comentarios AS c ON u.user_id = c.c_user WHERE c.c_post_id = \''.(int)$post_id.'\' AND c.c_resp = \'0\' Luego buscan: $return['data'][$i]['votado'] = $votado; Abajo añaden: $return['data'][$i]['respuestas'] = $this->getRespuestas((int)$comment['cid']); En ese archivo busca: function getLastComentarios(){ global $tsUser, $tsCore; // $query = mysql_query('SELECT cm.cid, cm.c_status, u.user_name, u.user_activo, u.user_baneado, p.post_id, p.post_title, p.post_status, c.c_seo FROM p_comentarios AS cm LEFT JOIN u_miembros AS u ON cm.c_user = u.user_id LEFT JOIN p_posts AS p ON p.post_id = cm.c_post_id LEFT JOIN p_categorias AS c ON c.cid = p.post_category '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? '' : 'WHERE p.post_status = \'0\' AND cm.c_status = \'0\' AND u.user_activo = \'1\' && u.user_baneado = \'0\'').' ORDER BY cid DESC LIMIT 10'); if(!$query) die(mysql_error()); $data = result_array($query); // return $data; } Abajo añade: function getRespuestas($comment_id){ global $tsCore, $tsUser; // $start = $tsCore->setPageLimit($tsCore->settings['c_max_com']); $query = mysql_query('SELECT u.user_name, u.user_activo, u.user_baneado, c.* FROM u_miembros AS u LEFT JOIN p_comentarios AS c ON u.user_id = c.c_user WHERE c.c_resp = \''.(int)$comment_id.'\' '.($tsUser->is_admod ? '' : 'AND c.c_status = \'0\' AND u.user_activo = \'1\' && u.user_baneado = \'0\'').' ORDER BY c.cid LIMIT '.$start); // COMENTARIOS TOTALES $return['num'] = mysql_num_rows(mysql_query('SELECT cid FROM p_comentarios WHERE c_resp = \''.(int)$comment_id.'\' '.($tsUser->is_admod ? '' : 'AND c_status = \'0\'').'')); // $comments = result_array($query); // PARSEAR EL BBCODE $i = 0; foreach($comments as $comment){ // CON ESTE IF NOS AHORRAMOS CONSULTAS if($comment['c_votos'] != 0){ $query = mysql_query('SELECT voto_id FROM p_votos WHERE tid = \''.(int)$comment['cid'].'\' AND tuser = \''.$tsUser->uid.'\' AND type = \'2\' LIMIT 1'); $votado = mysql_num_rows($query); } else $votado = 0; // BLOQUEADO $return['block'] = mysql_num_rows(mysql_query('SELECT bid, b_user, b_auser FROM `u_bloqueos` WHERE b_user = \''.(int)$comment['c_user'].'\' AND b_auser = \''.$tsUser->uid.'\' LIMIT 1')); // $return['data'][$i] = $comment; $return['data'][$i]['votado'] = $votado; $return['data'][$i]['c_html'] = $tsCore->parseBadWords($tsCore->parseBBCode($return['data'][$i]['c_body']), true); $i++; } // return $return; } Para acabar en ese archivo busca: if(mysql_query('INSERT INTO `p_comentarios` (`c_post_id`, `c_user`, `c_date`, `c_body`, `c_ip`) VALUES (\''.(int)$post_id.'\', \''.$tsUser->uid.'\', \''.$fecha.'\', \''.$comentario.'\', \''.$_SERVER['REMOTE_ADDR'].'\')')) { Y lo reemplazas por: if(mysql_query('INSERT INTO `p_comentarios` (`c_post_id`, `c_user`, `c_date`, `c_body`, `c_ip`, `c_resp`) VALUES (\''.(int)$post_id.'\', \''.$tsUser->uid.'\', \''.$fecha.'\', \''.$comentario.'\', \''.$_SERVER['REMOTE_ADDR'].'\', \''.(int)$_POST['respuesta'].'\')')) { 3) Hacen esta SQL en su BD: ALTER TABLE `p_comentarios` ADD `c_resp` INT( 11 ) NOT NULL DEFAULT '0'; 4) Por último reemplacen el p.comentario.ajax.tpl de themes/TUTEMA/t.php_files por este: https://www.mediafire.com/?aj6foqw23lyqg8f Hagan backup de su archivo original primero! Caps: Demo: http://programu.net/posts/phpost/128/-MOD-Respuestas-en-comentarios-como-en-T-v4.html#comments User: demo Pass: demo1234 Saludos
  9. Buenas tardes, otra vez lo voy a molestar(? , naa, bueno, eso pienso.. actualize tambien este mod hecho por el mismo creador , credito a : alexander1712 : . comenzemos con la actualizacion: AVISO: Yo estoy usando la V5 de To-Up, pero si quieren ponerlos en Default, tambien pueden, menos en el archivo a.a-sidebar, casi al final de este tema, les paso el codigo para Default! Comenzemos : Busquemos el archivo c.admin.php , esta ubicado en inc/class // PAGINAS $query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT COUNT(*) FROM u_miembros WHERE ' . $where); list($total) = db_exec('fetch_row', $query); $data['pages'] = $tsCore->pageIndex($tsCore->settings['url'] . '/admin/rangos?act=list&rid=' . $rid . '&t=' . $type . '', $_GET['s'], $total, $max); // return $data; } Y abajo de eso, pongan este codigo: /****************** ADMINISTRACIÓN DE MUROS ACTUALIZADO ******************/ function GetAdminMuros() { global $tsCore; // $max = 18; // MAXIMO A MOSTRAR $limit = $tsCore->setPageLimit($max, true); if($_GET['ty']=='1') //si lo quiere ordenado por autor { $order='m.p_user_pub'; } else { //si lo quiere ordenado por destinatario de la publicacion $order='m.p_user'; } // $query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT m.pub_id, u.user_id, u.user_name, m.p_date, m.p_body, m.p_ip, m.p_comments, m.p_likes FROM u_muro AS m LEFT JOIN u_miembros AS u ON '.$order.' = u.user_id WHERE m.pub_id > \'0\' ORDER BY pub_id DESC LIMIT ' . $limit); // $data['data'] = result_array($query); // coments list($total) = db_exec('fetch_row', $query); $data['pages'] = $tsCore->pageIndex($tsCore->settings['url'] . "/admin/muro?", $_GET['s'], $total, $max); // return $data; } function DelAdminMuros($id) { $id = (int) $id; //filtro anti sqli id. db_exec(array(__FILE__, __LINE__), 'query', "delete from u_muro_comentarios where pub_id = $id"); db_exec(array(__FILE__, __LINE__), 'query', "delete from u_muro_likes where obj_type = 1 and pub_id = $id"); db_exec(array(__FILE__, __LINE__), 'query', "delete from u_muro where pub_id = $id"); } function DelAdminMuros_c($id) { $id = (int) $id; //filtro anti sqli id. db_exec(array(__FILE__, __LINE__), 'query', "delete from u_muro_comentarios where cid = $id"); echo show_error('Error al ejecutar la consulta de la l&iacute;nea '.__LINE__.' de '.__FILE__.'.', 'db'); } function GetAdminMuro_unique($id) { global $tsCore; $max = 18; // MAXIMO A MOSTRAR $limit = $tsCore->setPageLimit($max, true); $id = (int) $id; $query = db_exec(array(__FILE__, __LINE__), 'query', "SELECT pub_id, p_body FROM u_muro WHERE pub_id = $id"); $pararetorno['main'] = db_exec('fetch_array', $query); $query = db_exec(array(__FILE__, __LINE__), 'query', "SELECT * FROM u_muro_comentarios WHERE pub_id = $id"); $pararetorno['data'] = result_array($query); $pararetorno['pages'] = $tsCore->pageIndex($tsCore->settings['url'] . "/admin/muro?act=muro_editar&amp;id=$id&amp;", $_GET['s'], $total, $max); return $pararetorno; } function GetAdminMuro_cunique($id) { $id = (int) $id; $query = db_exec(array(__FILE__, __LINE__), 'query', "SELECT cid, c_body FROM u_muro_comentarios WHERE cid = $id"); return db_exec('fetch_array', $query); } function UPDAdminMuros($id,$corpus) { global $tsCore; $id = (int) $id; //filtramos $corpus = $tsCore->setSecure(($corpus)); //lo recontra re filtramos <img src='http://www.phpost.net/foro/public/style_emoticons/<#EMO_DIR#>/tongue.png' class='bbc_emoticon' alt=':P' /> db_exec(array(__FILE__, __LINE__), 'query', "update u_muro set p_body='$corpus' where pub_id=$id"); } function UPDAdminMuros_c($id,$corpus) { global $tsCore; $id = (int) $id; //filtramos $corpus = $tsCore->setSecure(($corpus)); //lo recontra re filtramos <img src='http://www.phpost.net/foro/public/style_emoticons/<#EMO_DIR#>/tongue.png' class='bbc_emoticon' alt=':P' /> db_exec(array(__FILE__, __LINE__), 'query', "update u_muro_comentarios set c_body='$corpus' where cid=$id"); } Ahora busquen este archivo admin.php , esta ubicado en inc/php // POSTS } elseif($action == 'posts'){ if(!$act) { $smarty->assign("tsAdminPosts",$tsAdmin->GetAdminPosts()); } Y abajo de eso, agregan este codigo: //////////////////////////////////////////////////////////////////// // muros by alexander1712 } elseif($action == 'muro'){ //si estamos en el muro if(!$act) { $smarty->assign("tsAdminMuros",$tsAdmin->GetAdminMuros()); } elseif ($act == 'muro_delete') { //si borramos algo de un muro $tsAdmin->DelAdminMuros($_GET['id']); $smarty->assign("tsAdminMuros",$tsAdmin->GetAdminMuros()); } elseif ($act == 'muro_editar') { //levantar datos y hacer formulario $smarty->assign("tsAdminMurosContent",$tsAdmin->GetAdminMuro_unique($_GET['id'])); } elseif ($act == 'muro_edit2') { //guardar datos $tsAdmin->UPDAdminMuros($_POST['id'],$_POST['cuerpo']); $smarty->assign("tsAdminMuros",$tsAdmin->GetAdminMuros()); } elseif ($act == 'coment_delete') { //borrando comentarios $tsAdmin->DelAdminMuros_c($_GET['id']); $smarty->assign("tsAdminMuros",$tsAdmin->GetAdminMuros()); $act=''; } elseif ($act == 'coment_editar') { //levantar datos y hacer formulario $smarty->assign("tsAdminMurosContent",$tsAdmin->GetAdminMuro_cunique($_GET['id'])); } elseif ($act == 'coment_edit2') { $tsAdmin->UPDAdminMuros_c($_POST['id'],$_POST['cuerpo']); $smarty->assign("tsAdminMuros",$tsAdmin->GetAdminMuros()); $act=''; } //////////////////////////////////////////////////////////////////// ahora busquen este archivo t.admin.tpl , esta ubicado en tutheme/templates, busquen: {include file='admin_mods/m.admin_posts.tpl'} y abajo de eso, agregan este codigo: {elseif $tsAction == 'muro'} {if $tsAct!='muro_editar' && $tsAct!='coment_editar'} {include file='admin_mods/m.admin_muro.tpl'} {elseif $tsAct=='muro_editar'} {include file='admin_mods/m.admin_muro_edit.tpl'} {elseif $tsAct=='coment_editar'} {include file='admin_mods/m.admin_muro_cedit.tpl'} {/if} ahora creen este archivo que sea por tpl. el archivo se tiene que llamar: m.admin_muro.tpl y ahora copian todo el codigo: <div class="boxy-title"> <h3>Administrar Publicaciones en el muro</h3> </div> <div id="res" class="boxy-content" style="position:relative"> {if $tsAct == '' || $tsAct == 'muro_delete' || $tsAct == 'muro_edit2'} {if !$tsAdminMuros.data} <div class="phpostAlfa">No hay publicaciones en los muros.</div> {else} <table cellpadding="0" cellspacing="0" border="0" class="admin_table" width="100%" align="center"> <thead> <th>ID</th> <th><a href="{$tsConfig.url}/admin/muro?ty=1" title="persona que envi&oacute; la publicaci&oacute;n">Autor</a>/<a href="{$tsConfig.url}/admin/muro" title="persona en la que se publico en su muro">Receptor</a></th> <th>Contenido</th> <th>Comentarios</th> <th>Me Gusta</th> <th>Fecha</th> <th>ip</th> <th>Acciones <a id="actionsee" onclick="$('#actionsee').slideUp( 120, 'easeInOutElastic'); $('.right').fadeOut('slow').css('width', '920px').slideDown( 1700, 'easeInOutElastic'); $('.left').slideUp( 1500, 'easeInOutElastic'); $('#moreinfo').slideDown('fast'); "><img src="{$tsConfig.default}/images/icons/details.png" width="14px" height="14px" title="M&aacute;s informaci&oacute;n" /></a></th> </thead> <tbody> {foreach from=$tsAdminMuros.data item=c} <tr id="post_{$c.cid}"> <td>{$c.pub_id}</td> <td><a href="{$tsConfig.url}/perfil/{$c.user_name}" class="hovercard" uid="{$c.user_id}">{$c.user_name}</a></td> <td>{$c.p_body|truncate:50}</td> <td>{$c.p_comments}</td> <td>{$c.p_likes}</td> <td>{$c.p_date|hace:true}</td> <td id="moreinfo1_2"><a href="{$tsConfig.url}/moderacion/buscador/1/1/{$c.p_ip}" class="geoip" target="_blank">{$c.p_ip}</a></td> <td class="admin_actions"> <a href="{$tsConfig.url}/admin/muro?act=muro_editar&id={$c.pub_id}"><img src="{$tsConfig.default}/images/icons/editar.png" title="Editar Publicacion" /></a> <a href="{$tsConfig.url}/admin/muro?act=muro_delete&id={$c.pub_id}"><img src="{$tsConfig.default}/images/icons/close.png" title="Borrar Publicacion" /></a> </td> </tr> {/foreach} </tbody> <tfoot> <td colspan="8">P&aacute;ginas: {$tsAdminMuros.pages}</td> </tfoot> </table> {/if} {/if} </div> ahora creen este archivo que termine en tpl. el archivo se tiene que llamar : m.admin_muro_cedit.tpl y copien todo el codigo: <center> <div class="form-add-post" > <form action="{$tsConfig.url}/admin/muro?act=coment_edit2" method="post" name="newartist" autocomplete="off"> <ul class="clearbeta"> <li> <label>Comentario</label> <span style="display: none;" class="errormsg"></span> <br /><input type="hidden" value="{$tsAdminMurosContent.cid}" name="id"/><textarea name="cuerpo" tabindex="2" style="min-height:200px; width:600px;" >{$tsAdminMurosContent.c_body}</textarea> </li> </ul> <div class="end-form clearbeta" style="width:600px;"> <center><input tabindex="8" value="Guardar!" name="preview" class="mBtn btnGreen" style="width: auto; margin-left: 5px;" type="submit"></center> </div> </form> </div> </center> ahora creen otro archivo que tenga el formato tpl. y se tiene que llamar: m.admin_muro_edit.tpl y copien todo este codigo: <center> <div class="form-add-post" > <form action="{$tsConfig.url}/admin/muro?act=muro_edit2" method="post" name="newartist" autocomplete="off"> <ul class="clearbeta"> <li> <label>Comentario</label> <span style="display: none;" class="errormsg"></span> <br /><input type="hidden" value="{$tsAdminMurosContent.main.pub_id}" name="id"/><textarea name="cuerpo" tabindex="2" style="min-height:200px; width:600px;" >{$tsAdminMurosContent.main.p_body}</textarea> </li> </ul> <div class="end-form clearbeta" style="width:600px;"> <center><input tabindex="8" value="Guardar!" name="preview" class="mBtn btnGreen" style="width: auto; margin-left: 5px;" type="submit"></center> </div> </form> </div> </center> <table cellpadding="0" cellspacing="0" border="0" class="admin_table" width="100%" align="center"> <thead> <th>ID</th> <th><a href="{$tsConfig.url}/admin/muro?ty=1" title="persona que envi&oacute; la publicaci&oacute;n">Autor</a></th> <th>Comentario</th> <th>Fecha</th> <th>ip</th> <th>Acciones <a id="actionsee" onclick="$('#actionsee').slideUp( 120, 'easeInOutElastic'); $('.right').fadeOut('slow').css('width', '920px').slideDown( 1700, 'easeInOutElastic'); $('.left').slideUp( 1500, 'easeInOutElastic'); $('#moreinfo').slideDown('fast'); "><img src="{$tsConfig.default}/images/icons/details.png" width="14px" height="14px" title="M&aacute;s informaci&oacute;n" /></a></th> </thead> <tbody> {foreach from=$tsAdminMurosContent.data item=c} <tr id="post_{$c.cid}"> <td>{$c.cid}</td> <td><a href="{$tsConfig.url}/perfil/{$c.c_user}" class="hovercard" uid="{$c.c_user}">{$c.c_user}</a></td> <td>{$c.c_body|truncate:50}</td> <td>{$c.c_date|hace:true}</td> <td id="moreinfo1_2"><a href="{$tsConfig.url}/moderacion/buscador/1/1/{$c.p_ip}" class="geoip" target="_blank">{$c.c_ip}</a></td> <td class="admin_actions"> <a href="{$tsConfig.url}/admin/muro?act=coment_editar&id={$c.cid}"><img src="{$tsConfig.default}/images/icons/editar.png" title="Editar Comentario" /></a> <a href="{$tsConfig.url}/admin/muro?act=coment_delete&id={$c.cid}"><img src="{$tsConfig.default}/images/icons/close.png" title="Borrar Comentario" /></a> </td> </tr> {/foreach} </tbody> <tfoot> <td colspan="8">P&aacute;ginas: {$tsAdminMurosContent.pages}</td> </tfoot> </table> ATENCION: LOS 3 ARCHIVOS QUE CREASTES CON TPL. VAN EN TUTHEME/TEMPLATES/ADMIN_MODS. Ahora busquen el archivo a.a-sidebar , se encuentra en V5/templates/b_toup/administracion, busquemos : <li><a {if $tsAction == 'rangos'}id="activo-mod"{/if} href="{$tsConfig.url}/admin/rangos" style="width: 228px;"><img src="{$tsConfig.tema.t_url}/images/icons/crown.png" />Rangos de Usuarios</a></li> Y abajo de eso, ponemos este codigo: <li><a {if $tsAction == 'posts'}id="activo-mod"{/if} href="{$tsConfig.url}/admin/muro" style="width: 228px;"><img src="{$tsConfig.tema.t_url}/images/icons/posts.png" />Revisar Muros</a></li> y listo, asi se va a ver en V5 : Aviso: Esta hecho a proposito el color Negro, es para la seguridad de mis usuarios de mi pagina. ahora si, para los que tiene el theme Default usandolo, vamos a buscar este archivo m.admin.sidemenu , se encuentra en default/templates/admin_mods y busquemos <li id="a_posts"><span class="cat-title"><a href="{$tsConfig.url}/admin/posts">Todos los Posts</a></span></li> Abajo de eso, agregamos esto: <li id="a_posts"><span class="cat-title"><a href="{$tsConfig.url}/admin/muro">Revisar Muros</a></span></li> Y listo , ya te anda en Default, hasta la proxima con otra actualizacion!
  10. Este MOD no lo encontré por ningun lado, y muchos preguntaban como mejorar el mensaje, Isidro comento que borrando el DIE te redirigía a la home pero si vas buscando mas post y te aparece la home pues te sacas de onda. El mensaje original es este, y ya que no dice mucho tal vez algun usuario piense que su web se daño y salga Para arreglarlo,vamos a c.posts.php y buscamos die('No hay mas posts'); y lo reemplazamos por die('No hay mas posts, seras redireccionado a la pagina principal en<meta http-equiv="Refresh" content="5;url=http://www.cuatropatitascelaya.com/posts/"> <body onload="countDown();"> <form name="form" style="float:right;"> <input size="2" class="form_input" name="hour" disabled="" type="text" style="display:none"> <input size="2" class="form_input" name="minute" disabled="" type="text" style="display:none"> <input size="2" class="form_input" name="second" disabled="" type="text" style="float: left; position: absolute; top: 8px; left: 420px; border: medium none; background-color: white; font-weight: bold; font-size: 15px; color: black;"> </form> <script language="javascript"> <!-- //Código que muestra una cuenta atrás hasta finalizar el tiempo indicado //variables que determinan el total de horas, minutos y segundos para la cuenta atrás toHour=0; toMinute=0; toSecond=6; //cuenta atrás function countDown() { toSecond=toSecond-1; if(toSecond<0) { toSecond=59; toMinute=toMinute-1; } form.second.value=toSecond; if(toMinute<0) { toMinute=59; toHour=toHour-1; } form.minute.value=toMinute; form.hour.value=toHour; if(toHour<0) { //final form.second.value=0; form.minute.value=0; form.hour.value=0; }else{ setTimeout("countDown()",1000); } } --> </script>'); y ahora nos redireccionara después de 5 segundos a la pagina principal alertando que no hay mas post y que sera redireccionado junto a un contador con los segundos restantes Modifiquen a su gusto <meta http-equiv="Refresh" content="5;url=http://www.cuatropatitascelaya.com/posts/"> y toSecond=6; en toSecond puse un segundo mas ya que el contador este comienza antes que el del meta refresh, prueben y hasta luego
  11. Buen traigo una adaptacion para la v5 de mi ultimo mod como me lo pidieron no expecificaron cual asi que lo dejo para TaringaV5 y la ultima que libero toup´ Taringa V5 capturas agregas al final de extras.css : .DataBottom { background-image: url(http://i.imgur.com/3WQMk94.png); background-repeat: no-repeat no-repeat; cursor: pointer; float: right; width: 16px; height: 16px; ; } .DataBottom:hover { background-image: url(http://www.identi.li/images/Online.png); background-repeat: no-repeat no-repeat; cursor: pointer; float: right; width: 16px; height: 16px; ; } .DataFlecha { background-image:url(http://i.imgur.com/fmcIwC2.png); background-color: transparent; background-repeat: no-repeat; float: left; margin-right: 5px; width: 16px; height: 16px; } Descarga b.post_recientes.tpl y subelo a /V5/templates/b_toup/home/ https://mega.co.nz/#!oVJXURSA!mfJWduI5jkQ7xUvRWHX2SYeyYzU730P854zrNSAMals El theme liberado de toup Capturas agregas al final de taringa.css : .DataBotton { background-image: url(http://i.imgur.com/3WQMk94.png); background-repeat: no-repeat no-repeat; cursor: pointer; position: relative; left: 177px; float: right; width: 16px; height: 16px; } .DataFlecha { background-image: url(http://i.imgur.com/fmcIwC2.png); background-color: transparent; background-repeat: no-repeat; float: left; margin-right: 5px; width: 16px; height: 16px; } .DataBotton:hover { background-image: url(http://www.identi.li/images/Online.png); background-repeat: no-repeat no-repeat; cursor: pointer; position: relative; left: 177px; float: right; width: 16px; height: 16px; } Descarga posts-recientes.tpl y subelo a /tutheme/templates/modules/home/ https://mega.co.nz/#!QYoDDJrK!R1P9bO3-RyXq9HF1IEL--MS15T5zk5039oppnI893gI Para que lo adapte a otro tema me avisan en un comentario
  12. Hola a todos, a pedido de SKIDROW en este topic → enseño a como separar los posts de una categoría específica de los últimos posts habituales. es para hacer algo como esto: Para eso abrimos c.posts.php que está en inc/class y debajo de: $lastPosts['data'] = result_array($query); agregamos: /****FILTRO POR CATEGORIA ESPECIAL*****/ $categoria = 1; $sql = mysql_query('SELECT p.post_id, p.post_user, p.post_category, p.post_title, p.post_date, p.post_comments, p.post_puntos, p.post_private, p.post_sponsored, p.post_status, p.post_sticky, u.user_id, u.user_name, u.user_activo, u.user_baneado, c.c_nombre, c.c_seo, c.c_img FROM p_posts AS p LEFT JOIN u_miembros AS u ON p.post_user = u.user_id '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? '' : ' && u.user_activo = \'1\' && u.user_baneado = \'0\'').' LEFT JOIN p_categorias AS c ON c.cid = p.post_category WHERE '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? 'p.post_id > 0' : 'p.post_status = \'0\' && u.user_activo = \'1\' && u.user_baneado = \'0\'').' AND p.post_category ='.$categoria.' ORDER BY p.post_id DESC LIMIT 5'); $lastPosts['cat'] = result_array($sql); Antes de pasar al siguiente paso explico como funciona esto. La variable $categoria tendrá un valor entero que es equivalente a la id de la categoría que queremos, en este caso yo puse 1 como ejemplo, en mis categorías de juegos es "acción" Se mostraran solo 5 resultados como máximo, se puede cambiar donde dice LIMIT 5 por la cantidad que quieran. Le he puesto solo eso porque la idea es que si hay mas resultados, aparezca el boton "ver más" que nos mostrará los "últimos posts" con todos los posts de dicha categoría. Si quieren agregar más filtros, dupliquen todo el código anterior y le cambiaran el nombre de la variable $sql por (puede ser cualqiera) $sql2 y en $lastPosts['cat'] = result_array($sql); lo cambian por $lastPosts['cat2'] = result_array($sql2);. Y así copian el código tantas veces quieran y solo le cambiaran los números de las variables (ejemplo $sql3, $sql4, $sql5... etc) Ahora abrimos posts.php y debajo de: $smarty->assign("tsPosts",$tsLastPosts['data']); Agregan (tantas veces quieran mostrar categorías diferentes) $smarty->assign("tsPCat",$tsLastPosts['cat']); Solo recuerden cambiarle el nombre a las lineas siguientes de la siguiente forma: $smarty->assign("tsPCat2",$tsLastPosts['cat2']); y así, le ponen 3, 4, 5 si lo desean... Por último se van a m.home_last_posts.tpl y al final de todo el código (según el theme default) agregan: <div class="clearbeta lastPosts"> {if $tsPCat} <div class="header"> <div class="box_txt ultimos_posts">Categor&iacute;a Acci&oacute;n</div> <div class="box_rss"> <a href="/rss/ultimos-post"> <span class="systemicons sRss" style="position:relative;z-index:87"></span> </a> </div> <div class="clearBoth"></div> </div> <div class="body"> <ul> {foreach from=$tsPCat item=p key=i} <li class="categoriaPost" style="background-image:url({$tsConfig.tema.t_url}/images/icons/cat/{$p.c_img}); {if $p.post_status == 3} background-color:#f1f1f1; {elseif $p.post_status == 1}background-color:coral;{elseif $p.post_status == 2} background-color:rosyBrown;{elseif $p.user_activo == 0} background-color:burlyWood;{elseif $p.user_baneado == 1} background-color:orange;{/if}" > <a {if $p.post_status == 3}class="qtip" title="El post est&aacute; en revisi&oacute;n"{elseif $p.post_status == 1}class="qtip" title="El post se encuentra en revisi&oacute;n por acumulaci&oacute;n de denuncias"{elseif $p.post_status == 2}class="qtip" title="El post est&aacute; eliminado"{elseif $p.user_activo == 0}class="qtip" title="La cuenta del usuario est&aacute; desactivada"{elseif $p.user_baneado == 1}class="qtip" title="La cuenta del usuario est&aacute; suspendida"{/if} class="title {if $p.post_private}categoria privado{/if}" alt="{$p.post_title}" title="{$p.post_title}" target="_self" href="{$tsConfig.url}/posts/{$p.c_seo}/{$p.post_id}/{$p.post_title|seo}.html">{$p.post_title|truncate:50}</a> <span>{$p.post_date|hace} &raquo; <a href="{$tsConfig.url}/perfil/{$p.user_name}" class="hovercard" uid="{$p.post_user}"><strong>@{$p.user_name}</strong></a> &middot; Puntos <strong>{$p.post_puntos}</strong> &middot; Comentarios <strong>{$p.post_comments}</strong></span> <span class="floatR"><a href="{$tsConfig.url}/posts/{$p.c_seo}/">{$p.c_nombre}</a></span> </li> {if $i > 4}<a href="{$tsConfig.url}/posts/{$p.c_seo}/" class="floatL">Ver m&aacute;s</a>{/if} {/foreach} </ul> <br clear="left"/> </div> {/if} </div> Si lo pueden notar es el mismo codigo que el de "ultimos posts" solo que cambié algunas cosas. {if $tsPCat} → Condicional por si existe o no posts de la categoria (si agregan más no olviden poner el 2, 3, 4, etc en los otros códigos) <div class="box_txt ultimos_posts">Categor&iacute;a Acci&oacute;n</div> → nombre de la categoría seleccionada {if $i > 4} → Condicional que determina el LIMITE menconado anteriormente - 1 (menos 1) para que muestre el botón de ver más de la categoría escogida Repiten este mismo código cuantas veces quieran de las categorías seleccionadas. Ahora les mostrare un ejemplo mostrando 3 categorias diferentes. Acción, Aventura, Deportes: en c.posts.php: /****FILTRO POR CATEGORIA ESPECIAL*****/ $categoria = 1; $sql = mysql_query('SELECT p.post_id, p.post_user, p.post_category, p.post_title, p.post_date, p.post_comments, p.post_puntos, p.post_private, p.post_sponsored, p.post_status, p.post_sticky, u.user_id, u.user_name, u.user_activo, u.user_baneado, c.c_nombre, c.c_seo, c.c_img FROM p_posts AS p LEFT JOIN u_miembros AS u ON p.post_user = u.user_id '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? '' : ' && u.user_activo = \'1\' && u.user_baneado = \'0\'').' LEFT JOIN p_categorias AS c ON c.cid = p.post_category WHERE '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? 'p.post_id > 0' : 'p.post_status = \'0\' && u.user_activo = \'1\' && u.user_baneado = \'0\'').' AND p.post_category ='.$categoria.' ORDER BY p.post_id DESC LIMIT 5'); $lastPosts['cat'] = result_array($sql); /****FILTRO POR CATEGORIA ESPECIAL*****/ $categoria = 2; $sql2 = mysql_query('SELECT p.post_id, p.post_user, p.post_category, p.post_title, p.post_date, p.post_comments, p.post_puntos, p.post_private, p.post_sponsored, p.post_status, p.post_sticky, u.user_id, u.user_name, u.user_activo, u.user_baneado, c.c_nombre, c.c_seo, c.c_img FROM p_posts AS p LEFT JOIN u_miembros AS u ON p.post_user = u.user_id '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? '' : ' && u.user_activo = \'1\' && u.user_baneado = \'0\'').' LEFT JOIN p_categorias AS c ON c.cid = p.post_category WHERE '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? 'p.post_id > 0' : 'p.post_status = \'0\' && u.user_activo = \'1\' && u.user_baneado = \'0\'').' AND p.post_category ='.$categoria.' ORDER BY p.post_id DESC LIMIT 5'); $lastPosts['cat2'] = result_array($sql2); /****FILTRO POR CATEGORIA ESPECIAL*****/ $categoria = 4; $sql3 = mysql_query('SELECT p.post_id, p.post_user, p.post_category, p.post_title, p.post_date, p.post_comments, p.post_puntos, p.post_private, p.post_sponsored, p.post_status, p.post_sticky, u.user_id, u.user_name, u.user_activo, u.user_baneado, c.c_nombre, c.c_seo, c.c_img FROM p_posts AS p LEFT JOIN u_miembros AS u ON p.post_user = u.user_id '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? '' : ' && u.user_activo = \'1\' && u.user_baneado = \'0\'').' LEFT JOIN p_categorias AS c ON c.cid = p.post_category WHERE '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? 'p.post_id > 0' : 'p.post_status = \'0\' && u.user_activo = \'1\' && u.user_baneado = \'0\'').' AND p.post_category ='.$categoria.' ORDER BY p.post_id DESC LIMIT 5'); $lastPosts['cat3'] = result_array($sql3); En posts.php $smarty->assign("tsPCat",$tsLastPosts['cat']); $smarty->assign("tsPCat2",$tsLastPosts['cat2']); $smarty->assign("tsPCat3",$tsLastPosts['cat3']); Y en m.home_last_posts.tpl <div class="clearbeta lastPosts"> {if $tsPCat} <div class="header"> <div class="box_txt ultimos_posts">Categor&iacute;a Acci&oacute;n</div> <div class="box_rss"> <a href="/rss/ultimos-post"> <span class="systemicons sRss" style="position:relative;z-index:87"></span> </a> </div> <div class="clearBoth"></div> </div> <div class="body"> <ul> {foreach from=$tsPCat item=p key=i} <li class="categoriaPost" style="background-image:url({$tsConfig.tema.t_url}/images/icons/cat/{$p.c_img}); {if $p.post_status == 3} background-color:#f1f1f1; {elseif $p.post_status == 1}background-color:coral;{elseif $p.post_status == 2} background-color:rosyBrown;{elseif $p.user_activo == 0} background-color:burlyWood;{elseif $p.user_baneado == 1} background-color:orange;{/if}" > <a {if $p.post_status == 3}class="qtip" title="El post est&aacute; en revisi&oacute;n"{elseif $p.post_status == 1}class="qtip" title="El post se encuentra en revisi&oacute;n por acumulaci&oacute;n de denuncias"{elseif $p.post_status == 2}class="qtip" title="El post est&aacute; eliminado"{elseif $p.user_activo == 0}class="qtip" title="La cuenta del usuario est&aacute; desactivada"{elseif $p.user_baneado == 1}class="qtip" title="La cuenta del usuario est&aacute; suspendida"{/if} class="title {if $p.post_private}categoria privado{/if}" alt="{$p.post_title}" title="{$p.post_title}" target="_self" href="{$tsConfig.url}/posts/{$p.c_seo}/{$p.post_id}/{$p.post_title|seo}.html">{$p.post_title|truncate:50}</a> <span>{$p.post_date|hace} &raquo; <a href="{$tsConfig.url}/perfil/{$p.user_name}" class="hovercard" uid="{$p.post_user}"><strong>@{$p.user_name}</strong></a> &middot; Puntos <strong>{$p.post_puntos}</strong> &middot; Comentarios <strong>{$p.post_comments}</strong></span> <span class="floatR"><a href="{$tsConfig.url}/posts/{$p.c_seo}/">{$p.c_nombre}</a></span> </li> {if $i > 4}<a href="{$tsConfig.url}/posts/{$p.c_seo}/" class="floatL">Ver m&aacute;s</a>{/if} {/foreach} </ul> <br clear="left"/> </div> {/if} </div> <div class="clearbeta lastPosts"> {if $tsPCat2} <div class="header"> <div class="box_txt ultimos_posts">Categor&iacute;a Aventuras</div> <div class="box_rss"> <a href="/rss/ultimos-post"> <span class="systemicons sRss" style="position:relative;z-index:87"></span> </a> </div> <div class="clearBoth"></div> </div> <div class="body"> <ul> {foreach from=$tsPCat2 item=p key=i} <li class="categoriaPost" style="background-image:url({$tsConfig.tema.t_url}/images/icons/cat/{$p.c_img}); {if $p.post_status == 3} background-color:#f1f1f1; {elseif $p.post_status == 1}background-color:coral;{elseif $p.post_status == 2} background-color:rosyBrown;{elseif $p.user_activo == 0} background-color:burlyWood;{elseif $p.user_baneado == 1} background-color:orange;{/if}" > <a {if $p.post_status == 3}class="qtip" title="El post est&aacute; en revisi&oacute;n"{elseif $p.post_status == 1}class="qtip" title="El post se encuentra en revisi&oacute;n por acumulaci&oacute;n de denuncias"{elseif $p.post_status == 2}class="qtip" title="El post est&aacute; eliminado"{elseif $p.user_activo == 0}class="qtip" title="La cuenta del usuario est&aacute; desactivada"{elseif $p.user_baneado == 1}class="qtip" title="La cuenta del usuario est&aacute; suspendida"{/if} class="title {if $p.post_private}categoria privado{/if}" alt="{$p.post_title}" title="{$p.post_title}" target="_self" href="{$tsConfig.url}/posts/{$p.c_seo}/{$p.post_id}/{$p.post_title|seo}.html">{$p.post_title|truncate:50}</a> <span>{$p.post_date|hace} &raquo; <a href="{$tsConfig.url}/perfil/{$p.user_name}" class="hovercard" uid="{$p.post_user}"><strong>@{$p.user_name}</strong></a> &middot; Puntos <strong>{$p.post_puntos}</strong> &middot; Comentarios <strong>{$p.post_comments}</strong></span> <span class="floatR"><a href="{$tsConfig.url}/posts/{$p.c_seo}/">{$p.c_nombre}</a></span> </li> {if $i > 4}<a href="{$tsConfig.url}/posts/{$p.c_seo}/" class="floatL">Ver m&aacute;s</a>{/if} {/foreach} </ul> <br clear="left"/> </div> {/if} </div> <div class="clearbeta lastPosts"> {if $tsPCat3} <div class="header"> <div class="box_txt ultimos_posts">Categor&iacute;a Deportes</div> <div class="box_rss"> <a href="/rss/ultimos-post"> <span class="systemicons sRss" style="position:relative;z-index:87"></span> </a> </div> <div class="clearBoth"></div> </div> <div class="body"> <ul> {foreach from=$tsPCat3 item=p key=i} <li class="categoriaPost" style="background-image:url({$tsConfig.tema.t_url}/images/icons/cat/{$p.c_img}); {if $p.post_status == 3} background-color:#f1f1f1; {elseif $p.post_status == 1}background-color:coral;{elseif $p.post_status == 2} background-color:rosyBrown;{elseif $p.user_activo == 0} background-color:burlyWood;{elseif $p.user_baneado == 1} background-color:orange;{/if}" > <a {if $p.post_status == 3}class="qtip" title="El post est&aacute; en revisi&oacute;n"{elseif $p.post_status == 1}class="qtip" title="El post se encuentra en revisi&oacute;n por acumulaci&oacute;n de denuncias"{elseif $p.post_status == 2}class="qtip" title="El post est&aacute; eliminado"{elseif $p.user_activo == 0}class="qtip" title="La cuenta del usuario est&aacute; desactivada"{elseif $p.user_baneado == 1}class="qtip" title="La cuenta del usuario est&aacute; suspendida"{/if} class="title {if $p.post_private}categoria privado{/if}" alt="{$p.post_title}" title="{$p.post_title}" target="_self" href="{$tsConfig.url}/posts/{$p.c_seo}/{$p.post_id}/{$p.post_title|seo}.html">{$p.post_title|truncate:50}</a> <span>{$p.post_date|hace} &raquo; <a href="{$tsConfig.url}/perfil/{$p.user_name}" class="hovercard" uid="{$p.post_user}"><strong>@{$p.user_name}</strong></a> &middot; Puntos <strong>{$p.post_puntos}</strong> &middot; Comentarios <strong>{$p.post_comments}</strong></span> <span class="floatR"><a href="{$tsConfig.url}/posts/{$p.c_seo}/">{$p.c_nombre}</a></span> </li> {if $i > 4}<a href="{$tsConfig.url}/posts/{$p.c_seo}/" class="floatL">Ver m&aacute;s</a>{/if} {/foreach} </ul> <br clear="left"/> </div> {/if} </div> Resultado: Curiosamente solo tengo 4 posts de cada categoría xD pero limitará solo 5 (o más si lo desean) Cómo pudieron notar repetí el código tres veces en todos los pasos cambiándoles los nombres (en este caso solo puse el numero para no hacerlo tan largo: 2 y 3.) SKIDROW cuando lo instales muestra cap de como quedó para que vean un resultado diferentes con las portadas y en el paso de c.posts.php no olvides agregar la variable p.post_portada al lado de p.post_title para que se puedan ver las imágenes de portada de los posts. Bueno, eso es todo, espero te funcione y les sirva a algún otro user, nos vemos en otro mod
  13. Hola, os traigo una nueva versión del editor que aunque aparentemente no tengo muchos cambios, se han corregido muchos errores y tiene algunas cosas nuevas, además de una instalación simplificada. Actualización 26/08/2014 a las 16:50 - Descarga actualizada (wysibb.css), se añadió el fix de los iconos en Firefox. 26/08/2014 a las 23:40 - Descarga actualizada (wysibb.js), se añadió el fix de los vídeos de YouTube. 26/09/2014 a las 02:00 - Descarga actualizada, nueva versión (1.1.0) con todos los bugs conocidos corregidos. 09/03/2015 a las 00:15 - Descarga actualizada, instalador compatible con Risus 1.2. Mejoras de la versión final Nuevos BBCodes: Justificar y Separador. Se han corregido errores menores de manera definitiva. Editor ahora también al enviar el mensaje, no solo al responder. Ahora será más fácil implementar el editor en otros lugares como: comunidades, juegos, etc. Instalación simplificada, aunque la instalación parezca larga, la mayoría de los pasos no los tendréis que hacer. Posibilidad de utilizar el editor en modo de Pantalla Completa. Cambio en el diseño del editor y los diálogos. Mejoras de la final 1.1 Mejora del rendimiento. Error sincronización solucionado Error al editar posts solucionado. Error 0 al publicar posts solucionado. Error al enviar un mensaje solucionado. El editor ya no se expande horizontalmente. Ahora las imagenes se adaptan al tamaño del editor para mejorar la creación de posts. Ya no desaparecen los emoticonos del "mi" que tenían algunas "v5". Se han añadido todos los fixes publicados hasta ahora. Al subir una imagen ya no se duplicará. Capturas Descarga wysiwyg_final_v1.1.1.zip Instalación La instrucciones para acceder a la instalación están dentro de la descarga en el archivo Instrucciones.txt, leer con atención toda la página de la instalación y recordar que la instalación cambia dependiendo si tienes instalada o no la antigua versión del editor.
  14. Eliminar visitas y sesiones Automaticamente mayores a 24 hs. Aqui por pedido. Aqui les dejo este mini-mod que les puede ser de utilidad para los que tienen muchas visitas en su web. Esta tabla w_visitas y u_sessions puede almacenar datos inecesarios mas que para tener estadisticas de las visitas. Esto les ocaciona problemas aveces cuando quieren cambiar de servidor y su base de datos es muy grande, con esto podran reducir conciderablemente. Para las visitas en c.posts.php buscamos: // AGREGAMOS A VISITADOS... PORTAL Y agregamos arriba: $query = mysql_query('SELECT COUNT(id) as total FROM w_visitas'); $data = mysql_fetch_assoc($query); $time = time() - 1440*60; if($data['total']>100){ mysql_query('DELETE FROM w_visitas WHERE date < \''.$time.'\' '); } Para las sesiones en c.user.php buscamos: // Establecemos la cookie $this->set_cookie('sid', $this->ID, $this->sess_expiration); Y agregamos abajo: $query = mysql_query('SELECT COUNT(session_user_id) as total FROM u_sessions'); $data = mysql_fetch_assoc($query); if($data['total']>100){ $time = time() - 1440*60; mysql_query('DELETE FROM u_sessions WHERE session_time < \''.$time.'\' '); } Donde veran los numero 100 en ambas pueden cambiarlas por la canditdad que quieran que que se actualice al llegar a esa cantidad, dependiendo de la actividad que tengan en sus web. Hagan copias de sus tablas si quieren probar. Espero les sea de utilidad.. hasta la póxima.
  15. Hola amigos, hace tiempo les compartía este MOD: Que consistía en que todos los administradores puedan usar HTML en los posts. Bueno, ahora les traigo para que, los administradores, puedan previsualizar el post en HTML. 1) Deben tener instalado este MOD: 2) Abren el c.posts.php de inc/class y buscas: return array('titulo' => $titulo, 'cuerpo' => $tsCore->parseBadWords($tsCore->parseBBCode($cuerpo), true)); Y lo reemplazas por: return array('titulo' => $titulo, 'cuerpo' => ($tsUser->is_admod = 1) ? html_entity_decode($tsCore->parseBadWords($tsCore->parseBBCode($cuerpo), true)) : $tsCore->parseBadWords($tsCore->parseBBCode($cuerpo), true)); Y listo!! Cap: Antes: Después: Saludos ------------------ IMPORTANTE ------------------ El mod contiene un pequeño error de permisos, aquí el fix.
  16. Buenas a todos/as... Estuve leyendo mucho pero no logro entender como colocar responsive a PHPost, he visto que muy pocos lo han hecho. Mi sitio: http://seguidoresdelagrasa.org/ Espero que alguien pueda ayudar con esto, algun tutorial paso a paso, con los style_responsive.css todos preparados. Gracias.
  17. Hola amigos les traigo un mod complemento que pidio oiramsomel el este cual consiste en que podamos introducir videos iframe embed de reproductores tales como nowvideo, allmyvideo entre muchos otros. Bueno empezamos 1º vamos a bbcode.inc.php que esta en la carpeta ext en la ruta inc/ext desde la raiz del sitio y buscamos class BBCode { /** * @name $restriction * @description Que BBCodes podrán ser convertidos */ public $restriction = Array("url", "code", "quote", "quotePHPost", "font", "size", "color", "img", "b", "i", "u", "align", "spoiler", "swf", "goear", "hr", "li", "s", "sub", "sup", "table", "td", "tr", "ul", "ol", "notice", "info", "warning", "error", "success"); y despues de , "success" ponemos , "ifra" quedando asi class BBCode { /** * @name $restriction * @description Que BBCodes podrán ser convertidos */ public $restriction = Array("url", "code", "quote", "quotePHPost", "font", "size", "color", "img", "b", "i", "u", "align", "spoiler", "swf", "goear", "hr", "li", "s", "sub", "sup", "table", "td", "tr", "ul", "ol", "notice", "info", "warning", "error", "success", "ifra" ); 2º Un poco mas abajo buscamos private function complexParse(&$st, $t){ // ELEMNTOS BBCode $elements = array( array("url", "/(?i)(\[url\])(http|https|ftp|irc|ed2k|gopher|telnet)(\:\/\/)([^\<\>[:space:]]+?)(\[\/url\])/i", "<a href=\"\\2\\3\\4\" target=\"_blank\">\\2\\3\\4</a>"), array("url", "/(?i)\[url\=(http|https|ftp|irc|ed2k|gopher|telnet|gopher|telnet)(\:\/\/)([^\<\>[:space:]]+?)\](.+?)(\[\/url\])/i", "<a href=\"\\1\\2\\3\" target=\"_blank\">\\4</a>"), justo debajo de la ultima coma ponemos array("ifra", "/(?i)\[ifra\=(.+?)\]/i", "<iframe width=\"780\" height=\"480\" src=\"\\1\" marginheight=\"0\" align=\"top\" scrolling=\"no\" frameborder=\"0\" hspace=\"0\" vspace=\"0\" allowfullscreen></iframe><br />"), array("ifra", "/(?i)\[goear\]([a-z0-9]{7})\[\/ifra\]/i", "<iframe width=\"780\" height=\"480\" src=\"\\1\" marginheight=\"0\" align=\"top\" scrolling=\"no\" frameborder=\"0\" hspace=\"0\" vspace=\"0\" allowfullscreen></iframe><br />"), bueno por ahora acabamos en bbcode.inc.php 3ºAhora nos vamos al archivo c.core.php que esta en la carpteta class en en la ruta inc/class desde la raiz del sitio y buscamos function parseBBCode($bbcode, $type = 'normal', $t){ // CLASS BBCode include_once(TS_EXTRA . 'bbcode.inc.php'); $parser =& BBCode::getInstance(); switch($type){ // NORMAL case 'normal': // RESTRICTIONS $parser->restriction = array('url', 'code', 'quote', 'quotePHPost', 'font', 'size', 'color', 'img', 'b', 'i', 'u', 'align', 'spoiler', 'swf', 'goear', 'hr', 'li', 's', 'sup', 'sub', 'table', 'tr', 'td', 'ul', 'ol', 'notice', 'info', 'warning', 'error', 'success'); despues de , 'success' ponemos , 'ifra' con esto acabamos en el archivo c.core.php y por consiquiente con los archivos php 4º ahora subimos esta imagen a la carpeta wysibb que esta en la ruta themes/TUTHEME/images/wysibb/ desde la raiz del sitio web y la guardamos con el nombre de IfraVideo.png 5º vamos al archivo wysibb.css que esta en la carpeta css en la ruta themes/TUTHEME/css/ y al final del todo agregamos .ifravideo{background-image:url('../images/wysibb/IfraVideo.png');background-position:-17px 0px;background-position:top left;background-repeat:no-repeat;margin:4px 2px!important;height:20px!important;} 6º ahora vamos al archivo wysibb.js que esta en la carpeta css en la ruta themes/TUTHEME/js/ y buscamos video: "Vídeo de YouTube", debajo ponemos ifra: "Insertar Reproductor Video Iframe", buscamos modal_video_text:"URL del vídeo", y debajo ponemos modal_ifra_text:"URL del Video Reproductor Iframe a Insertar", mas abajo buscamos //END img upload config buttons: "bold,italic,underline,strike,sup,sub,|,img,video,link,|,fontcolor,fontsize,fontfamily,|,smileBox,bullist,numlist,|,spoiler,messages,table,|,justifyleft,justifycenter,justifyright,justify,|,hr,quote,code,goear,swf,|,removeFormat,fullscreen", y despues de video, ponemos ifra, quedando asi //END img upload config buttons: "bold,italic,underline,strike,sup,sub,|,img,video,ifra,link,|,fontcolor,fontsize,fontfamily,|,smileBox,bullist,numlist,|,spoiler,messages,table,|,justifyleft,justifycenter,justifyright,justify,|,hr,quote,code,goear,swf,|,removeFormat,fullscreen", ahora mas abajo buscamos video: { title: CURLANG.video, buttonHTML: '<span class="fonticon ve-tlb-video1">\uE008</span>', modal: { title: CURLANG.video, width: "600px", tabs: [ { title: CURLANG.video, input: [ {param: "SRC",title:CURLANG.modal_video_text} ] } ], onSubmit: function(cmd,opt,queryState) { var url = this.$modal.find('input[name="SRC"]').val(); if (url) { url = url.replace(/^\s+/,"").replace(/\s+$/,""); } var a; if (url.indexOf("youtu.be")!=-1) { a = url.match(/^http[s]*:\/\/youtu\.be\/([a-z0-9_-]+)/i); }else{ a = url.match(/^http[s]*:\/\/www\.youtube\.com\/watch\?.*?v=([a-z0-9_-]+)/i); } if (a && a.length==2) { var code = a[1]; this.insertAtCursor(this.getCodeByCommand(cmd,{src:code})); } this.closeModal(); this.updateUI(); return false; } }, transform: { '<iframe src="http://www.youtube.com/embed/{SRC}" width="640" height="360" frameborder="0" allowfullscreen></iframe>':'[swf=http://www.youtube.com/watch?v={SRC}]' } }, y debajo ponemos ifra : { title: CURLANG.ifra, buttonHTML: '<span class="ifravideo"></span>', modal: { title: CURLANG.ifra, width: "600px", tabs: [ { title: CURLANG.video, input: [ {param: "SRC",title:CURLANG.modal_ifra_text,validation: '^http(s)?://'} ] } ] }, transform : { '<iframe src="{SRC}" width="780" height="480" scrolling="no" frameborder="0"></iframe>':"[ifra={SRC}]" } }, bueno espero no haberme olvidado de nada si es asi reportenlo y lo corregire por ahora unas capturas de como queda Previsualizaion en posts Visualizacion en posts P.D Un saludo
  18. Hola a todos, esta ocacion les comparto una nueva adaptacion del mod de portadas para post de kmario, los creditos son para el... Esto es mas que nada para los que no tienen mucho conocimiento, por si las dudas que luego me estan diciendo que esto es muy facil y no se que tanto mas como en mi topic anterior algunos usuarios... Les dejo unas capturas del mod: Ahora si comenzamos con la instalación: - Crean estas consultas en la BD ALTER TABLE p_posts ADD post_portada VARCHAR( 180 ) NOT NULL; ALTER TABLE p_borradores ADD b_portada VARCHAR( 180 ) NOT NULL - Abrimos c.posts.php y buscamos: /* getPreview() */ function getPreview(){ global $tsCore; // $titulo = $tsCore->setSecure($_POST['titulo'], true); $cuerpo = $tsCore->setSecure($_POST['cuerpo'], true); // return array('titulo' => $titulo, 'cuerpo' => $tsCore->parseBadWords($tsCore->parseBBCode($cuerpo), true)); } Reemplazamos por: /* getPreview() */ function getPreview(){ global $tsCore; // $titulo = $tsCore->setSecure($_POST['titulo'], true); $imagen = $tsCore->setSecure($_POST['imagen'], true); $cuerpo = $tsCore->setSecure($_POST['cuerpo'], true); // return array('titulo' => $titulo, 'imagen' => $imagen, 'cuerpo' => $tsCore->parseBadWords($tsCore->parseBBCode($cuerpo), true)); } - Un poco mas abajo buscamos: 'title' => $tsCore->parseBadWords($tsCore->setSecure($_POST['titulo'], true)),2, Debajo agregamos: 'portada' => $tsCore->parseBadWords($tsCore->setSecure($_POST['imagen'], true)), - Ahora buscamos: // INSERTAMOS $_SERVER['REMOTE_ADDR'] = $_SERVER['X_FORWARDED_FOR'] ? $_SERVER['X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR']; if(!filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP)) { die('0: Su ip no se pudo validar.'); } if(db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `p_posts` (post_user, post_category, post_title, Adelante de post_title, agregamos: post_portada, - En esa misma linea buscamos: .$postData['title'].'\', adelante de eso agregamos: \''.$postData['portada'].'\', - Abajo buscamos: 'title' => $tsCore->parseBadWords($_POST['titulo'], true), Agregamos abajo de eso: 'portada' => $tsCore->parseBadWords($_POST['imagen'], true), - Ahora buscamos: // ACTUALIZAMOS if($tsUser->uid == $data['post_user'] || !empty($tsUser->is_admod) || !empty($tsUser->permisos['moedpo'])){ if(db_exec(array(__FILE__, __LINE__), 'query', 'UPDATE p_posts SET post_title = \''.$postData['title'].'\', Adelante de \''.$postData['title'].'\' agregamos esto: post_portada = \''.$postData['portada'].'\', - Ahora mas abajo buscamos: // ES SU POST EL Q INTENTA BORRAR? $query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT post_id, post_title, post_user, post_body, post_category FROM p_posts WHERE post_id = \''.(int)$post_id.'\' AND post_user = \''.$tsUser->uid.'\''); Lo reemplazamos por: // ES SU POST EL Q INTENTA BORRAR? $query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT post_id, post_title, post_portada, post_user, post_body, post_category FROM p_posts WHERE post_id = \''.(int)$post_id.'\' AND post_user = \''.$tsUser->uid.'\''); - Un poco mas abajo buscamos: // SI ES MIS POST LO BORRAMOS Y MANDAMOS A BORRADORES if(db_exec(array(__FILE__, __LINE__), 'query', 'DELETE FROM p_posts WHERE post_id = \''.(int)$post_id.'\'')) { if(db_exec(array(__FILE__, __LINE__), 'query', 'DELETE FROM p_comentarios WHERE c_post_id = \''.(int)$post_id.'\'')) { if(db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `p_borradores` (b_user, b_date, b_title, b_body, b_tags, b_category, b_status, b_causa) VALUES (\''.$tsUser->uid.'\', \''.time().'\', \''.$tsCore->setSecure($data['post_title']).'\', \''.$tsCore->setSecure($data['post_body']).'\', \'\', \''.$data['post_category'].'\', \'2\', \'\')')) return "1: El post fue eliminado satisfactoriamente."; } Lo cambiamos por: // SI ES MIS POST LO BORRAMOS Y MANDAMOS A BORRADORES if(db_exec(array(__FILE__, __LINE__), 'query', 'DELETE FROM p_posts WHERE post_id = \''.(int)$post_id.'\'')) { if(db_exec(array(__FILE__, __LINE__), 'query', 'DELETE FROM p_comentarios WHERE c_post_id = \''.(int)$post_id.'\'')) { if(db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `p_borradores` (b_user, b_date, b_title, b_portada, b_body, b_tags, b_category, b_status, b_causa) VALUES (\''.$tsUser->uid.'\', \''.time().'\', \''.$tsCore->setSecure($data['post_title']).'\', \''.$tsCore->setSecure($data['post_portada']).'\', \''.$tsCore->setSecure($data['post_body']).'\', \'\', \''.$data['post_category'].'\', \'2\', \'\')')) return "1: El post fue eliminado satisfactoriamente."; } - mas abajo buscamos: /*********/ $query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT p.post_id, p.post_user, p.post_category, p.post_title, p.post_date, p.post_comments, p.post_puntos, p.post_private, p.post_sponsored, p.post_status, p.post_sticky, u.user_id, u.user_name, u.user_activo, u.user_baneado, c.c_nombre, c.c_seo, c.c_img FROM p_posts AS p LEFT JOIN u_miembros AS u ON p.post_user = u.user_id '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? '' : ' && u.user_activo = \'1\' && u.user_baneado = \'0\'').' LEFT JOIN p_categorias AS c ON c.cid = p.post_category WHERE '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? 'p.post_id > 0' : 'p.post_status = \'0\' && u.user_activo = \'1\' && u.user_baneado = \'0\'').' '.$c_where.' '.$s_where.' GROUP BY p.post_id ORDER BY '.$s_order.' DESC LIMIT '.$start); $lastPosts['data'] = result_array($query); Lo reemplazamos por: /*********/ $query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT p.post_id, p.post_user, p.post_category, p.post_title, p.post_portada, p.post_date, p.post_comments, p.post_puntos, p.post_private, p.post_sponsored, p.post_status, p.post_sticky, u.user_id, u.user_name, u.user_activo, u.user_baneado, c.c_nombre, c.c_seo, c.c_img FROM p_posts AS p LEFT JOIN u_miembros AS u ON p.post_user = u.user_id '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? '' : ' && u.user_activo = \'1\' && u.user_baneado = \'0\'').' LEFT JOIN p_categorias AS c ON c.cid = p.post_category WHERE '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? 'p.post_id > 0' : 'p.post_status = \'0\' && u.user_activo = \'1\' && u.user_baneado = \'0\'').' '.$c_where.' '.$s_where.' GROUP BY p.post_id ORDER BY '.$s_order.' DESC LIMIT '.$start); $lastPosts['data'] = result_array($query); - En las ultimas lineas buscan: // $query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT p.post_id, p.post_user, p.post_category, p.post_title, adelante de p.post_title, agregan: p.post_portada, - Ahora abrimos c.borradores.php y buscamos: 'title' => $tsCore->setSecure($tsCore->parseBadWords($_POST['titulo']), true), Abajo agregamos: 'portada' => $tsCore->setSecure($tsCore->parseBadWords($_POST['imagen']), true), - Mas abajo buscamos: // INSERT if(db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `p_borradores` (`b_user`, `b_date`, `b_title`, `b_body`, `b_tags`, `b_category`, `b_private`, `b_block_comments`, `b_sponsored`, `b_sticky`, `b_smileys`, `b_visitantes`, `b_status`, `b_causa`) VALUES (\''.$tsUser->info['user_id'].'\', \''.$draftData['date'].'\', \''.$draftData['title'].'\', \''.$draftData['body'].'\', \''.$draftData['tags'].'\', \''.$draftData['category'].'\', \''.$draftData['private'].'\', \''.$draftData['block_comments'].'\', \''.$draftData['sponsored'].'\', \''.$draftData['sticky'].'\', \''.$draftData['smileys'].'\', \''.$draftData['visitantes'].'\', \'1\', \'\')')) return '1: '.db_exec('insert_id'); Lo reemplazamos por: // INSERT if(db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `p_borradores` (`b_user`, `b_date`, `b_title`, `b_portada`, `b_body`, `b_tags`, `b_category`, `b_private`, `b_block_comments`, `b_sponsored`, `b_sticky`, `b_smileys`, `b_visitantes`, `b_status`, `b_causa`) VALUES (\''.$tsUser->info['user_id'].'\', \''.$draftData['date'].'\', \''.$draftData['title'].'\', \''.$draftData['portada'].'\', \''.$draftData['body'].'\', \''.$draftData['tags'].'\', \''.$draftData['category'].'\', \''.$draftData['private'].'\', \''.$draftData['block_comments'].'\', \''.$draftData['sponsored'].'\', \''.$draftData['sticky'].'\', \''.$draftData['smileys'].'\', \''.$draftData['visitantes'].'\', \'1\', \'\')')) return '1: '.db_exec('insert_id'); - Ahora mas abajo buscamos: function getDraft($status = 1){ global $tsCore, $tsUser; // $bid = intval($_GET['action']); $query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT bid, b_user, b_date, b_title, adelante de b_title, agregamos: b_portada, CON ESO TERMINAMOS LA PARTE DE ARCHIVOS PHP... - Abrimos m.agregar_from.tpl que esta en templates/modules y buscamos <li> <label>T&iacute;tulo</label> <span style="display: none;" class="errormsg"></span> <input type="text" tabindex="1" name="titulo" maxlength="60" size="60" class="text-inp required" value="{$tsDraft.b_title}" style="width:760px"/> <div id="repost"></div> </li> Abajo agregamos: <li> <label>Portada</label> <span style="display: none;" class="errormsg"></span> <input type="text" tabindex="2" name="imagen" maxlength="180" size="60" class="text-inp required" value="{$tsDraft.b_portada}" /> <p style="color:#999;font-size: 11px;margin: 2px 0 5px 2px;">URL de la imagen como caratula para la home</p> </li> - Buscamos: <li> <a name="post"></a> <label>Contenido del Post</label> <span style="display: none;" class="errormsg"></span> <textarea id="markItUp" name="cuerpo" tabindex="2" style="min-height:400px;" class="required">{$tsDraft.b_body}</textarea> <div style="margin:10px 0 0;">{include file='modules/m.global_emoticons.tpl'}</div> </li> Lo cambiamos por: <li> <a name="post"></a> <label>Contenido del Post</label> <span style="display: none;" class="errormsg"></span> <textarea id="markItUp" name="cuerpo" tabindex="3" style="min-height:400px;" class="required">{$tsDraft.b_body}</textarea> <div style="margin:10px 0 0;">{include file='modules/m.global_emoticons.tpl'}</div> </li> - Abrimos t.buscador.tpl y buscamos: <td title="{$r.c_nombre}" style="background:url({$tsConfig.tema.t_url}/images/icons/cat/{$r.c_img}) no-repeat center center;">&nbsp;</td> Lo reemplazamos por: <td title="{$r.c_nombre}"><a href="{$tsConfig.url}/posts/{$r.c_seo}/{$r.post_id}/{$r.post_title|seo}.html"><img height="47" width="47" style="border: solid 1px gray;" src="{$r.post_portada}"/></a></td> - Al final de estilo.css agregamos #ppostc { padding: 5px; float: left; } #listpost { width: 200px; height: 150px; display: inline-block; position: relative; margin: 5px; box-shadow: 0 1px 4px #BBB; border-radius: 4px; float: left; } #listpost a { display: block; position: relative; text-decoration: none; } #listpost .ptitle { display: table-cell; vertical-align: middle; text-align: center; position: relative; max-width: 170px; color: #FFF; background-color: rgba(0,0,0,0.57); padding: 3px 5px; border-radius: 5px; opacity: 1; z-index: 10; top: 4px; text-shadow: 0 1px 0 black; font-size: 10px; font-family: Helvetica,Arial,sans-serif; font-weight: bold; font-style: italic; } #listpost .pimagen { position: absolute; top: 0; left: 0; display: block; border-radius: 4px; width: 200px; height: 150px; background-color: #f7f7f7; background-image: url('images/load-img.gif'); background-position: center center; background-repeat: no-repeat; } #listpost .pimagen:hover { opacity: 0.7; } #listpost .pimagen img { width: 200px; height: 150px; border: 0; border-radius: 4px; -webkit-filter: grayscale(0%); image-rendering: optimizespeed; image-rendering: -moz-crisp-edges; image-rendering: -o-crisp-edges; image-rendering: -webkit-optimize-contrast; -ms-interpolation-mode: nearest-neighbor; } #listpost .pinfo { position: absolute; right: 7px; top: 129px; color: white; background-color: rgba(0,0,0,0.57); font-size: 10px; padding: 3px 5px; border-radius: 5px; z-index: 9; text-shadow: 0 1px 0 black; line-height: 9px; } #listpost .pavatar { top: 114px; left: 5px; border-radius: 4px; position: absolute; } #listpost .pavatar img { width: 30px; border-radius: 4px; box-shadow: 0 0 3px black; } #listpost .pbloq { background-position: -220px -120px!important; background: url(images/p-icons.png) no-repeat; display: block; top: 129px; left: 179px; opacity: 0.5; padding: 0px 18px 16px 0; position: absolute; } #listpost .pstar{ display: block; background: url(images/pstar.png) no-repeat; top: 5px; left: 182px; padding: 0px 24px 24px 0; position: absolute; z-index: 10; } #listpost .pinfo span { background: url(images/p-icons.png) no-repeat; display: inline-block; margin: -1px 2px; width: 14px; height: 9px; text-indent: 17px; } #listpost .pinfo .puntos{ background-position: -160px -217px; } #listpost .pinfo .visitas { background-position: -254px -199px; } #listpost .pinfo .comentarios { background-position: -237px -218px; } Ahora agregan los siguientes archivos: https://mega.co.nz/#!j9AXhZoD!Xu4-aDB2L4aVS1FD_OanVD-wSZLJrmilYGFNibjyEWw
  19. Hola muy buenas gente, les dejo unos codigos para mejorar la verlocidad de carga del script. Utilizando la herramienta de google http://developers.google.com/speed/pagespeed/insights/ podremos saber algunas cosas importantes que debemos mejorar y otras recomendadas. Para utilizar cache de navegadores el codigo que probé y mejor me funcionó es: En htaccess al final agregar: Header unset Pragma FileETag None Header unset ETag # 1 YEAR <FilesMatch "\.(ico|pdf|flv|jpg|JPG|jpeg|png|gif|swf|mp3|mp4)$"> Header set Cache-Control "public" Header set Expires "Thu, 15 Apr 2010 20:00:00 GMT" Header unset Last-Modified </FilesMatch> # 2 HOURS <FilesMatch "\.(html|htm|xml|txt|xsl)$"> Header set Cache-Control "max-age=7200, must-revalidate" </FilesMatch> # CACHED FOREVER # MOD_REWRITE TO RENAME EVERY CHANGE <FilesMatch "\.(js|css)$"> Header set Cache-Control "public" Header set Expires "Thu, 15 Apr 2010 20:00:00 GMT" Header unset Last-Modified </FilesMatch> Con este codigo indicaremos el tiempo que los navegadores deben guarden en cache los archivos. Otra cosa que en mi caso me dice es que debemos priorizar la carga de la mitad superior, para esto puse los archivos js en carga asincrona pero dejaron de funcionar varias partes de la web. Intenté saber cual es el js vital, pero siempre dejaba de funcionar algo, asi que este punto creo que no lo podremos solucionar de este modo. Sin embargo ahora a mi me dice esta correcto y no se exactamente porque. Podremos mejorar tambien la velocidad comprimiendo los css y los js. Esto es lo que nos dice esa herramienta. Realmente a lo que se refiere con esto es eliminar los espacios y/o comentarios de esos archivos css y js ya que los espacios en blanco también suman en el tamaño final del archivo. Estube buscando algo para realizar esta acción y encontre este: http://cssminifier.com/ . Encontre otros pero siempre me daban problema del tamaño del archivo. También nos indica que comprimamos con gzip deflate, para esto debemos saber si nuestro servidor tiene esta opción en ese caso el código que mejor me funciono fue: En htaccess al final agregar: # compress text, HTML, JavaScript, CSS, and XML AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/x-javascript # remove browser bugs BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html Header append Vary User-Agent Redacte este post ayer más completo y detallado, pero no se porque le di a borrar y me fue a la página anterior y perdí todo. Públique un post similar pero más generalizado en mi web, os dejo el enlace por si quereis echarle un ojo pero para Risus es lo que mejor me funcionó. Como mejorar tiempo y velocidad de carga de pagina web . Espero que os sirva para mejorar la velocidad de vuetras webs. Un saludo.
  20. Hola, tras una larga espera para algunos, por fin voy a publicar la primera versión del chat de RC Design adaptado a Risus. Como cualquier chat que se desarrolla con ajax y php, el consumo de recursos del servidor es considerable y por esa razón no se recomienda utilizar este complemento en servidores gratuitos o con planes muy básicos, pero cabe mencionar que aunque este consumo sigue siendo elevado, si lo comparamos con otros chats publicados aquí, el de este es mucho menor. Actualización 16/02/2015 a las 16:00 - Descarga actualizada, corregido un bug que impedía mostrar emoticonos. 08/03/2015 a las 22:50 - Descarga actualizada: se añadió seguridad adicional para evitar el flood y se añadieron las mejoras de la versión "grupos de WhatsApp". Más capturas Eliminar un mensaje o todos del usuario. Suspender usuario por nick. Características Rangos y color iguales que en la web. Suspender usuario por nick y por mensaje. Ver/editar/eliminar usuarios suspendidos. Borrar mensajes individualmente o todos de un usuario. BBCodes: [b], [i], [u], [br], [url], [color]. Imágenes y URLs automáticas. Censuras globales (desde la administración). Emoticonos globales a través de censuras (desde la administración). Antiflood, suspende durante 2 horas. El antiflood no afecta al staff. Sonido al recibir mensajes (desactivado por defecto). Diseño separado para funcionar con cualquier plantilla. Créditos DuvanJ: por hacer de conejillo de indias y probar el chat en su web. tutan-kabron: por encontrar y dar solución al error al parsear emoticonos. Descarga Para Risus 1.2 o superior: rchat_cbox_1.1.zip Instrucciones Subir el directorio "install" a la raíz y acceder desde el navegador a tuweb.com
  21. Bueno dice N°2 porque a la N°1 la tengo que adaptar a la default ya que tenia class de bootstrap! si no se ve clic 1) Crean un archivo llamado panel.js y agregan esto dentro 2) En extras.css agregan esto 3) Ahora crearemos un archivo llamado head_usuario.tpl y lo colocaremos en sections y dentro agregaremos la parte del st-panel-footer la pueden sacar no hay problema 4) Ahora en la misma carpeta sections buscamos main_footer.tpl y agregaremos esto arriba de </body> {include file='sections/head_usuario.tpl'} <script src="{$tsConfig.js}/panel.js" type="text/javascript"></script> 5) Para los iconos descarguen esto → ICONOS FUENTES ← y lo descomprimen en css 6) Busquen en main_header.tpl y debajo de <link href="{$tsConfig.tema.t_url}/extras.css" rel="stylesheet" type="text/css" /> colocan <link rel="stylesheet" href="{$tsConfig.css}/iconfont.css"> y eso sería todo En el caso que haya error avísenme! Esta es la N°1 si no se ve clic Ver panel N°2 ir a Demo32.hol.es Usuario: Demo Pass: demouser
  22. Este aporte lo hago porque el anterior topic no lo puedo editar y tengo muchos detalles que mencionar ademas de un video que les dejo mas adelante. Como verán le he hecho 3 modificaciones importantes y múltiples fix para mejorar la versión mobile. Empecemos... 1. Añadida la opción de enviar mensajes. 2. Añadida opciones de comentarios en posts como votar (positivo negativo) y citar comentarios. 3. Eliminado plugin thimthumb por tener errores apache en algunos hostings y se reemplazo por otro plugin pero esta vez no es php sino jQuery llamado lazyload, este al igual que thimthumb crea las miniaturas de las imágenes pero las carga por medio de jQuery. Y le he agregado múltiples fix como el registro, load more en comentarios, etc. Como ya saben la instalación es la misma, solo reemplacen sus archivos con esta nueva versión. Recomiendo borrar archivos viejos, verifiquen que en la carpeta inc/php no exista la carpeta cache. V1 con la instalación completa: http://www.phpost.net/?showtopic=27955 Descarga v2.3: https://www.dropbox.com/s/t4tvu5xl05dh5z4/risus_mobile%20V2.3.zip
  23. Hola gente, ayer estaba viendo los usuarios on-line del foro y al ver su localizacion en el foro me dieron gaans de hacerlo para el script, bueno, les dejo la instalacion completa de esta V1 + un video para poner nuevas localizaciones si tienen otras secciones instaladas. Esta localización muestra cuando el usuario... Visita la página principal. Visita un post. Está agregando un nuevo post. Visita la sección de fotos. Visita una foto. Viendo el álbum de fotos de un usuario. Está agregando una nueva foto. Está viendo los miembro. Está viendo los miembros on-line. Está viendo los top posts. Está viendo los top usuarios. Visita el perfil de algún usuario. Está en el portal. Está buscando algo. Está en la sección de localización. Más adelante les enseño a como localizar al usuario si está en otras secciones (ejemplo comunidades). Empecemos... 1. Descarguen y suban estos tres archivos y guárdenlos en sus respectivas carpetas c.localizacion.php > inc/class localizacion.php > inc/php t.localizacion.tpl > tutema/templates https://www.dropbox.com/s/ms26ofprb5uhwjy/%5BMOD%5DLocalizacion%5BKmario19%5D.zip 2. Abrir el archivo header.php que está en la raiz de los archivos de su web Debajo de: // Monitor de usuario include TS_CLASS.'c.monitor.php'; agregamos: // Localización del usuario include TS_CLASS.'c.localizacion.php'; Más abajo buscamos: // Monitor $tsMonitor = new tsMonitor(); Agregamos debajo: // Localizacion $tsLoc = new tsLoc(); Guardamos. Lo que acabamos de hacer fue crear la nueva clase global para que en los demás php o secciones del script pueda "llamar" la función para crear la localización del usuario. Vamos ahora a editar los php de cada sección para agregar su respectiva localización. Home y Posts en posts.php arriba de: if(!empty($_GET['post_id'])){ agregamos: /**********LOCALIZACION************/ function Localizacion() { global $tsLoc, $tsUser; if($_GET['post_id']){ $tsLoc->setLocalizacion(2, $_GET['post_id'], $tsUser->uid); } else { $tsLoc->setLocalizacion(1, 0, $tsUser->uid); } } Localizacion(); /*********************************/ En agregar.php antes de: if(is_numeric($action)){ agregamos: /**********LOCALIZACION************/ function Localizacion() { global $tsLoc, $tsUser; $tsLoc->setLocalizacion(9, 0, $tsUser->uid); } Localizacion(); /*********************************/ Fotos En fotos.php debajo de: $smarty->assign("tsStats", $q); Agregamos: function Localizacion() { global $tsLoc, $tsUser; $tsLoc->setLocalizacion(4, 0, $tsUser->uid); } Localizacion(); Un poco más abajo buscan: case 'agregar': Y debajo de eso agregan: function Localizacion() { global $tsLoc, $tsUser; $tsLoc->setLocalizacion(10, 0, $tsUser->uid); } Localizacion(); Abren ahora c.fotos.php y debajo de : function getFotos($user_id){ global $tsCore, $tsUser; agregan: $tsLoc->setLocalizacion(6, (int)$user_id, $tsUser->uid); Arriba de eso donde está global ponen al lado de $tsUser, $tsLoc; queda de esta manera: global $tsCore, $tsUser, $tsLoc; Mas abajo buscan: function getFoto(){ Debajo en global hacen lo mismo que el paso anterior, al lado de $tsUser agregan , $tsLoc Para que quede asi: global $tsCore, $tsUser, $tsLoc; Debajo de eso mismo agregan: $tsLoc->setLocalizacion(5, $_GET['fid'], $tsUser->uid); Tops En top.php esto.. switch($action){ case 'posts': $smarty->assign("tsTops",$tsTops->getTopPosts($fecha, $cat)); break; case 'usuarios': $smarty->assign("tsTops",$tsTops->getTopUsers($fecha, $cat)); break; } (todo lo que está debajo de "instrucciones de código") Lo reemplazamos por esto: switch($action){ case 'posts': $smarty->assign("tsTops",$tsTops->getTopPosts($fecha, $cat)); function tsLocposts() { global $tsLoc, $tsUser; $tsLoc->setLocalizacion(7, 0, $tsUser->uid); } tsLocposts(); break; case 'usuarios': $smarty->assign("tsTops",$tsTops->getTopUsers($fecha, $cat)); function tsLocfotos() { global $tsLoc, $tsUser; $tsLoc->setLocalizacion(8, 0, $tsUser->uid); } tsLocfotos(); break; } Buscador En Buscador.php debajo de $smarty->assign("tsAutor",$a); Agregamos: /**********LOCALIZACION************/ function Localizacion() { global $tsLoc, $tsUser; $tsLoc->setLocalizacion(11, 0, $tsUser->uid); } Localizacion(); /*********************************/ Portal En portal.php debajo de: // AFILIADOS $smarty->assign("tsAfiliados",$tsAfiliado->getAfiliados()); Agregamos: /**********LOCALIZACION************/ function Localizacion() { global $tsLoc, $tsUser; $tsLoc->setLocalizacion(13, 0, $tsUser->uid); } Localizacion(); /*********************************/ Usuarios En usuarios.php debajo de : $smarty->assign("tsRangos",result_array($query)); agregamos: /**********LOCALIZACION************/ function Localizacion() { global $tsLoc, $tsUser; if ($_GET['online'] == true) { $tsLoc->setLocalizacion(15, 0, $tsUser->uid); } else { $tsLoc->setLocalizacion(14, 0, $tsUser->uid); } } Localizacion(); /*********************************/ Perfil En c.cuenta.php en la función: function loadGeneral($user_id){ En su global al lado de $tsUser Agregamos $tsLoc para que quede asi: global $tsCore, $tsUser, $tsLoc; Debajo de eso agregamos: $tsLoc->setLocalizacion(3, (int)$user_id, $tsUser->uid); Submenu En head_submenu.tpl que está en tutema/templates/sections arriba del primer <div class="clearBoth"></div> agregamos: <li{if $tsPage == 'localizacion'} class="here"{/if}><a class=vctip title="Localizaci&oacute;n del usuario" href="{$tsConfig.url}/localizacion/">Localizaci&oacute;n</a></li> Consulta Ahora ejecutamos la siguiente consulta en la base de datos: CREATE TABLE IF NOT EXISTS `u_localizacion` ( `id` int(11) NOT NULL AUTO_INCREMENT, `id_user` int(11) NOT NULL, `tipo` int(11) NOT NULL, `lugar` int(11) NOT NULL, `titulo` varchar(200) NOT NULL, `url` varchar(250) NOT NULL, `fecha` int(10) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; Y listo, eso es todo, ahora los dejo con el siguiente vídeo por si quieren agregar más localizaciones, supongo que ya más de uno sabe como funciona este mod. http://www.youtube.com/watch?v=DE91rqwd8RQ Esta es la función "general" para las localizaciones. function Localizacion() { global $tsLoc, $tsUser; $tsLoc->setLocalizacion(16, 0, $tsUser->uid); } Localizacion(); Por si se pasaron la descarga, la vuelvo a colocar: https://www.dropbox.com/s/ms26ofprb5uhwjy/%5BMOD%5DLocalizacion%5BKmario19%5D.zip Aprovecho y hago spam y los invito a mi web, ya terminé el diseño, aún hay un par de bugs por ahí flotando pero son menores, la web como tal está en completo funcionamiento, echenle un vistazo y que opinan de mi theme
  24. Hola a todos les comparto mi nueva creación... Como saben ya había mostrado avances pero les traigo la definitiva, está totalmente terminada y muy fácil de editar! SECCIONES INCLUIDAS Posts recientes Carrousel de 5 posts destacados (los 5 primeros de la semana) Posts destacados (los mejores de los últimos 15 días) Fotos recientes Portal con publicaciones de los seguidores Muro del perfil con las publicaciones de su respectivo usuario Notificaciones recientes Mensajes privados Mantenimiento de la web Suspensión de usuario DE LOS POSTS Votar post (puntos) Recomendar el post (en la página y redes sociales) Agregar a favoritos Comentar DE LAS FOTOS Votar foto (me gusta o no me gusta) Comentar DEL PERFIL Y PORTAL Compartir publicación portal/muro Seguir/Dejar de seguir usuario Me gusta en las publicaciones Comentar publicaciones DE LOS MENSAJES Responder mensajes CARACTERÍSTICAS No tiene logo, es el título de la web con un estilo personalizado Contiene scroll infinito en secciones como últimos posts, fotos, posts relacionados, perfil y portal Se ajusta automáticamente al tamaño de la pantalla del dispositivo detectado Tanto los avatares de los usuarios como los iconos de las categorías los tomará de la versión desktop Se puede volver a la versión de escritorio en cache por un (1) día, al terminar las 24 horas te redirige a la versión mobile o con el botón de "entrada" que te muestra la web en el header Las imágenes de portada de los posts son extraídas del contenido del post automáticamente y comprimidas para ahorrar carga Reducción parcial del paquete de instalación de 0.58Mb versus la de Risus 2.12Mb (Reducción de archivos de un 72%) Reducción de tiempo de carga de un 82% Test de velocidad en Postland vía Pingdom Website Speed Test VERSIÓN DESKTOP VERSIÓN MOBILE Se puede notar la gran diferencia tanto en velocidad de carga como tamaño de página, archivos y peticiones. IMAGENES (Tomadas desde Samsumg Galaxy Spica) INSTALACIÓN Dentro del zip de descarga se encuentra un archivo .html con la instalación completa del mod, sin embargo la colocaré a continuación: 1) Generar la siguiente consulta: ALTER TABLE `w_configuracion` ADD `mobile` TINYTEXT NOT NULL AFTER `url`; 2) En el archivo header.php buscar: // Limpiar variables... cleanRequest(); Agregar debajo: // Salir de version mobil por 1 dia if(isset($_GET['mobile'])){setcookie('mobile', $_GET['mobile'], time() + 86400);} Al final de ese mismo archivo agregar: if($tsCore->settings['isMobile']) { echo '<div style="background: #B8DCFF;width: 100%;overflow: hidden;font-size: 15px;padding: 16px;color: #000;text-align: center;">Navega mejor por '.$tsCore->settings['titulo'].' en nuestra versión mobile <a class="mBtn btnOk" href="'.$tsCore->settings['mobile'].'" onclick="document.cookie = \'mobile=;expires=Thu, 01 Jan 1970 00:00:01 GMT;\'">Entrar</a></div>'; } 3) En c.core.php buscar: function tsCore() Agregar arriba: public function isMobile() { $mobiles = array( "midp", "240x320", "blackberry", "netfront", "nokia", "panasonic", "portalmmm", "sharp", "sie-", "sonyericsson", "symbian", "windows ce", "windows phone", "benq", "mda", "mot-", "opera mini", "philips", "pocket pc", "sagem", "samsung", "sda", "sgh-", "vodafone", "xda", "iphone", "android" ); foreach($mobiles as $mobileClient) { if (strstr(strtolower($_SERVER['HTTP_USER_AGENT']), $mobileClient)) return true; } return false; } Mas abajo buscar: $this->settings['novemods'] = $this->getNovemods(); Agregar debajo: $this->settings['isMobile'] = $this->isMobile(); Mas abajo buscar: function getTema() { Agregar debajo: if($this->isMobile() && !empty($this->settings['mobile']) && empty($_COOKIE['mobile']) && empty($_GET['mobile'])) { header('Location: '.$this->settings['mobile'].$_SERVER['REQUEST_URI']); } 4) En c.admin.php buscar: 'url' => $tsCore->setSecure($tsCore->parseBadWords($_POST['url'])), Agregar debajo: 'mobile' => $tsCore->setSecure($tsCore->parseBadWords($_POST['mobile'])), Mas abajo buscar: `url` = \'' . $c['url'] . '\', Agregar al lado: `mobile` = \'' . $c['mobile'] . '\', 5) En templates/admin_mods/m.admin_configs.tpl buscar: <dl> <dt><label for="ai_url">Dirección del sitio:</label></dt> <dd><input type="text" id="ai_url" name="url" maxlength="32" value="{$tsConfig.url}" /></dd> </dl> Agregar debajo: <dl> <dt><label for="mobile">Dirección del sitio para móviles:</label></dt> <dd><input type="text" id="mobile" name="mobile" maxlength="40" value="{$tsConfig.mobile}" /></dd> </dl> 6) Copiar el archivo config.inc.php de tu web a la carpeta donde se descomprimió los archivos del mod Risus Mobile. Ahora dependiendo de como quieren que se ejecute el mod Risus Mobile, sea en subdominio m.tuweb o lo tengan en una carpeta tuweb/mobile/, deberás descomprimir el zip descargado y dentro encontraras la carpeta themes como si fuera Risus normal, dentro de ella habráotra carpeta llamada default y si el tema que tienes ES DIFERENTE AL DEFAULT tendrás que cambiarle el nombre exactamente igual al nombre de la carpeta del tema que tengas instalado en tu web principal. Ejemplo, si en mi web principal tengo el theme KM-Tronos azul y su carpeta es themes/KM-Tronos_b entonces en la carpeta del mod mobile cambiare el nombre de la carpeta themes/default a themes/KM-Tronos_b para que asi se ajuste cada tema a ambas versiones de la web. Si deseas crear tu propio tema dependiendo del que tengas en la web principal, solo debes duplicar la carpeta default, cambiarle el nombre al del teme que tienes y editar el css y los tpls que quieras para hacer tu diseño acorde al theme que tengas, no está de más recordar que el tema que hice es el de Taringa!. Esa anterior instalación es mas que todo para activar en tu web su versión mobile Obviamente si no hay url, al entrar con un celular o tablet, no redireccionará a ningún lado. CRÉDITOS aperpen Por su función para detectar modelos de los dispositivos. Vellenger Por compartir Timthumb para comprimir las imágenes de portadas de los posts. Me ayudó a optimizar la función de extraer la portada del cuerpo de los posts. kevinzonaa Me ayudó a testear la web en distintos celulares. DEMO Puedes acceder desde tu celular a http://www.postland.com.mx/ que te redirecciona a http://m.postland.com.mx/ ACTUALIZACIONES 22/06/2014 - Etiqueta <meta> para adaptación de diseño a distintas resoluciones. 24/06/2014 - Enlace a sitio desktop (y no mobile) en los shares facebook, twitter y google. 22/07/2014 - Fix vídeos en posts: 26/07/2014 - Fix notificación: "La publicación que has solicitado no existe" DESCARGA risus_mobile V2.3.zip (515Kb) http://www.phpost.net/?showtopic=28313 Espero les guste el mod y comenten sus sugerencias, criticas, recomendaciones y obviamente si encuentran bugs. Nos vemos en otro aporte, disfrútenlo!
  25. Hola gente en esta ocasión les traigo una nueva versión de mi mod :3 -Aconsejado por @Rengo ., ahora se puede autorizar a los rangos a publicar -Filtrar por usuario -Categorías administrables (esto lo pidieron varios en la versión beta) - Filtrar por Categorías Descargar : http://www.mediafire.com/file/8f3772z45st5a45/Catalogo+v3.zip Demo: http://mundofree.net/catalogo/ Se aceptan ideas para mejorar el complemento saludos
×