Jump to content

Buscar en La Comunidad

Showing results for tags 'mod'.



More search options

  • Search By Tags

    Añade tags separandolos por comas.
  • Search By Author

Tipo de Contenido


Foros

  • 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
  • Next [last version]'s Fix's
  • Next [last version]'s Theme
  • Next [last version]'s Notas!
  • Risus2's Tutoriales
  • Risus2's MODS
  • Risus2's Servicios
  • Next [last version]'s Bugs
  • Risus2's Webs
  • Risus2's Bugs
  • Risus2's Opinión
  • Juegos de Steam Gratis's Activos
  • Risus2's JS
  • Risus2's PHP y Smarty
  • Risus2's El Script
  • Risus2's Diseño
  • Juegos de Steam Gratis's Finalizados
  • Risus2's Off-topic
  • Risus2's Fixes

Calendars

  • Risus2's Calendario

Encontramos 130 resultados

  1. Hola [email protected],es un modulo donde pueden obtener la url de sus imágenes,seleccionándolas desde tu PC. Vale para cualquier theme,se abre en una nueva ventana sin salir del editor. Instalación: En m.fotos_add_form.tpl tutheme/templates/modules/m.fotos_add_form.tpl Buscar: <li> <label for="furl">URL</label> <span style="display: none;" class="errormsg"></span> <input type="text" tabindex="2" name="url" id="furl" maxlength="200" class="text-inp required" value="{$tsFoto.f_url}"/> </li> Arriba agregan: {include file='modules/m.fotos_add_form_url.tpl'} Y suben el archivo a tutheme/templates/modules/m.fotos_add_form_url.tpl Pass:Tronlar Archivo
  2. pins y hashtags del momento

    este mod incorpora los pins y hashtags del momento 1)hacen estas 2 sql´s: 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=21 ; 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 ; luego van a c.muro y buscan dentro de la funcion streampost(): // $return['user_name'] = $tsUser->nick; // MONITOR $tsMonitor->setNotificacion(12, $pid, $tsUser->uid, $pub_id); antes agregan if(preg_match_all("/#([A-Za-z0-9_-ñÑçÇáÁäÄàÀâÂéÉëËèÈêÊíÍïÏìÌîÎóÓöÖòÒôÔúÚüÜùÙûÛ]+)/",$data,$tags)){ $tags2 = str_replace("006595",' ' ,$tags); $hash = $tags2[1]; //Sin ## foreach($hash as $tag){ $save_tags = "$tag"; if($save_tags=='006595'){ $save_tags='1';} if($save_tags != '1'){ mysql_query('INSERT INTO `u_muro_tags` (`p_id`, `p_tags`, `p_date`) VALUES (\''.$pub_id.'\', \''.$save_tags.'\', \''.time().'\')');} }} luego dentro de la funcion streamrepost(): buscan: // MONITOR $tsMonitor->setMuroRepost($pid, $pub['p_user'], $pub['p_user_pub']); antes agregan: if(preg_match_all("/#([A-Za-z0-9_-ñÑçÇáÁäÄàÀâÂéÉëËèÈêÊíÍïÏìÌîÎóÓöÖòÒôÔúÚüÜùÙûÛ]+)/",$data,$tags)){ $tags2 = str_replace("006595",' ' ,$tags); $hash = $tags2[1]; //Sin ## foreach($hash as $tag){ $save_tags = "$tag"; if($save_tags=='006595'){ $save_tags='1';} if($save_tags != '1'){ mysql_query('INSERT INTO `u_muro_tags` (`p_id`, `p_tags`, `p_date`) VALUES (\''.$pid.'\', \''.$save_tags.'\', \''.time().'\')');} }} luego abren ajax.portal.php y buscan; 'portal-activity_pages' => array('n' => 2, 'p' => 'actividad'), debajo agregan: 'portal-pin' => array('n' => 2, 'p' => '0'), 'portal-pin2' => array('n' => 2, 'p' => '0'), 'portal-hpin' => array('n' => 2, 'p' => '0'), mas abajo buscan: default: die('0: Este archivo no existe.'); break; antes agregan: case 'portal-pin': $cuerpo = $_POST['cuerpo']; //<-- echo $tsPortal->new_pin($cuerpo); //--> break; case 'portal-pin2': $id = $_POST['pid']; //<-- echo $tsPortal->del_pin($id); //--> break; case 'portal-hpin': $id = $_POST['id']; //<-- echo $tsPortal->hash_pin($id); //--> break; abren c.portal y antes de: /** getLastPosts() * @access public * @param string * @return array */ agregan: //hashtags del momento function hashtagsPops(){ global $tsCore, $tsUser; $time = time() -(60*60*5); // son 5 horas $q = mysql_query('SELECT id,p_date,p_tags,count(p_tags) AS total FROM `u_muro_tags` WHERE p_date >= '.$time.' GROUP BY p_tags order by total desc limit 5'); $data1 = result_array($q); $q1 = mysql_query('SELECT id,p_date,p_tags,count(p_tags) AS total FROM `u_muro_tags` GROUP BY p_tags order by total desc limit 5'); $data2 = result_array($q1); if(empty($data1)){ $data = $data2; }else{ $data = $data1;} return $data; } function new_pin($cuerpo){ global $tsCore, $tsUser; $cuerpo = $tsCore->setSecure($_POST['cuerpo']); $cuerpo = preg_replace("/#([A-Za-z0-9_-ñÑçÇáÁäÄàÀâÂéÉëËèÈêÊíÍïÏìÌîÎóÓöÖòÒôÔúÚüÜùÙûÛ]+)/", "<a href=/hashtags/result/?q=%23$1><b><font color=#006595>$0</font></b></a>", $cuerpo ); if(strlen($cuerpo) <= 0) return '0: Tu Pin debe tener al menos una letra.'; //Tienes ese pin? if(mysql_num_rows(mysql_query('SELECT pid FROM `u_muro_tags` WHERE p_user = \''.$tsUser->uid.'\' AND p_data = \''.$cuerpo.'\' LIMIT 1'))){ return '0: Ya tienes ese pin.';} //Tienes mas de 10 if(mysql_num_rows(mysql_query('SELECT pid FROM `u_pins` WHERE p_user = \''.$tsUser->uid.'\'')) > 10){ return '0: No puedes tener mas de <b>10</b> pins.';} //Insertar if(mysql_query('INSERT INTO `u_pins` (`p_user`,`p_data`,`p_fecha`) VALUES (\''.$tsUser->uid.'\',\''.$cuerpo.'\',\''.time().'\') ')){ return "1: El pin se agrego con exito";} } function del_pin($id){ global $tsCore, $tsUser; $id = $tsCore->setSecure($_POST['id']); //Tienes ese pin? if (!mysql_num_rows(mysql_query('SELECT `pid` FROM `u_pins` WHERE `pid` = \''.(int)$id .'\' LIMIT 1'))) { return '0: El id ingresado no existe.'; } if(mysql_query('DELETE FROM `u_pins` WHERE `pid` = \''.(int)$id .'\'')){ return '1: Se ha eliminado con exito.'; } else return 'Ocurri&oacute; un error'; } function hash_pin($id){ global $tsCore, $tsUser; $id = $tsCore->setSecure($_POST['id']); $q = mysql_query('SELECT p_tags,id FROM `u_muro_tags` WHERE id = \''.(int)$id.'\' LIMIT 1'); $data = mysql_fetch_assoc($q); $tutan = '<a href=/hashtags/result/?q=%23'.$data['p_tags'].'><b><font color=#006595>#'.$data['p_tags'].'</font></b></a>'; //Tienes ese pin? if(mysql_num_rows(mysql_query('SELECT pid FROM `u_pins` WHERE p_user = \''.$tsUser->uid.'\' AND p_data = \''.$tutan.'\' LIMIT 1'))){ return '0: Ya tienes ese pin.';} //Tienes mas de 10 if(mysql_num_rows(mysql_query('SELECT pid FROM `u_pins` WHERE p_user = \''.$tsUser->uid.'\'')) > 10){ return '0: No puedes tener mas de <b>10</b> pins.';} $pin = '<a href=/hashtags/result/?q=%23'.$data['p_tags'].'><b><font color=#006595>#'.$data['p_tags'].'</font></b></a>'; //Insertar if(mysql_query('INSERT INTO `u_pins` (`p_user`,`p_data`,`p_fecha`) VALUES (\''.$tsUser->uid.'\',\''.$pin.'\',\''.time().'\') ')){ return "1: El pin se agrego con exito";} } function ver_pins(){ global $tsCore, $tsUser; $q = mysql_query('SELECT p_user,p_data,pid FROM `u_pins` WHERE p_user = '.$tsUser->uid.' ORDER BY pid ASC LIMIT 10'); $data = result_array($q); return $data; } luego abren portal.php y buscan: // FOTOS antes agregan: // HASHTAGS Y PINS $smarty->assign("tsHas",$tsPortal->hashtagsPops()); $smarty->assign("tsPins",$tsPortal->ver_pins()); ABREN T.PORTAL Y BUSCAN: {include file='modules/m.home_stats.tpl'} debajo agregan: {include file='modules/pins.tpl'} {include file='modules/hashtagsmom.tpl'} luego suben estos 2 archivos a su carpeta modules: http://www.mediafire...srkt375vgdm34aw y estas imagenes con sus respectivos nombres a la carpeta /themes/default/images/: creditos: @shackur x el diseño y @absa caps: Nota: para poder ver los hashtags es necesario insertar en la db os hashtags cuando es el primer uso para ello solo escriban hashtags en una publicacion y automaticamente se insertan
  3. Hola, a pedido de amemao () hago este mod. Se trata de que si se registra un usuario que usó la misma ip o sesión que otro usuario se enviará un aviso a todos los moderadores y administradores de la web. Instalación: Abrir c.registro.php ubicado en /inc/class/ y buscar: mysql_query('INSERT INTO `u_portal` (`user_id`) VALUES (\''.(int)$tsData['user_id'].'\')'); Abajo poner: // COMPROBAMOS CLONES $realip = ($_SERVER['REMOTE_ADDR'] ? $_SERVER['REMOTE_ADDR'] : $_SERVER['X_FORWARDED_FOR']); if($f = mysql_num_rows($q = mysql_query('SELECT user_name FROM u_miembros WHERE user_last_ip = \''.$tsCore->setSecure($realip).'\'')) || mysql_num_rows($qq = mysql_query('SELECT u.user_name FROM u_sessions AS s LEFT JOIN u_miembros AS u ON s.session_user_id = u.user_id WHERE s.session_ip = \''.$tsCore->setSecure($realip).'\' && s.session_user_id != \'0\''))){ $q = mysql_fetch_row($f ? $q : $qq); $ms = mysql_query('SELECT user_id FROM u_miembros WHERE user_rango = \'1\' || user_rango = \'2\''); while($row = mysql_fetch_row($ms)){ mysql_query('INSERT INTO u_avisos (user_id, av_subject, av_body, av_date, av_type) VALUES (\''.$row[0].'\', \'Posibles clones\', \'Posibles clones: @'.$q[0].' y @'.$tsCore->setSecure($tsData['user_nick']).'\', \''.time().'\', \'2\')') or die('0__'.mysql_error()); } } Y listo. Capturas: Saludos.
  4. mod karma

    hola quisiera saber si por las dudas se puede hacer el mod de karma por post y actividad igual a taringa. gracias web system3000.tk
  5. [MOD] Borradores en el monitor

    Hola a todos de PHPost les traigo un nuevo complemento bastante útil, es similar al que hay en Taringa, les muestra los últimos 7 posts favoritos que agregaron para tenerlos más accesibles que cargar la sección favoritos y solo los tengan en el monitor de usuario y que Kmario adapto para la Risus pero en este caso en vez de ser los favoritos en el monitor este mod muestra los ultimos 7 borradores en el monitor del usuario.Bueno este mod esta basado enteramente en el que posteo Kmario asi que la mayoria de los creditos van para el que por cierto ¡¡¡¡Felicitaciones!!!! por ser parte del E.P Bueno empezamos con el mods aqui os dejo para la 1.1 (rc2) y para la 1.2 la unica diferencia esta en la funcion que añadiremos a c.posts.php asi que elijan que funcion les corresponde segun la version de su script. 1º Deben al archivo c.posts.php (esta en inc/class/)y buscamos: /* getFavoritos() */Arriba de eso agregamos: (Para la version 1.1) /* * listBorradores() * Borradores en el monitor * ReModWrite */ function listBorradores(){ global $tsCore, $tsUser; // $query = mysql_query('SELECT p.post_id, p.post_title, c.c_seo, c.c_img FROM p_borradores AS b LEFT JOIN p_posts AS p ON p.post_id = b.bid LEFT JOIN p_categorias AS c ON c.cid = p.post_category WHERE b.b_user = \''.$tsUser->uid.'\' AND p.post_status = \'0\' ORDER BY b.b_date DESC LIMIT 7'); $data['data'] = result_array($query); // $data['total'] = mysql_num_rows(mysql_query('SELECT bid FROM p_borradores WHERE b_user = \''.$tsUser->uid.'\'')); // return $data; }Arriba de eso agregamos: (Para la version 1.2) /* * listBorradores() * Borradores en el monitor * ReModWrite */ function listBorradores(){ global $tsCore, $tsUser; // $query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT p.post_id, p.post_title, c.c_seo, c.c_img FROM p_borradores AS b LEFT JOIN p_posts AS p ON p.post_id = b.bid LEFT JOIN p_categorias AS c ON c.cid = p.post_category WHERE b.b_user = \''.$tsUser->uid.'\' AND p.post_status = \'0\' ORDER BY b.b_date DESC LIMIT 7'); $data['data'] = result_array($query); // $data['total'] = db_exec('num_rows', db_exec(array(__FILE__, __LINE__), 'query', 'SELECT bid FROM p_borradores WHERE b_user = \''.$tsUser->uid.'\'')); // return $data; }Con eso terminamos en el archivo c.posts.php 2º Ahora vamos a ajax.borradores.php (está en inc/php/ajax/) y debajo de: 'borradores-get' => array('n' => 2, 'p' => ''),Agregamos: 'borradores-lista' => array('n' => 2, 'p' => 'lista'),En el mismo archivo un poco mas abajo buscamos: // CLASE require('../class/c.borradores.php'); $tsDrafts =& tsDrafts::getInstance();Debajo de eso agregamos // CLASE require('../class/c.posts.php'); $tsPosts =& tsPosts::getInstance();Ahora al final del mismo archivo buscamos: case 'borradores-eliminar': //<-- echo $tsDrafts->delDraft(); //--> break;Y debajo de eso agregamos: case 'borradores-lista': // <!-- $smarty->assign("tsBorradores",$tsPosts->listBorradores()); // --> break;Con eso ya terminamos en el archivo ajax.borradores.php 3º Ahora nos vamos al archivo acciones.js (está en tutema/js/) y buscamos: mensaje.close();Debajo de eso agregamos: borrador.close();Un poco más abajo buscamos: notifica.close();Debajo de eso agregamos: borrador.close();Para finalizar buscamos: var timelib = {Arriba de eso agregamos: var borrador = { cache: {}, last: function () { notifica.close(); mensaje.close(); // if ($('#bor_list').css('display') != 'none') { $('#bor_list').slideUp(); $('a[name=Borradores]').parent('li').removeClass('monitor-notificaciones'); } else { if (($('#bor_list').css('display') == 'none') || typeof borrador.cache.last == 'undefined') { $('a[name=Borradores]').children('span').addClass('spinner'); $('a[name=Borradores]').parent('li').addClass('monitor-notificaciones'); $('#bor_list').slideDown(); borrador.ajax(function (r) { borrador.cache['last'] = r; borrador.show(); borrador.total(); notifica.close(); mensaje.close(); }); } else borrador.show(); } }, ajax: function(fn){ $('#loading').fadeIn(250); $.ajax({ type: 'POST', url: global_data.url + '/borradores-lista.php', success: function(h){ fn(h); $('#loading').fadeOut(350); } }); }, show: function () { if (typeof borrador.cache.last != 'undefined') { $('a[name=Borradores]').parent('li').addClass('monitor-notificaciones'); $('a[name=Borradores]').children('span').removeClass('spinner'); $('#bor_list').show().children('ul').html(borrador.cache.last); $('#bor_list > ul > li > a[title]').tipsy({ gravity: 's' }); } }, total: function () { var total = parseInt($('#BTotal').text()); if(total > 0) { $('#BorrTotal').html('Borradores <span class="floatR">' + total + '</span>'); } }, close: function(){ $('#bor_list').hide(); $('a[name=Borradores]').parent('li').removeClass('monitor-notificaciones'); } }Con eso ya terminamos en el archivo acciones.js 4º Ahora vamos y abrimos head_menu.tpl (está en tutema/templates/secciones/) y buscamos: <li> <a title="Mis Borradores" href="{$tsConfig.url}/borradores.php"> <span class="systemicons borradores"></span> </a> </li>Y Lo reemplazaremos por: <li class="borradores" style="position:relative"> <a href="{$tsConfig.url}/borradores.php" onclick="borrador.last(); return false" title="Posts borradores" name="Borradores"> <span class="systemicons borradores"></span> </a> <div class="notificaciones-list" id="bor_list" style="width:270px"> <div style="padding: 10px 10px 0 10px;font-size:13px"> <strong style="cursor:pointer" onclick="location.href='{$tsConfig.url}/borradores.php'" id="BorrTotal">Borradores</strong> </div> <ul> </ul> <a href="{$tsConfig.url}/borradores.php" class="ver-mas">Ver todos los posts borradores</a> </div> </li> Con eso ya terminamos en el archivo head_menu.tpl 5º Y por ultimo subimos el siguiente archivo a la carpeta p.php_files (esta en tutema/templates/p.php_files). p.borradores.lista.tpl Y listo eso es todo con esto terminamos el mod. Nos quedaria algo como esto pero con los posts que tengamos en borradores. P.D La captura muestro la del mod de favoritos en el monitor de Kmario ya que el mio lo adapte directamente para el tema km-tronos tambien de kmario pero este mod no muestra los favoritos sino los borradores en el monitor Un saludo espero les sea de utilidad y agradezcan el aporte p.borradores.lista.tpl
  6. Este script muestra un LightBox en todos los post con nuestra fanpage (en modo Like Box Widget) y un boton de cerrar el cual contiene el like oculto, cabe destacar que no es un autolike para fanpages, si no para las url de los post!, tambien funciona como un autoshare ya que muestra el enlace a los amigos del visitante . Características: El like oculto solo se muestra al usuario que viene desde facebook, con esto nos aseguramos que el usuario esta logeado Cuando el usuario da like, capturamos ese evento y ocultamos el LightBox, y para que no aparezca por un tiempo colocamos una cookie No se va a mostrar en versiones mobiles Si por alguna razon el LightBox no puede ser cerrado, este se cierra solo luego de 10 segundos (se puede cambiar) No soy el creador, solo me encargue de adaptar a risus!, podras encontrar la fuente del script original al final del topic. Paso 1 Vamos a Iniciar sesión en Facebook | Facebook y creamos una nueva aplicación, con esto obtendremos un ID de aplicación para usar. Paso 2, 3 y 4 xD En main_header.tpl busca: <title>{$tsTitle}</title> Abajo agrega: {if $tsPost.post_id} <!---metas--> <meta property="og:url" content="{$tsConfig.url}/posts/{$tsPost.post_category}/{$tsPost.post_id}/{$tsPost.post_title|seo}.html" /> <meta property="og:type" content="article" /> <meta property="og:title" content="{$tsPost.post_title} - {$tsConfig.titulo}" /> <meta property="og:description" content="{$tsPost.p_descripcion}..." /> <meta property="og:image" content="{$tsPost.p_img_portada}" /> <meta property="fb:app_id" content="123456789" /> <!---fin metas--> <style> /*{literal}*/ #contenedor{ display:none; width:100%;height:100%;position:fixed;top:0px;left:0px;background-color:rgba(0,0,0,0.7); z-index:9996;} #cuadrito{ border:1px solid #fff; width:280px; height:150px; color:#fff; position:absolute; top:40%;left:40%; background-color: #3b5998;z-index:9997; padding:5px;} #boton { pointer-events:none!important; font-family:verdana; padding:10px; background-color:#fff; position:absolute;bottom:5px; color:#000; left:33%; width:80px; text-align:center; z-index:9999; } #lke{ position:absolute; padding:10px; left:36%; bottom: -2px; width:73px; text-align:center; z-index:9998; } .fb-like{ overflow:hidden; width: 80px; } /*{/literal}*/ </style> {/if} Cambia 123456789 por la ID de tu app que creaste en el paso 1. Ps si tienes un mod de portadas cambia {$tsPost.p_img_portada} por la variable de tu mod! En el mismo archivo, abajo de <body> agrega: {if $tsPost.post_id} <div id="contenedor"> <div id="cuadrito"> <iframe width="280px" height="70px" frameborder="0" border="0" src="about:blank" id="fanpage"></iframe> <a href="javascript:void(0);" id="boton">CERRAR</a> <div class="fb-like" id="lke"></div> <div id="fb-root"></div> </div> </div> {/if} En main_footer.tpl, antes de </body> agrega: {if $tsPost.post_id} <script> {literal} //Verificamos si el usuario viene desde facebook y no es un mobil if (document.referrer.indexOf('facebook.com') >= 0 && !detectmob()) { //Luego de 10 segundos se cierra el lightbox... es por cualquier cosa... setTimeout(function(){ ver_like_ccw(); }, 10000); //10000 = 10 segundos //Verificamos si la cookie no existe if (getCookie('like{/literal}{$tsPost.post_id}{literal}') != 1) { //URL de tu fanpage var urlfan = "https://www.facebook.com/facebook"; //Agregamos la url completa del likebox de nuestra fanpage document.getElementById('fanpage').src = "https://www.facebook.com/v2.5/plugins/page.php?adapt_container_width=true&app_id=563126933851462&container_width=280&hide_cover=false&href="+encodeURIComponent(urlfan)+"&locale=es_ES&sdk=joey&show_facepile=false&small_header=true"; //Mostramos el LightBox document.getElementById('contenedor').style.display = "block"; } } //Esta funcion esta encargada de ocultar el lightbox y colocar la cookie (100 dias dura) function ver_like_ccw(url, html_element) { document.getElementById('contenedor').style.display = "none"; setCookie('like{/literal}{$tsPost.post_id}{literal}', '1', 100); } //funcion para colocar cookies function setCookie(cname, cvalue, exdays) { var d = new Date(); d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000)); var expires = "expires=" + d.toUTCString(); document.cookie = cname + "=" + cvalue + "; " + expires; } //funcion para leer cookies function getCookie(cname) { var name = cname + "="; var ca = document.cookie.split(';'); for (var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) == ' ') c = c.substring(1); if (c.indexOf(name) == 0) return c.substring(name.length, c.length); } return ""; } //Cargamos el SDK de facebook //Reemplazamos 123456789 por el ID de nuestra aplicacion window.fbAsyncInit = function() { FB.init({ appId: '123456789', xfbml: true, version: 'v2.5' }); FB.Event.subscribe('edge.create', ver_like_ccw); }; (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) { return; } js = d.createElement(s); js.id = id; js.src = "//connect.facebook.net/fr_FR/sdk.js"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk')); function detectmob() { if( navigator.userAgent.match(/Android/i) || navigator.userAgent.match(/webOS/i) || navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/iPad/i) || navigator.userAgent.match(/iPod/i) || navigator.userAgent.match(/BlackBerry/i) || navigator.userAgent.match(/Windows Phone/i) ){ return true; } else { return false; } } {/literal} </script> {/if} Por la url de tu fanpage en var urlfan = "" y remplaza 123456789 por la ID de tu app que creaste en el paso 1. Finalmente en c.post.php busca: $postData['categoria'] = db_exec('fetch_assoc', $query); Y debajo agrega: // Descripcion // eliminamos bbcodes, espero alguien pueda mejorar esto :P $postData['p_descripcion'] = preg_replace("/\[(.*?)\]/is", "", $postData['post_body']); $postData['p_descripcion'] = preg_replace("/\[(.*?)\](.*?)\[\/(.*?)\]/is", "", $postData['post_body']); $postData['p_descripcion'] = substr($postData['p_descripcion'], 0, 165); $postData['p_descripcion'] = preg_replace("[\n|\r|\n\r]", "", $postData['p_descripcion']); // Portada - tomamos la 2 casi siempre la 1 es de "bienvenido" -- creditos a kmario19 $postData['p_img_portada'] = preg_match_all('/(\[img(\=|\]))((http|https)?(\:\/\/)?([^\<\>[:space:]]+)\.(jpg|jpeg|png|gif))(\]|\[\/img\])/i', $postData['post_body'], $imgs); $postData['p_img_portada'] = $total = count($imgs[3]); $postData['p_img_portada'] = $img = (count($imgs[3]) > 1) ? $imgs[3][1] : $imgs[3][0]; Algunas capturas: Asi lo ve un visitante: Asi lo ven sus amigos en facebook: Cookie con la id de cada post: Demo Complemento original Bueno eso ha sido todo, nos vemos en otro aporte
  7. El tema es este http://www.phpost.net/foro/topic/30433-v5-taringa-mi-regalo-de-navidad/ m.fotos_home_content.tpl default/templates/modules/m.fotos_home_content.tpl Buscar: <a href="{$tsConfig.url}/fotos/{$f.user_name}/{$f.foto_id}/{$f.f_title|seo}.html"> <img class="loadimg" data-original="{$f.f_url}"/> </a> Debajo añadir: <img class="no-ver" alt="" src="{$tsConfig.url}/files/avatar/{$f.user_id}_50.jpg" style="width: 50px;height: 50px;position: relative;top: -63px;float: right;margin-right: 9px;background: #fff;padding: 1px;"> c.fotos.php inc/class/c.fotos.php Buscar: /* getLastFotos() */ function getLastFotos(){ global $tsCore, $tsUser; $max = 12; // MAXIMO A MOSTRAR //$limit = $tsCore->setPageLimit($max, true); // PAGINAS $query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT COUNT(f.foto_id) FROM f_fotos AS f LEFT JOIN u_miembros AS u ON u.user_id = f.f_user '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? '' : 'WHERE f.f_status = \'0\' AND u.user_activo = \'1\' && u.user_baneado = \'0\'')); list ($total) = db_exec('fetch_row', $query); $limit = $tsCore->setPageLimit($max, false, $total); $data['pages'] = $tsCore->getPages($total, $max); $data['contadortoup'] = $total; //$data['pages'] = $tsCore->pageIndex($tsCore->settings['url']."/fotos/?",$_GET['s'],$total, $max); $query = 'SELECT f.foto_id, f.f_title, f.f_date, f.f_description, f.f_url, f.f_status, u.user_name, u.user_activo, u.user_baneado FROM f_fotos AS f LEFT JOIN u_miembros AS u ON u.user_id = f.f_user '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? '' : 'WHERE f.f_status = \'0\' AND u.user_activo = \'1\' && u.user_baneado = \'0\'').' ORDER BY f.foto_id DESC LIMIT '.$limit; $data['data'] = result_array(db_exec(array(__FILE__, __LINE__), 'query', $query)); return $data; } Añadir despues de u.user_name, u.user_id, Quedaría así: /* getLastFotos() */ function getLastFotos(){ global $tsCore, $tsUser; $max = 12; // MAXIMO A MOSTRAR //$limit = $tsCore->setPageLimit($max, true); // PAGINAS $query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT COUNT(f.foto_id) FROM f_fotos AS f LEFT JOIN u_miembros AS u ON u.user_id = f.f_user '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? '' : 'WHERE f.f_status = \'0\' AND u.user_activo = \'1\' && u.user_baneado = \'0\'')); list ($total) = db_exec('fetch_row', $query); $limit = $tsCore->setPageLimit($max, false, $total); $data['pages'] = $tsCore->getPages($total, $max); $data['contadortoup'] = $total; //$data['pages'] = $tsCore->pageIndex($tsCore->settings['url']."/fotos/?",$_GET['s'],$total, $max); $query = 'SELECT f.foto_id, f.f_title, f.f_date, f.f_description, f.f_url, f.f_status, u.user_name, u.user_id, u.user_activo, u.user_baneado FROM f_fotos AS f LEFT JOIN u_miembros AS u ON u.user_id = f.f_user '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? '' : 'WHERE f.f_status = \'0\' AND u.user_activo = \'1\' && u.user_baneado = \'0\'').' ORDER BY f.foto_id DESC LIMIT '.$limit; $data['data'] = result_array(db_exec(array(__FILE__, __LINE__), 'query', $query)); return $data; }
  8. Buenas tardes, les vengo a compartir un mini mod, lo que hace es mostrar una pequeña marca cuando seleccionamos un texto dentro del contenedor de los posts asi: Para hacer esto primero descarguen los dos archivos que encuentran en esta carpeta: MEGA Luego en la carpeta de su Theme actual guardar el archivo selection-sharer.min.css, en mi caso estoy utilizando el theme default o sea que estaria aqui: Luego el archivo selection-sharer.min.js guardarlo dentro de la carpeta /js/ Ahora que tenemos los archivos necesarios para el Mod, vamos a implementarlo, abran el archivo main_header.tpl que se encuentra ubicado en themes\TU_TEMA\templates\sections\ ESTE EJEMPLO LO HICE UTILIZANDO EL THEME DEFAULT, O SEA QUE EL NUMERO DE LINEAS PUEDE VARIAR UN POCO. Cuando tengan el archivo abierto agreguen este codigo en la linea 10: {if $tsPage == 'posts' && $tsPost.post_id} <link href="{$tsConfig.tema.t_url}/selection-sharer.min.css" rel="stylesheet" type="text/css" /> {/if} Despues en la linea 36 pegan este codigo: {if $tsPage == 'posts' && $tsPost.post_id} <script src="{$tsConfig.js}/selection-sharer.min.js" type="text/javascript"></script> {/if} Y ya por ultimo para activarlo solo basta con copiar lo siguiente y pegarlo en la linea 62, dentro de la funcion $(document).ready(function(){ $('.post-contenido').selectionSharer(); Y listo, el resultado final es el siguiente Imgur, cualquier cosa házmela saber, muchas gracias
  9. [Mods] Registro V5

    Bueno amigos , aqui les quiero compartir este complemento para sus web, para el que quiera usarla o mejorarla queda a su gusto.. Anteriormente habin dejado un registro v5 , y v4 pero que no les funcionaba, Esta si esta funcional 100% , tiene algunos problemas pequeños , pero los ire solucionando a medida que los corrija ok,. COMENZAMOS. En estylo.css buscar: . help { color: white; font-family: 'Lucida Grande'; font-size: 12px; left: 310px; position: absolute; text-shadow: 0 -1px -1px black; top: 33px; width: 350px; display: none; } Y cambiarlo por: . help { color: white; font-family: 'Lucida Grande'; font-size: 12px; position: absolute; text-shadow: 0 -1px -1px black; width: 350px; display: none; margin:-43px 0 0 300px; } En su archivo extras.css agregasn al final: .copy-vell{color:#FAFAFA;transition:all 0.5s linear;-webkit-transition:all 0.5s linear;-moz-transition:all 0.5s linear;-o-transition:all 0.5s linear;} .copy-vell b:hover{color:#FF0000;cursor:pointer;}.copy-vell:hover{color:#999;} .inp-v{width:40%;box-shadow: inset 0px 0px 5px #CCC;-moz-box-shadow: inset 0px 0px 5px #CCC;-webkit-box-shadow: inset 0px 0px 5px #CCC;-o-box-shadow: inset 0px 0px 5px #CCC;border:1px solid #999;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;-o-border-radius:2px;} .tap-but{width:500px;height:60px;background:#FFF;position:absolute;float:left;margin:54px 0 0 20px;} .tap-but2{width:200px;height:40px;background:#FFF;position:absolute;float:left;margin:15px 0 0 170px;} .reg-ter{width:157px;height:45px;font-weight:bold;font-size:15px;color:#FFF;background:url('images/reg_bt.png');cursor:pointer;} .seg-ter{width:158px;float:left;margin:20px 0 0 200px;} .cuer-reg-v{height:708px;width:606px;background:#FFF;margin:2px 0 12px 12px;float:left;overflow: hidden;} .cuer-reg-v h1{font-size:24px;margin: 15px 0 0 30px;font-weight:bold;} .cuer-reg-v span{color:#FFF;margin: 5px 0 0 30px;font-size:15px;} .cuer-reg-v i{color:#919AAA;font-family: 'Lucida Grande';font-size:20px;margin-top:10px ;background:#FFF;} .hreg1{width:214px;position:absolute;margin: 15px 0 0 30px;} .hreg2{width:214px;position:absolute;margin: -16px 0 0 360px;} .hreg3{width:80px;position:absolute;left:640px;margin-top:10px;} .hreg4{width:80px;position:absolute;left:890px;margin-top:-10px;} .hreg5{width:80px;position:absolute;left:890px;margin-top:-10px;} .img-v5{padding: 8px 115px 8px 115px;background:#FFFFCB;margin-top:10px;border-bottom:1px solid #CFCE8D;} .lat-reg-v5{height:708px;width:368px;text-align:center;background:#FAFAFA;margin:2px 0 10px 0px;border-left:1px solid #EFEFEF;overflow: hidden;float:right;} .lat-reg-v5 img{margin-top:15px;} .lat-reg-v5 span{margin-top:15px;color:#9498A1;font-size:14px;font-weight:500;} .lat-reg-v5 ol {margin-left:10px;} .lat-reg-v5 ol li{display:block;font-size:15px;text-align:left;color:#A3A3A3;padding-bottom:8px;} .lat-reg-v5 h1{font-weight:bold;font-size:20px;color:#999;} .for-line-v{margin-left:40px;padding:0px 0px 15px 0;} .inp-rv{width:320px;height:30px;font-family: Arial;font-weight:bold;margin-top:4px;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px;-o-border-radius:5px;box-shadow:1px 1px 4px #999;-moz-box-shadow:1px 1px 4px #999;-webkit-box-shadow:1px 1px 4px #999;-o-box-shadow:1px 1px 4px #999;} .inp-rv:focus {background:#FFF;border:1px solid #00CCFF;font-weight:bold;} .cuer-reg-v label {font-weight:bold;} En el archivo main_header.tpl buscan: <div class="register-now"> <a style="color:#fff;" onclick="registro_load_form(); return false" title="Registrate!"><b>Registrate!</b></a> </div> y lo cambian por: {if $tsPage != 'registro'}<div class="register-now"> <a style="color:#fff;" href="{$tsConfig.url}/registro/" return false" title="Registrate!"><b>Registrate!</b></a> </div>{/if} Eso seria lo que va de forma manual simplemente xq lo demas hay que subir.. Ahora les dejo una opcion, para los que ya conocen el script en main_header.tpl para que no se vean las herramientas de usuarios, como el menu, el identificarme, el buscador, etc. cosa que en el registro V5 de !T no salen deberan encerrar a todos los accesos o includes que no quieran que se vean en el registro, claro que esto solo no se vera en el registro, despues sera de forma normal sin problemas.. Para hacerlo manual encerrar asi: {if $tsPage != 'registro'} {/if} En medio debe ir lo que no se vera.. esta claro no.. Mas alla para hacerla facil es deje el archivo listo para reemplazar simplemente ok,, Aqui los archivos.. Archivos Nuevos resubidos para la V5 de to-up Instrucciones dentro del zip http://www.mediafire.com/?1hq91k7sw70abws Espero que les sea de utilidad, y valoren los trabajos, xq siempre no falta uno que entra a criticar nadamas, A los demas Gracias por los comentarios.. Si tienen algunas dudas o inconveniente me avisan.. Recuerder regresar a ver los comentarios xq siempre surgen cosas nuevas para mejorar segurammente.. Hasta la Proxima.. PD: Lucho hay lo tenes.. XD. Perdon pero me falto aclarar que esta es para la Taringa! V5 3.0 ok.
  10. Integración de Latch [MOD]

    Por casualidad me topé con Latch, una app que permite activar o desactivar la ejecución de un proceso. En un principio elevenpaths la creó para que un usuario active o desactive la identificación o login en una web, permitiendo bloquear el acceso aunque se introduzcan correctamente el nombre de usuario y contraseña, permitiendonos desactivar la cuenta si el usuario no la está usando, pero hace poco pasó al siguiente nivel, implantandose con éxito con infinidad de usos, desde iniciar sesión en windows hasta permitir modificar un archivo del sistema, ¿flipante no?. El usuario gestiona este acceso con la app Latch que actualmente está disponible gratuitamente para android, ios y windows phone en sus respectivas stores. El proceso para el usuario no puede ser más sencillo, la idea es simular la utilización de candados con posicion de bloqueado o desbloquedo, lo que permite con solo un toque bloquear el acceso a toda nuestra vida digital, el acceso a una web, a una sección, a nuestra sesión de windows, ect las posibilidades son infinitas. Cabe destacar que si se produce una solicitud del estado de un candado y este se encuentra bloqueado, llegará una notifiación al dispositivo alertando de un posible robo de contraseña. La acción de sincronización que permite a un usuario dar de alta un candado se denomina pareado por ejemplo para habilitar el candado de acceso a la web de telefónica con nuestro latch debemos parear nuestro usuario con nuestra app. Esta acción se realiza en el sitio una vez estamos logueados introduciendo un código en la web que genera la app. Una vez estamos pareados no tendremos que introducir nunca más ningún código, esta es la gran diferencia con otras alternativas como goolge authenticator. A los desarrolladores Latch también les permite crear operaciones que no son más que subcandados, asi con un solo pareado los usuarios podrán gestionar diferentes candados para diferentes acciones, por ejemplo, se podría tener un subcandado para el login, otro para enviar mensajes privados, otro para crear un artículo, otro para editar la cuenta de usuario, ect. El proceso no es más que una comprobación del estado de un candado (on,off) con un if. El mod lo detallaré de la mejor forma posible para que podais añadir un candado en el lugar que vosotros querais. El ejemplo que vereis de crear post es funcional pero si latch bloquea la publicación no se guardarán los datos del post por lo que si el usuario se despiesta y no desbloquea el candado pierde el post y lo tendrá que volver a crear, habría que tocar el javascript para que guarde los datos. Pensar que es solo un ejemplo, pude haber cogido otro como envio de mensajes privados pero cogi ese. Haber si asi se acaban los kakeos de los que meten la clave admin de su web en el registro de otras. También podeis ponerlo en el ftp, pero la verdad es que aun no miré como sería. La instalación parece larga, pero no es tanto, lo que pasa que voy detallando algunas cosas, también es por culpa del formulario de pareado, una vez instalado el mod para agregar un nuevo candado solo sería agregar unas 6 lineas. Ahora que están explicados los términos básicos paso a la instalación del mod: Tenemos que crearnos una cuenta de desarrollador en Latch. Una vez logueados vamos a Mis aplicaciones y damos en crear nueva aplicación. Le ponemos un nombre, el nombre que le pongamos será el nombre visible por lo usuarios que lo utilicen pero se puede cambiar en cualquier momento. Una vez creada pasaremos a la página de edición de la aplicación, podremos cambiar la imagen por el logo de nuestra web entre otras opciones. También tendremos visibles los códigos "ID de aplicación" y "Secreto" que nos harán falta para configurar la api de Latch en nuestra página web. Los códigos son ligeramente diferentes si tenemos operaciones (subcandados) o no, pero lo explicaré luego porque solo es cambiar dos lineas. Para la instalación utilizaré operaciones de login y crear post, asi que en la misma ventana en la parte de abajo en "operaciones" damos en "añadir", ponemos un nombre y damos otra vez en "añadir". Se creará la operación con su id de operación que también nos hace falta. El resto de opciones como 2º factor OTP aun no lo probé. El email y teléfono no es necesario ponerlo para utilizar la aplicación. Ok, tenemos nuestra aplicación de latch creada, pero antes de salir de la web vamos a descargar los archivos necesarios. En el menú de la izquierda vamos a "plugins y SDKs" , en la parte inferior de la página en SDKs buscamos y descargamos los SDKs de php. Descomprimimos y renombramos la carpeta que contiene los archivos a "latch" (sin comillas) subimos los archivos a la raiz de la web de forma que queden latch/archivos.php Ahora creamos una tabla para guardar las ids de los usuario en la base de datos: ALTER TABLE `u_miembros` ADD `user_latch` TEXT NOT NULL Luego nos vamos a header.php y buscamos: /* * ------------------------------------------------------------------- * Agregamos los archivos globales * ------------------------------------------------------------------- */ // Contiene las variables de configuración principal include 'config.inc.php'; Debajo agregamos (se puede incluir directamente en las funciones en vez de header, pero si son varios candados no vale la pena): //Archivos api Latch include_once("latch/Latch.php"); include_once("latch/LatchResponse.php"); include_once("latch/Error.php"); Luego buscamos: // Mensajes $tsMP = new tsMensajes(); y debajo agregamos: //Credenciales API Latch $latchid = array( 'appId' => 'TU APP ID', 'secret' => 'TU CÓDIGO SECRETO', ); Si tenemos operaciones creadas también las añadimos, por ejemplo en este caso quedaría así: //Credenciales API Latch $latchid = array( 'appId' => 'TU APP ID', 'secret' => 'TU CÓDIGO SECRETO', 'opLogin' => 'ID OPERACIÓN', 'opCrearpost' => 'ID OPERACIÓN', ); El nombre de la id (columna izquierda) podeis poner el que querais por ejemplo en vez de opLogin podeis poner solo login pero debeis fijaros para poner el mismo nombre cuando necesitemes los ids. Ahora nos vamos a la funcion en la que queremos incluir la comprobación de estado. En el caso del login es diferente porque al no estar logueado tenemos que hacer la consulta con el nombre de usuario del formulario de login, una vez el usuario está logueado no la necesitaremos porque usaremos variables nativas de Risus (phpost). Nos vamos a c.user.php y buscamos: function loginUser($username, $password, $remember = FALSE, $redirectTo = NULL){ global $tsCore; Reemplazamos por: function loginUser($username, $password, $remember = FALSE, $redirectTo = NULL){ global $tsCore, $latchid; En la misma función buscamos: // CHECAMOS if($data['user_password'] != $pp_password){ return '0: Tu contraseña es incorrecta.'; } else { if($data['user_activo'] == 1){ // Actualizamos la session $this->session->update($data['user_id'], $remember, TRUE); // Cargamos la información del usuario $this->loadUser(true); // COMPROBAMOS SI TENEMOS QUE ASIGNAR MEDALLAS $this->DarMedalla(); /* REDERIGIR */ if($redirectTo != NULL) $tsCore->redirectTo($redirectTo); // REDIRIGIR else return TRUE; } else return '0: Debes activar tu cuenta'; } } Reemplazamos por: // CHECAMOS if($data['user_password'] != $pp_password){ return '0: Tu contraseña es incorrecta.'; } else { // LATCH -- OBTENEMOS LATCH ID DE LA BASE DE DATOS POR EL USER NAME DEL FORMULARIO LOGIN $query2 = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT user_latch FROM u_miembros WHERE user_name = \''.$username.'\' LIMIT 1'); $data2 = db_exec('fetch_assoc', $query2); $accountId = $data2['user_latch']; //LATCH -- SI EXISTE LATCH ID CONSULTAMOS EL ESTADO DEL CANDADO if (($accountId != -1) && ($accountId != '')){ $latchapi = new Latch($latchid['appId'], $latchid['secret']); $latchStatusResponse = $latchapi->operationStatus($accountId, $latchid['opLogin']); $statusData = $latchStatusResponse->getData()->operations; $operation = $statusData->{$latchid['opLogin']}; } //LATCH -- SI TENEMOS EL ESTADO DEL CANDADO Y SU ESTADO ES OFF PARAMOS EL LOGIN, SI NO LOGUEMAOS. if (isset($operation) && $operation->status == 'off'){ return '0: Latch bloqueó el acceso'; }else{ if($data['user_activo'] == 1){ // Actualizamos la session $this->session->update($data['user_id'], $remember, TRUE); // Cargamos la información del usuario $this->loadUser(true); // COMPROBAMOS SI TENEMOS QUE ASIGNAR MEDALLAS $this->DarMedalla(); /* REDERIGIR */ if($redirectTo != NULL) $tsCore->redirectTo($redirectTo); // REDIRIGIR else return TRUE; } else return '0: Debes activar tu cuenta'; } } } Si no tuvieramos operaciones habría que reemplazar en el código anterior: $latchStatusResponse = $latchapi->status($accountId, $latchid['opLogin']); por: $latchStatusResponse = $latchapi->status($accountId); y: $operation = $statusData->{$latchid['opLogin']}; por: $operation = $statusData->{$latchid['appId']}; Esto solo sería válido si el login se realiza con el nombre de usuario, si estuviera el mod de login con correo electrónico activado habria que cambiar la consulta, pero no lo miré. Ahora vamos a poner poner otra comprobación al crear un tema nuevo como ejemplo para que podais añadir una operación en donde querais. En c.post.php buscamos: function newPost(){ global $tsCore, $tsUser, $tsMonitor, $tsActividad; Reemplazamos por: function newPost(){ global $tsCore, $tsUser, $tsMonitor, $tsActividad, $latchid; más abajo en la misma función 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, post_body, post_date, post_tags, post_ip, post_private, post_block_comments, post_sponsored, post_sticky, post_smileys, post_visitantes, post_status) VALUES (\''.$tsUser->uid.'\', \''.(int)$postData['category'].'\', \''.$postData['title'].'\', \''.$postData['body'].'\', \''.$postData['date'].'\', \''.$postData['tags'].'\', \''.$_SERVER['REMOTE_ADDR'].'\', \''.(int)$postData['private'].'\', \''.(int)$postData['block_comments'].'\', \''.(int)$postData['sponsored'].'\', \''.(int)$postData['sticky'].'\', \''.(int)$postData['smileys'].'\', \''.(int)$postData['visitantes'].'\', '.(!$tsUser->is_admod && ($tsCore->settings['c_desapprove_post'] == 1 || $tsUser->permisos['gorpap'] == true) ? '\'3\'' : '\'0\'').')')) { $postID = db_exec('insert_id'); // Si está oculto, lo creamos en el historial e.e if(!$tsUser->is_admod && ($tsCore->settings['c_desapprove_post'] == 1 || $tsUser->permisos['gorpap'] == true)) db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `w_historial` (`pofid`, `action`, `type`, `mod`, `reason`, `date`, `mod_ip`) VALUES (\''.(int)$postID.'\', \'3\', \'1\', \''.$tsUser->uid.'\', \'Revisión al publicar\', \''.time().'\', \''.$_SERVER['REMOTE_ADDR'].'\')'); $time = time(); // ESTADÍSTICAS db_exec(array(__FILE__, __LINE__), 'query', 'UPDATE `w_stats` SET `stats_posts` = stats_posts + \'1\' WHERE `stats_no` = \'1\''); // ULTIMO POST db_exec(array(__FILE__, __LINE__), 'query', 'UPDATE u_miembros SET user_lastpost = \''.$time.'\' WHERE user_id = \''.$tsUser->uid.'\''); // AGREGAR AL MONITOR DE LOS USUARIOS QUE ME SIGUEN $tsMonitor->setFollowNotificacion(5, 1, $tsUser->uid, $postID); // REGISTRAR MI ACTIVIDAD $tsActividad->setActividad(1, $postID); // SUBIR DE RANGO? $this->subirRango($tsUser->uid); // return $postID; } else return show_error('Error al ejecutar la consulta de la línea '.__LINE__.' de '.__FILE__.'.', 'db'); y reemplazamos por: // 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.'); } // LATCH -- OBTENEMOS ID USUARIO $accountId = $tsUser->info['user_latch']; //LATCH -- SI EXISTE LATCH ID CONSULTAMOS EL ESTADO DEL CANDADO if (($accountId != -1) && ($accountId != '')){ $latchapi = new Latch($latchid['appId'], $latchid['secret']); $latchStatusResponse = $latchapi->operationStatus($accountId, $latchid['opCrearpost']); $statusData = $latchStatusResponse->getData()->operations; $operation = $statusData->{$latchid['opCrearpost']}; } //LATCH -- SI TENEMOS EL ESTADO DEL CANDADO Y SU ESTADO ES OFF DEVOLVEMOS MENSAJE DE ERROR, SI NO CREAMOS POST. if (isset($operation) && $operation->status == 'off'){ return 'Latch bloqueó la creación del post'; }else{ if(db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `p_posts` (post_user, post_category, post_title, post_body, post_date, post_tags, post_ip, post_private, post_block_comments, post_sponsored, post_sticky, post_smileys, post_visitantes, post_status) VALUES (\''.$tsUser->uid.'\', \''.(int)$postData['category'].'\', \''.$postData['title'].'\', \''.$postData['body'].'\', \''.$postData['date'].'\', \''.$postData['tags'].'\', \''.$_SERVER['REMOTE_ADDR'].'\', \''.(int)$postData['private'].'\', \''.(int)$postData['block_comments'].'\', \''.(int)$postData['sponsored'].'\', \''.(int)$postData['sticky'].'\', \''.(int)$postData['smileys'].'\', \''.(int)$postData['visitantes'].'\', '.(!$tsUser->is_admod && ($tsCore->settings['c_desapprove_post'] == 1 || $tsUser->permisos['gorpap'] == true) ? '\'3\'' : '\'0\'').')')) { $postID = db_exec('insert_id'); // Si está oculto, lo creamos en el historial e.e if(!$tsUser->is_admod && ($tsCore->settings['c_desapprove_post'] == 1 || $tsUser->permisos['gorpap'] == true)) db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `w_historial` (`pofid`, `action`, `type`, `mod`, `reason`, `date`, `mod_ip`) VALUES (\''.(int)$postID.'\', \'3\', \'1\', \''.$tsUser->uid.'\', \'Revisión al publicar\', \''.time().'\', \''.$_SERVER['REMOTE_ADDR'].'\')'); $time = time(); // ESTADÍSTICAS db_exec(array(__FILE__, __LINE__), 'query', 'UPDATE `w_stats` SET `stats_posts` = stats_posts + \'1\' WHERE `stats_no` = \'1\''); // ULTIMO POST db_exec(array(__FILE__, __LINE__), 'query', 'UPDATE u_miembros SET user_lastpost = \''.$time.'\' WHERE user_id = \''.$tsUser->uid.'\''); // AGREGAR AL MONITOR DE LOS USUARIOS QUE ME SIGUEN $tsMonitor->setFollowNotificacion(5, 1, $tsUser->uid, $postID); // REGISTRAR MI ACTIVIDAD $tsActividad->setActividad(1, $postID); // SUBIR DE RANGO? $this->subirRango($tsUser->uid); // return $postID; } else return show_error('Error al ejecutar la consulta de la línea '.__LINE__.' de '.__FILE__.'.', 'db'); Ahora vamos a crear la opción de pareado y despareado. Decidí ponerla en privacidad por comodidad y hacerla por ajax para retornar con un bonito efecto si el pareado o despareado se realizo correctamente, esto implica modificar un par de archivos más pero vale la pena. En cuenta.php buscamos: } elseif($action == 'save'){ echo $tsCore->setJSON($tsCuenta->savePerfil()); debajo agregamos: } elseif($action == 'parear_latch'){ echo $tsCuenta->parear_latch(); } elseif($action == 'desparear_latch'){ echo $tsCuenta->desparear_latch(); En c.cuenta.php buscamos la funcion yFollow: /* yFollow() */ function yFollow($user_id){ global $tsUser; // YO LE SIGO? $query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT follow_id FROM u_follows WHERE f_id = \''.(int)$tsUser->uid.'\' AND f_user = \''.(int)$user_id.'\' AND f_type = \'1\' LIMIT 1'); $data = db_exec('num_rows', $query); // return ($data > 0) ? true : false; } y despues agregamos: /* parear latch */ function parear_latch(){ global $tsCore, $tsUser, $latchid; $dato = array( 'codigo' => $tsCore->setSecure($_POST['codigo']), ); // Obligatorio foreach($dato as $key => $val){ $val = trim(preg_replace('/[^ A-Za-z0-9]/', '', $val)); $val = str_replace(' ', '', $val); if(empty($val)) return '2: Completa los campos obligatorios.'; } //get pairing code from user $latchPairingCode = isset($dato['codigo']) ? $dato['codigo'] : ''; //New api instance and pairing $latchapi = new Latch($latchid['appId'], $latchid['secret']); $latchPairResponse = $latchapi->pair($latchPairingCode); $latchResponseData = $latchPairResponse->getData(); $accountId = isset($latchResponseData->accountId) ? $latchResponseData->accountId : ''; //Comprobamos y guardamos id if ($accountId != '' && (db_exec(array(__FILE__, __LINE__), 'query', 'UPDATE u_miembros SET user_latch = \''.$accountId.'\' WHERE user_id = \''.$tsUser->uid.'\''))){ return '1: Pareado correctamente'; }else return '0: Ocurrio un error al parear la cuenta'; } /* Desparear latch */ function desparear_latch(){ global $tsUser, $latchid; $accountId = $tsUser->info['user_latch']; $latchapi = new Latch($latchid['appId'], $latchid['secret']); if (($accountId != -1) && ($accountId != '')){ $unpairResponse = $latchapi->unpair($accountId); $unpairResponseData = $unpairResponse->getData(); if (db_exec(array(__FILE__, __LINE__), 'query', 'UPDATE u_miembros SET user_latch = "" WHERE user_id = \''.$tsUser->uid.'\'')){ return '1: Despareado correctamente';} }else return '0: Ocurrio un problema al desparear la cuenta'; } Ahora vamos a m.cuenta_config.tlp y buscamos: </fieldset> y antes agregamos: <div class="field"> <label>Latch</label> <div class="input-fake"> {if $tsUser->info.user_latch} <div style=" width:310px;"><p>Tu cuenta ahora está pareada con Latch. Si quieres dejar de usar Latch con tu cuenta, haz clic en el botón Desparear Latch.</p></div> <a href="#" class="mBtn btnOk" onclick="latch.desparear(); return false;" title="Desparear latch">Desparear Latch</a> {else} <div style=" width:300px;"><p>Latch es un servicio que te permite agregar un nivel extra de seguridad a tus cuentas y servicios online. Con un solo toque puedes bloquear tus cuentas cuando no las estés utilizando. Para saber más, entra en <a href="https://latch.elevenpaths.com" target="_blank">la web de Latch</a>.</p> <p>Para parear tu cuenta con Latch, descárgate la app de Latch en tu smartphone y sigue las instrucciones. Cuando termines, clica en Parear con latch e introduce el código de pareado.</p> </div> <a href="#" class="mBtn btnOk" onclick="latch.form(); return false;" title="Parear con latch">Parear con latch</a> {/if} </div> </div> Por último en cuenta.js buscamos: /* isImageFile(filename) */ y antes agregamos: var latch = { form: function() { var html = '<input type="text" placeholder="Código de pareado" id="codigo" size="60" class="require" /></br>'; mydialog.class_aux = 'RLatch'; mydialog.mask_close = false; mydialog.close_button = true; mydialog.show(true); mydialog.title('Parear con Latch'); mydialog.body(html); mydialog.buttons(true, true, 'Aceptar', 'latch.verify()', true, true, true, 'Cancelar', 'close', true, false); mydialog.center(); }, verify: function() { var cont = false; $('.require').each(function(){ if($(this).val() == '' || $(this).val() == 0 || $(this).length == 0) { $(this).focus(); cont = false; return false; } else { cont = true; } }); if(cont) latch.parear(); else return false; }, parear: function() { mydialog.procesando_inicio(); var codigo = $('.RLatch #codigo').val(); $.ajax({ type: 'POST', url: global_data.url + '/cuenta.php?action=parear_latch&ajax=true', data: 'codigo='+codigo, success: function(h){ if(h.charAt(0) == '0') { mydialog.alert('Error', h.substring(3)); } else if(h.charAt(0) == '1') { mydialog.alert('Exito', h.substring(3)); } else if(h.charAt(0) == '2') { alert('Completa los datos obligatorios.'); } else { mydialog.alert('Error', h); } mydialog.procesando_fin(); } }); }, desparear: function() { mydialog.procesando_inicio(); var codigo = $('.RLatch #codigo').val(); $.ajax({ type: 'POST', url: global_data.url + '/cuenta.php?action=desparear_latch&ajax=true', data: 'codigo='+codigo, success: function(h){ if(h.charAt(0) == '0') { mydialog.alert('Error', h.substring(3)); } else if(h.charAt(0) == '1') { mydialog.alert('Exito', h.substring(3)); } else { mydialog.alert('Error', h); } mydialog.procesando_fin(); } }); }, } Eso sería todo, debo decir que las cuentas gratuitas de latch community solo permiten hasta un máximo de 50 pareados simultaneos por api, lo que en este tipo de webs es muy poco, si quereis más hay de pagar, sin embargo si eres una pyme española podrás tener Latch de forma totalmente gratuita y con la consola de acceso LST. Aunque no seas pyme y no quieras pagar el uso de Latch podría ser interesante para las cuentas de staff que son las que tienen un control avanzado de la web. Si quereis ponerlo solo para el staff debeis configurar los if para que compruebe que sois admon (administradores o moderadores) en los php y en el tpl para ocultar el formulario de pareado. No hay demo porque las cuentas gratuitas solo permiten 50 usuarios pero hice un video de demostración para que veais el funcionamiento del mod. Eso es todo. Solo me falta dar las gracias al Doctor Chema Alonso, unos de los mayores hacker del mundo por compartir el mod en su blog. Si veis algún error comentarlo y lo solucionaré lo antes posible o si veis alguna forma mejor de implementarlo también sería interesante estudiarla. Espero que os sirva de ayuda. Un saludo.
  11. Todos los derechos reservados para Kmario19 Creador de este MOD (Post AQUI)yo solo lo e modificado para la version 1.2 a la vista que nadien lo a echo, bueno comensamos: a c.posts.php y arriba de: /* getCatData() :: OBTENER DATOS DE UNA CATEGORIA */agregar: /* Acortador de url para posts by kmario19 */ function postAcortador() { global $tsUser, $tsCore; $pid = (int)$_GET['p']; $query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT p.post_user, p.post_category, p.post_title, u.user_name, c.c_nombre, c.c_seo FROM p_posts AS p LEFT JOIN u_miembros AS u ON p.post_user = u.user_id LEFT JOIN p_categorias AS c ON c.cid = p.post_category WHERE p.post_id = \''.$pid.'\' AND p.post_status = \'0\' '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? '' : 'AND u.user_activo = \'1\' && u.user_baneado = \'0\'').'') or exit(show_error('Error al ejecutar la consulta de la l&iacute;nea '.__LINE__.' de '.__FILE__.'.', 'db')); if(!db_exec('num_rows', $query)){ die('Serooo'); $tsCore->redirectTo($tsCore->settings['url'].'/posts/'); die; } $q = db_exec('fetch_assoc', $query); $tsCore->redirectTo($tsCore->settings['url'].'/posts/'.$q['c_seo'].'/'.$pid.'/'.$tsCore->setSEO($q['post_title']).'.html'); }Ahora en posts.php debajo de: // Post anterior/siguiente if($_GET['action'] == 'next' || $_GET['action'] == 'prev'|| $_GET['action'] == 'fortuitae') { $tsPosts->setNP(); }Agregar: //Acortador de url para posts by Kmario19 if($_GET['p']) { $tsPosts->postAcortador(); }Ahora abrimos .htaccess que esta en la raíz de nuestro sitio y debajo de: RewriteRule ^posts/$ index.php?do=posts [QSA,L]Agregar: RewriteRule ^p/([0-9]+)$ index.php?do=posts&p=$1 [QSA,L]y listo eso es todo http://tuweb.com/p/id del post
  12. (mod) Juegos Hades

    Hola amigos , les dejo este MOD de juegos que cree para todos ustedes ,el mismo esta en dos versiones: la 1ra para el tema default y la 2da para el tema v5 3.0 de gonzalogranate (mi tema preferido) , espero les guste *** Bueno les cuento un poco que tiene este mod : ********************************************** 1) tienen la pestaña de juegos 2) también paginador (por el momento 2 paginas) 3) en cada una de las paginas tiene el me gusta de facebook al igual que en cada uno de los juegos 4)y el bloque de juegos populares en la home...(CREDITOS A SUS CREADORES) 5) " NO LE E PUESTO NINGÚN COPY ESTA 100 % LIMPIO " "Les comento que habrá una v2 de este mod con mejoras en diseño , mas juegos y mas ??? " INSTALACION : ************* Bueno les dejo dos rar uno para tema default y otro para v5 3.0 , dentro del rar se encuentran las instrucciones para su instalación y los archivos a subir ..... DESCARGA PARA DEFAULT :http://www.mediafire.com/?hjc3pjavzvamevh DESCARGA PARA V5 3.0: http://www.mediafire.com/?a6okfarpm48aubp CAPTURAS: ********** MAS CAPTURAS : ************************* http://i.imgur.com/mp4Rbus.jpg http://i.imgur.com/nlGqMLf.jpg http://i.imgur.com/KJ3IAGI.jpg http://i.imgur.com/VoYsRQY.jpg http://i.imgur.com/L1P7Ru5.jpg DEMO DEFAULT : http://mundijuego.com.ar/ DEMO V5 GONZA:http://www.tatingo.com.ar/ Bueno amigos en cuanto pueda publicare una version mas linda y completa de este mod , saludos para todos **********HADES**********
  13. Bueno aqui a pedido de Lucho les dejo las filtraciones de las Actividades de los Videos. Nececitan tener el Mods de videos Obviamente.. Y el mods de !T al minuto V3 EN el archivo envivo.php buscamos: //Filtraciones de las Comunidades $smarty->assign("tsComu_v",$tsEnvivo->act_comuv()); $smarty->assign("tsComut_v",$tsEnvivo->act_comtv()); $smarty->assign("tsComur_v",$tsEnvivo->act_comrv()); $smarty->assign("tsSegcom_v",$tsEnvivo->act_segcomv()); $smarty->assign("tsVotcom_v",$tsEnvivo->act_votcom()); $smarty->assign("tsUncom_v",$tsEnvivo->act_uncom()); Y agregamos despues: //Filtraciones para los Videos $smarty->assign("tsComvi_v",$tsEnvivo->act_comvi()); $smarty->assign("tsVotvi_v",$tsEnvivo->act_votvi()); $smarty->assign("tsCrevi_v",$tsEnvivo->act_crevi()); EN el archivo c.envivo.php buscamos al final } Y agregamos Antes: /* Actividades Comentarios en los videos*/ function act_comvi(){ global $tsCore, $tsUser; $query = mysql_query("SELECT * FROM v_comentarios AS c JOIN u_miembros AS u ON c.c_user = u.user_id LEFT JOIN v_videos AS v ON v.vid_id = c.c_vid_id JOIN u_rangos AS r ON r.rango_id = u.user_rango WHERE v.vid_status = 0 ORDER BY c.cid DESC LIMIT 20"); $data = result_array($query); // return $data; } /* Actividades Votos en los videos*/ function act_votvi(){ global $tsCore, $tsUser; $query = mysql_query("SELECT * FROM v_votos AS vt JOIN u_miembros AS u ON vt.v_user = u.user_id LEFT JOIN v_videos AS v ON v.vid_id = vt.v_vid_id JOIN u_rangos AS r ON r.rango_id = u.user_rango WHERE v.vid_status = 0 ORDER BY vt.vid DESC LIMIT 20"); $data = result_array($query); // return $data; } /* Actividades videos Creados*/ function act_crevi(){ global $tsCore, $tsUser; $query = mysql_query("SELECT * FROM v_videos AS v JOIN u_miembros AS u ON v.vid_user = u.user_id LEFT JOIN u_rangos AS r ON r.rango_id = u.user_rango WHERE v.vid_status = 0 ORDER BY v.vid_id DESC LIMIT 20"); $data = result_array($query); // return $data; } EN el archivo extras.css o donde estaba los estilos de este Mods reemplazamos por: #v-al{width:1000px;height:1000px;background:#FFF;padding:0px;overflow: hidden; margin:15px 0 0 10px;} .content-v{width:720px;height:1000px;background:transparent;float:left;} .content-v h1{font-weight:bold;font-size:23px;font-family: Georgia;margin-bottom:3px;} .content-v ul{background:#d6dee8;border-bottom: 1px solid #576b86;} .content-v ul li{display:inline-block;padding:8px;color:#576b86;text-transform: uppercase;font-weight:600;font-size:12px;font-family: Arial;} .content-l{background:#FFF;width:280px;height:1000px;overflow: hidden; float:right;} .content-l h3{font-weight:600;font-size:16px;margin-left:18px;margin-top:-4px;} .content-l h1{font-weight:600;font-size:18px;margin-left:18px;margin-top:7px;} .content-l ul{margin-left:20px;} .content-l ul li{display:block;padding:3px 0 3px 0;width:240px;color:#9698A5;cursor:pointer;border-bottom:1px solid #F8F8F8;transition:all 0.5s linear;-webkit-transition:all 0.5s linear;-moz-transition:all 0.5s linear;-o-transition:all 0.5s linear;} .content-l ul li:hover{background:#EEE;} .v-us{float:left;} .v-ti{margin-left:130px;} .v-ac{margin-left:40px;} .v-marque{height:880px;background:#EEE;} .v-marque ol li{width:100%;height:20px;background:#EEE;display:block;color:#788188;font-weight:600;} .hr-v-m{height:1px;background:#CCC;box-shadow:2px 2px 2px #FFF;} .v-us-mar{width:100px;margin-left:8px} .v-acc-mar{width:190px;margin-left:110px;margin-top:-18px;font-weight:bold;color:#666;} .v-tit-mar{width:410px;margin-left:300px;margin-top:-18px;} .v-tit-mar a{text-decoration:none;color:#788188;font-weight:600;} .wiroos-v{position:absolute;margin-left:539px;margin-top:-38px;} .check-v{margin-left:10px;} .content-l span{margin-left:3px;} .coun-vellenger{float:right;margin-right:30px;margin-top:-25px;} .permisos-v{font-weight:bold;font-size:20px; text-align:center;} Subimos el archivo envivo.tpl a la carpeta modules/ http://www.mediafire.com/?6e4vy3fmcoc4vxn ( Dejo los pasos en un txt para el que quieran ) Eso seria Todo.. para la proxima el registro v5
  14. Comunidades v5 Titan / To-up

    Comunidades v5 Titan / To-up Bueno Amigos.. aqui les quiero dejar para los que les interese las comunidades para el theme mencionado.. No vi que lo dejaron, pero vi que lo pidieron.. Aqui se las adapte.. Aclaro tiene el formato de la default.. Me resulto mejor su estilo.. Instalacion: Aqui suben los archivos. Aqui les dejo los archivos de las comus Completos.. Los que ya la tenian solo reemplazen la carpeta "comunidades" Y suban el archivo comusv5.css http://www.mediafire.com/?vccjg7t2i5vxa2x En el archivo main_header.tpl buscan: <link href="{$tsConfig.tema.t_url}/phpost.css" rel="stylesheet" type="text/css" /> Y lo cambian por: {if $tsPage == 'comunidades'} <link href="{$tsConfig.tema.t_url}/comusv5.css" rel="stylesheet" type="text/css" /> {else} <link href="{$tsConfig.tema.t_url}/phpost.css" rel="stylesheet" type="text/css" /> {/if} Eso seria todo.. Aqui algunas tomas para ver como les queda.. Espero que les sea Util.. SI tienen problemas me avisan que les respondere con gusto ok.. Adios Comus-v5.zip
  15. Previsualizar foto al cargar desde pc

    Hola a todos este mod es para previsualizar una foto al cargarla desde la pc (para quienes tengan activada la opcion de carga externa) y que al cargarla nos quede algo como esto Para hacerlo nos vamos a m.fotos_agregar_from.tpl que esta en templates/modules y buscamos {if $tsConfig.c_allow_upload == 1} <li> <label for="ffile">Archivo</label> <input type="file" name="file" id="ffile" /> </li> {else} Reemplazamos por {if $tsConfig.c_allow_upload == 1} <script src="{$tsConfig.js}/image-loader.min.js"></script> <script src="{$tsConfig.js}/init.js"></script> <li> <label for="ffile">Archivo</label> <input type="file" name="file" id="ffile" class="fajl" /> <div align="center" class="pass" style="max-height: 350px;background: white;border: 1px solid #D2D5D9;border-radius: 3px;box-shadow: 0 1px 0 rgba(113, 117, 129, 0.2), rgba(190, 190, 190, 0.62) 0 0 5px;padding: 5px;margin-top: 10px;"></div> </li> {else} subimos estos tres archivos a la carpeta js de tu tema - image-loader.min.js - init.js - jquery.min.js Descargar Recuerdo que solo funciona si está activada la carga externa, no funcionará desde una url, espero que les haya gustado, nos vemos en otro mod
  16. Bueno gente de Phpost aqui hice un mds , Personalmente lo tenia en una web basada en peliculas que le venia de 10 el mods.. Lo hice en el theme defaul ya que no todos tendrian el estyl de la web en la que tenia .. Se las dejo y el que la quiera Mdificar y darle mas estylo y personalizarlo pueden hacerlo . o me escriven y se las adapto mejor.. Este mods consta de ( 3 ) Categorias principales.. EN mi caso las tenia para Enfatizar los temas mas buscados.. Todos seguramente tienen unas categrias que son mas buscadas y que mejor que ponerlas en una ubicacion preferencial.. COMENZAMOS (Para los que lo quieran hacerlo Manual por tener otros Mods las lineas agregadas a reemplazar son c_cat, c_opc ) En c.admin.php buscamos: 'newr' => empty($_POST['newr']) ? 0 : 1); Y agregamos Arriba: 'cata' => $tsCore->setSecure($tsCore->parseBadWords($_POST['cata'])), 'catb' => $tsCore->setSecure($tsCore->parseBadWords($_POST['catb'])), 'catc' => $tsCore->setSecure($tsCore->parseBadWords($_POST['catc'])), 'ccant' => $tsCore->setSecure($tsCore->parseBadWords($_POST['ccant'])), Despues buscamos : $c['offline_message'] Y agregamos al Lado: . '\', `cata` = \'' . $c['cata'] . '\', `catb` = \'' . $c['catb']. '\', `catc` = \'' . $c['catc'] .'\', `ccant` = \'' . $c['ccant'] Mas abajo buscamos: $query = mysql_query('SELECT cid, c_orden, c_nombre, c_seo, c_img FROM p_categorias WHERE cid = \'' . Y lo cambiamos por: $query = mysql_query('SELECT cid, c_orden, c_nombre, c_seo, c_img, c_cat, c_opc FROM p_categorias WHERE cid = \'' . Mas abajo buscamos: function saveCat() { global $tsCore; // //$db = $this->getDBtypes(); $cid = $tsCore->setSecure($_GET['cid']); // $c_nombre = $tsCore->setSecure($tsCore->parseBadWords($_POST['c_nombre'])); $cimg = $tsCore->setSecure($tsCore->parseBadWords($_POST['c_img'])); if (mysql_query('UPDATE `p_categorias` SET c_nombre = \'' . $tsCore->setSecure($c_nombre) . '\', c_seo = \'' . $tsCore->setSecure($tsCore->setSEO($c_nombre, true)) . '\', c_img = \'' . $tsCore->setSecure($cimg) . '\' WHERE cid = \'' . (int)$cid . '\'')) return true; } Y lo cambiamos por: function saveCat() { global $tsCore; // //$db = $this->getDBtypes(); $cid = $tsCore->setSecure($_GET['cid']); // $c_nombre = $tsCore->setSecure($tsCore->parseBadWords($_POST['c_nombre'])); $cimg = $tsCore->setSecure($tsCore->parseBadWords($_POST['c_img'])); $c_opc = $tsCore->setSecure($tsCore->parseBadWords($_POST['c_opc'] == 'n') ? 0 : 1); $c_cat = $tsCore->setSecure($tsCore->parseBadWords($_POST['c_cat'])); if (mysql_query('UPDATE `p_categorias` SET c_nombre = \'' . $tsCore->setSecure($c_nombre) . '\', c_seo = \'' . $tsCore->setSecure($tsCore->setSEO($c_nombre, true)) . '\', c_img = \'' . $tsCore->setSecure($cimg) . '\', c_opc = \'' .$tsCore->setSecure($c_opc) .'\',c_cat = \'' . $tsCore->setSecure($c_cat).'\' WHERE cid = \'' . (int)$cid . '\'')) return true; } Buscamos mas abajo: function newCat() { global $tsCore; // //$db = $this->getDBtypes(); // VALORES $c_nombre = $tsCore->setSecure($tsCore->parseBadWords($_POST['c_nombre'])); $cimg = $tsCore->setSecure($tsCore->parseBadWords($_POST['c_img'])); // ORDEN $query = mysql_query('SELECT COUNT(cid) AS total FROM `p_categorias`'); $orden = mysql_fetch_assoc($query); $orden = $orden['total'] + 1; // INSERTS if (mysql_query('INSERT INTO `p_categorias` (`c_orden`, `c_nombre`, `c_seo`, `c_img`) VALUES (\'' . $orden . '\', \'' . $c_nombre . '\',\'' . $tsCore->setSEO($c_nombre, true) . '\', \'' . $cimg . '\')')) return true; } Y lo cambiamos por: function newCat() { global $tsCore; // //$db = $this->getDBtypes(); // VALORES $c_nombre = $tsCore->setSecure($tsCore->parseBadWords($_POST['c_nombre'])); $cimg = $tsCore->setSecure($tsCore->parseBadWords($_POST['c_img'])); $c_opc = $tsCore->setSecure($tsCore->parseBadWords($_POST['c_opc'] == 'n') ? 0 : 1); $c_cat = $tsCore->setSecure($tsCore->parseBadWords($_POST['c_cat'])); // ORDEN $query = mysql_query('SELECT COUNT(cid) AS total FROM `p_categorias`'); $orden = mysql_fetch_assoc($query); $orden = $orden['total'] + 1; // INSERTS if (mysql_query('INSERT INTO `p_categorias` (`c_orden`, `c_nombre`, `c_seo`, `c_img`, `c_opc`, `c_cat`) VALUES (\'' . $orden . '\', \'' . $c_nombre . '\',\'' . $tsCore->setSEO($c_nombre, true) . '\', \'' . $cimg . '\', \'' .$c_opc . '\', \'' .$c_cat . '\')')) return true; } En c.posts.php buscamos: $query = mysql_query('SELECT p.post_id, p.post_user, p.post_category, p.post_title, p.post_date, u.user_name, c.c_seo, c.c_nombre, c.c_img FROM p_posts AS p LEFT JOIN u_miembros AS u ON u.user_id = p.post_user LEFT JOIN p_categorias AS c ON c.cid = p.post_category WHERE p.post_status = \'0\' '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? '' : 'AND u.user_activo = \'1\' && u.user_baneado = \'0\'').' AND MATCH(p.post_title) AGAINST('.$q.' IN BOOLEAN MODE) ORDER BY RAND() DESC LIMIT 5'); Y lo cambiamos por: $query = mysql_query('SELECT p.post_id, p.post_user, p.post_category, p.post_title, p.post_date, u.user_name, c.c_seo, c.c_nombre, c.c_img, c.c_opc, c.c_cat FROM p_posts AS p LEFT JOIN u_miembros AS u ON u.user_id = p.post_user LEFT JOIN p_categorias AS c ON c.cid = p.post_category WHERE p.post_status = \'0\' '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? '' : 'AND u.user_activo = \'1\' && u.user_baneado = \'0\'').' AND MATCH(p.post_title) AGAINST('.$q.' IN BOOLEAN MODE) ORDER BY RAND() DESC LIMIT 5'); Buscamos: $query = 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\'').' '.$c_where.' '.$s_where.' GROUP BY p.post_id ORDER BY '.$s_order.' DESC LIMIT '.$start); Y lo cambiamos por: $query = 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, c.c_opc, c.c_cat 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); Buscamos: $query = mysql_query('SELECT c.c_nombre, c.c_seo FROM p_categorias AS c WHERE c.cid = \''.$postData['post_category'].'\''); Y lo cambiamos por: $query = mysql_query('SELECT c.c_nombre, c.c_seo, c.c_opc, c.c_cat FROM p_categorias AS c WHERE c.cid = \''.$postData['post_category'].'\''); En el archivo m.home_last_post.tpl buscamos: {foreach from=$tsPosts item=p} Y agregamos abajo: {if $p.c_cat ==0 || $p.c_cat == 4 & $p.c_opc ==0} Mas abajo buscamos : {/foreach} y agregamos arriba: {/if} En el archivo t.home.tpl despues de {include file='sections/main_header.tpl'} agregamos: {if $tsPage == 'home' || $tsPage == 'portal'} {include file='modules/m.cat_principal.tpl'} {/if} En el archivo m.admin_cats.tpl buscamos: <p><input type="submit" name="save" value="Guardar cambios" class="btn_g"/ ></p> Y Agregamos Arriba: <hr> <dl> <dt><label for="cat_opc">Usar categoría principal:</label><br /><span>Seleccione si sesea usar como categoría principal</span><br/> (A-B-C)</dt> <label><input type="radio" value="s" name="c_opc" class="radio cuenta-save-1" {if $tsCat.c_opc == '1'}checked="checked"{/if}/><b>Sí</b></label> <label><input type="radio" value="n" name="c_opc" class="radio cuenta-save-1" {if $tsCat.c_opc == '0'}checked="checked"{/if}/><b>No</b></label> <br/> </dl> <dl> <dt><label for="c_cat">Tipo de categoría:</label><br /><span>Categoría <b>D</b> se reserva como Default - Si le asigna como <b>categoría Principal</b> No se vera en la Home</span></dt> <dd> <select style="width:40px;font-weight:bold;"id="dia" name="c_cat" tabindex="5" onblur="registro.blur(this)" onfocus="registro.focus(this)" autocomplete="off" title="Ingrese categoría"> <option value="0"{if $tsCat.c_cat == 0} selected{/if}></option> <option value="1"{if $tsCat.c_cat == 1} selected{/if}>A</option> <option value="2"{if $tsCat.c_cat == 2} selected{/if}>B</option> <option value="3"{if $tsCat.c_cat == 3} selected{/if}>C</option> <option value="4"{if $tsCat.c_cat == 4} selected{/if}>D</option> </select> </dd> </dl> Buscamos: <p><input type="submit" name="save" value="Crear Categoría" class="btn_g"/></p> Y agregamos Arriba: <hr> <dl> <dt><label for="cat_opc">Usar categoría principal:</label><br /><span>Seleccione si sesea usar como categoría principal</span><br/> (A-B-C)</dt> <label><input type="radio" value="s" name="c_opc" class="radio cuenta-save-1" {if $tsCat.c_opc == '1'}checked="checked"{/if}/><b>Sí</b></label> <label><input type="radio" value="n" name="c_opc" class="radio cuenta-save-1" {if $tsCat.c_opc == '0'}checked="checked"{/if}/><b>No</b></label> <br/> </dl> <dl> <dt><label for="c_cat">Tipo de categoría:</label><br /><span>Categoría <b>D</b> se reserva como Default - Si le asigna como <b>categoría Principal</b> No se vera en la Home</span></dt> <dd> <select style="width:40px;font-weight:bold;"id="dia" name="c_cat" tabindex="5" onblur="registro.blur(this)" onfocus="registro.focus(this)" autocomplete="off" title="Ingrese categoría"> <option value="0"{if $tsCat.c_cat == 0} selected{/if}></option> <option value="1"{if $tsCat.c_cat == 1} selected{/if}>A</option> <option value="2"{if $tsCat.c_cat == 2} selected{/if}>B</option> <option value="3"{if $tsCat.c_cat == 3} selected{/if}>C</option> <option value="4"{if $tsCat.c_cat == 4} selected{/if}>D</option> </select> </dd> </dl> En el archivo m.admin_configs.tpl buscamos: <dl> <dt><label for="ai_offline">Modo mantenimiento:</label><br /><span>Esto hará al Sitio inaccesible a los usuarios. Si quiere, también puede introducir un breve mensaje (255 caracteres) para mostrar.</span></dt> <dd> <label><input name="offline" type="radio" id="ai_offline" value="1" {if $tsConfig.offline == 1}checked="checked"{/if} class="radio"/> Sí</label> <label><input name="offline" type="radio" id="ai_offline" value="0" {if $tsConfig.offline != 1}checked="checked"{/if} class="radio"/> No</label> <br /> <input type="text" name="offline_message" id="ai_offline" value="{$tsConfig.offline_message}" /> </dd> </dl> Y agregamos Abajo: <hr> <dl> <dt><label for="ai_titulo">Categorias Principales:</label><br /><span>Elige los nombres para las tres <i><b>Categorias</b></i> principales que se veran en la home.<br/> Categoria <b>A - B - C</b></span></dt> <dd><b>A:</b> <input type="text" id="cata" name="cata" maxlength="22" value="{$tsConfig.cata}" /></dd> <br class="space"/> <dd><b>B:</b> <input type="text" id="catb" name="catb" maxlength="24" value="{$tsConfig.catb}" /></dd> <br class="space"/> <dd><b>C:</b> <input type="text" id="catc" name="catc" maxlength="24" value="{$tsConfig.catc}" /></dd> </dl> <dl> <dt><label for="ccant">Cantidad de post:</label><br /><span>Ingrese la cantidad de posts que desea mostrar en las categorías</span></dt> <dd><input type="text" id="ccant" name="ccant" style="width:10%" maxlength="3" value="{$tsConfig.ccant}" /></dd> </dl> <hr> En el archivo head_menu.tpl buscamos: <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 agregamos abajo: <li class="tabbed {if $tsPage == 'principal'}here{/if}" id="tabbedtops"> <a title="Ir a Principal" onclick="menu('principal', this.href); return false;" href="{$tsConfig.url}/principal/">Principal <img alt="Drop Down" src="{$tsConfig.tema.t_url}/images/arrowdown.png"></a> </li> En el archivo head_submenu.tpl buscamos: <div id="subMenuTops" class="subMenu {if $tsPage == 'tops'}here{/if}"> <ul class="floatL tabsMenu"> <li{if $tsAction == 'posts'} class="here"{/if}><a href="{$tsConfig.url}/top/posts/">Posts</a></li> <li{if $tsAction == 'usuarios'} class="here"{/if}><a href="{$tsConfig.url}/top/usuarios/">Usuarios</a></li> </ul> <div class="clearBoth"></div> </div> Y agregamos despues: <div class="subMenu {if $tsPage == 'principal'}here{/if}"> <ul class="floatL tabsMenu"> <li{if $tsAction == 'a'} class="here"{/if}><a href="{$tsConfig.url}/principal/a/">{$tsConfig.cata}</a></li> <li{if $tsAction == 'b'} class="here"{/if}><a href="{$tsConfig.url}/principal/b/">{$tsConfig.catb}</a></li> <li{if $tsAction == 'c'} class="here"{/if}><a href="{$tsConfig.url}/principal/c/">{$tsConfig.catc}</a></li> </ul> <div class="clearBoth"></div> </div> En el archivo extras.css al final agregamos: #cat-prim{width:100%;height:auto;float:left;overflow: hidden; } #cat-prim h1{text-align:center;padding:10px 0 10px 0;background:url('images/box_titlebg2.gif');color:#999;font-weight:600;font-size:20px;border:1px solid #CCC;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px;-o-border-radius:5px;} #cat-x-vell{width:305px;height:372px;background:#E4E4E4;border:1px solid #CCC;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px;-o-border-radius:5px;} #cat-x-vell ul{margin-top:0px;background:#FFF;width:305px;} #cat-x-vell ul li{display:inline-block;padding:8px 0 8px 15px;width:290px;border-bottom:1px solid #CCC;cursor:pointer;} #cat-x-vell ul li:hover{background:#F8F8F8;} #cat-x-vell ul li a{color:#005CA5;font-weight:bold;margin-left:10px;} #cat-x-vell a{text-decoration:none;color:#009999;font-size:10px;font-weight:bold;} .cat-img-v{position:absolute;float:left;margin-left:-12px;} .cat-a{float:left;width:305px;padding:0 0 2px 0;height:auto;} .cat-b{float:left;width:305px;margin-left:11px;height:auto;} .cat-c{float:right;width:305px;margin-right:3px;height:auto;} .box_title_v{background:url('images/box_titlebg2.gif');text-align:center;border-bottom:1px solid #CCC;border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px 5px 0 0;-o-border-radius:5px 5px 0 0;} .box-cat-v{padding:10px 0 10px 0;color:#FFF;font-size:18px;font-weight:bold;text-shadow:1px 1px 5px #000;} #categorias-principales{width:100%;height:auto;background:transparent;border:1px solid #CCC;overflow: hidden; } #categorias-principales ul li{width:100%;padding:20px 0 21px 5px;border-bottom:1px solid #CCC;} #categorias-principales ul li:hover{background:#F8F8F8;} #categorias-principales ul li a{text-decoration:none;} #categorias-principales ul li span{color:#9E9E9E;} #categorias-t {font-size: 14px;font-weight: bold;color:#005CA5;margin-left:60px;text-decoration:none;} .categoria-a{padding:10px 0 10px 0;color:#8B8B8B;background:url('images/box_titlebg2.gif');text-align:center;border-bottom:1px solid #CCC;font-size:20px;font-weight:700;} #c-a-i{width:50px;height:50px;position:absolute;float:left;margin-left:-1px;margin-top:-17px;cursor:pointer;} #c-a-p{position:absolute;float:left;margin-left:500px;margin-top:-5px;cursor:pointer;} .c-a-pp{position:absolute;float:left;margin-left:530px;margin-top:0px;} .c-a-pp strong{padding: 10px;color:#009999;} #c-a-c{position:absolute;float:left;margin-left:580px;margin-top:-4px;cursor:pointer;} .c-a-cc {position:absolute;float:left;margin-left:615px;margin-top:0px;} .c-a-cc strong{padding: 10px;color:#009999;} #c-a-v{position:absolute;float:left;margin-left:670px;margin-top:0px;cursor:pointer;} .c-a-cvh {position:absolute;float:left;margin-left:690px;margin-top:0px;} .c-a-cvh strong{padding: 10px;color:#009999;} .c-c-ip{position:absolute;float:left;margin-left:60px;margin-top:-13px;} .c-c-ip-u{position:absolute;float:left;margin-left:760px;margin-top:-15px;} #c-a-r{position:absolute;float:left;margin-left:730px;margin-top:0px;cursor:pointer;} .c-a-e-1{position:absolute;float:left;margin-left:60px;margin-top:17px;} .c-a-e-2{position:absolute;float:left;margin-left:80px;margin-top:17px;} .c-a-e-3{position:absolute;float:left;margin-left:100px;margin-top:17px;} .c-a-e-4{position:absolute;float:left;margin-left:120px;margin-top:17px;} .c-a-e-5{position:absolute;float:left;margin-left:140px;margin-top:17px;} .c-a-e-6{position:absolute;float:left;margin-left:160px;margin-top:17px;} .c-a-e-7{position:absolute;float:left;margin-left:180px;margin-top:17px;} .c-a-e-8{position:absolute;float:left;margin-left:410px;margin-top:0px;} .c-a-e-9{position:absolute;float:left;margin-left:460px;margin-top:-3px;} .c-a-ur {position:absolute;float:left;margin-left:760px;margin-top:0px;font-size:12px;} .cat-buscador{width:400px;height:35px;margin:10px 0 20px 220px;color:#333;} .cat-buscador:hover{box-shadow:inset 0px 0px 2px #00CCFF;} Hecho Todo lo anterior suben estos archivos a sus respectivas carpetas.. http://www.mediafire.com/?x42akbdklpdj4n2 ( Salvo el css que lo deje tambien en la carpeta ok) NOTAS IMPORTANTES.... Dentro de los archivos esta el instalador... debe de estar en su carpeta raiz ( http://tuweb/instalar.php/ ) Este Mods es administrable y los nombres de cada categorias se la deben de dar en la Admin. La cantidad de filtraciones la dan en la Admin.. El tipo de la categoria la dan en las Opciones de categorias en la Admin.. Consta de 3 Categorias Principales y una default que seria la 4 Las tres categorias ( A, B, C) Se veran en la Home de forma Oculta con un estylo spoiler. Se veran por defecto las ultimas Diez ( 10 ) Categorias que se muestren en la Home.. En la Home donde estan las demas categorias no se veran las Principales.. solo las default de clase 4. Esta trae un control por IP de los posts con respecto a los usuarios ( Staff ) Les dejo unas imagenes para que lo comprendan un poco mejor.. Bueno eso seria todo.. Espero que les sea de su agrado.. Si tienen algun problema me avisan. Simempre Regresen a ver xq aveces alguna correccion puede haber y un nuca se entera..
  17. [MOD] Envivo v3

    Hola amigos, tras estos días de mantenimiento y remodelación del foro estuve haciendo un mod, va en realidad modificando un poco el mod de webmasters. Y es el mod envivo, muchos lo pedían en pages y yo se los hice. CAP: 1) Suben esto a inc/class: http://www.mediafire.com/view/?i7zp29din93h6hh 2) Suben esto a inc/php: http://www.mediafire.com/view/?ci2gs8secxg2niy 3) Suben esto a /temas/tuema/templates http://www.mediafire.com/?aa849s15tjq9soh 4) Suben esto a /temas/tutema/css http://www.mediafire.com/view/?bdf8xweoosa932p 5) Suben esto a /temas/tutema/templates/modules http://www.mediafire.com/?rpm545qv7oqzv1a 6) Si tienen la v5 de gonzalo, se van a templates/modules/m.home.stats/ abren y buscan: <a href="#">{$tsConfig.titulo} en vivo</a></div> y lo reemplazan por: <a href="/envivo/">{$tsConfig.titulo}! en vivo</a></div> Y si tienen otro tema, ya sea default otro se van a templates/modules/m.home.stats abren y buscan: </tr> </table> y debajo agregan: <div style="text-align:center;font-weight:bold;padding:3px;background:#CECECE;margin-top:5px"> <a href="/envivo/" style="display:block">{$tsConfig.titulo}! en vivo</a> </div> Y eso es todo. Créditos: webmasters ya que me basé en su mod. Romero por darme la idea.
  18. [mod staff V 3] Staff Automatico

    *Mod by Midd_98* Bueno esta es la versión final del mod Staff + solicitud, pero igual pueden haber algunas leves mejoras de diseño y codigo de programación del email. Bueno para esta versión lo nuevo es que no hay que añadir los miembros, automaticamente los del rango 1, y 2 son parte del staff en la lista automaticamente, si quieren agregar más rangos, solo habisenme los que no sepan y los ayudo.... yo tengo 3 rangos automaticos en el staff: 1.- Fundador 2.- Administrador 3.- Moderador Son los rangos de mi lista del staff automatico. pero para ustedes solo estará puesto: 1.- Administrador 2.- Moderador pero se puede editar Ahora para partir con el mod agregan al final de estilo.css que esta en la raiz del theme. .avatarBox { width: 141px; height: 141px; margin: 0 auto 10px auto; padding-bottom: 13px; background: url("images/avatarShadow.png") no-repeat scroll center bottom transparent; } #showResult .avatarBox { width: 85px; position:relative; background:transparent url(images/shadowAvaS.gif) no-repeat scroll left bottom; height:85px; } #showResult .avatarBox .riboon { position: absolute; display:none; border:none; background:none; } #showResult .resultBox.oficial .avatarBox .riboon { display:block; left:-9px; top:30px; } Ahora habren el archivo head_submenu.tpl que se encuentra en sections y buscan <a class=vctip title="Ir a Fotos" href="{$tsConfig.url}/fotos/"><li{if $tsSubmenu == 'fotos'} class="herevell"{/if}><img src="{$tsConfig.tema.t_url}/you/newsli.png"><font color="#6600ff">Fotos</font></li></a>{/if} y abajo agregan <a class=vctip title="Staff de {$tsConfig.titulo}" href="{$tsConfig.url}/staff/"><li{if $tsSubmenu == 'staff'} class="herevell"{/if}><img src="{$tsConfig.tema.t_url}/you/newsli.png"><font color="yhelow"><b>Staff</b></font></li></a> En el mismo archivo buscan <li{if $tsAction == 'usuarios'} class="here"{/if}><a class=vctip href="{$tsConfig.url}/top/usuarios/"><img src="{$tsConfig.tema.t_url}/you/newsli.png">Usuarios</a></li> </ul></div> <div class="clearBoth"></div> </div> y abajo agregan <div id="subMenuTops" class="subMenu {if $tsPage == 'staff'}here{/if}"> <ul class="floatL tabsMenu"> <li{if $tsAction == ''} class="here"{/if}><a href="{$tsConfig.url}/staff/">Staff</a></li> <li{if $tsAction == 'admin'} class="here"{/if}><a href="{$tsConfig.url}/staff/admin/">Administradores</a></li> <li{if $tsAction == 'mods'} class="here"{/if}><a href="{$tsConfig.url}/staff/mods/">Moderadores</a></li> </ul> <div class="clearBoth"></div> </div> </div> Ahora los que ya instalaron las otras verciones, solo remplazan los archivos - c.staff.php ---> inc/class - staff.php ---> inc/php - s.staff_welcome.tpl ----> themes/tu_theme/templates/modules/staff aqui los archivos http://www.mediafire.com/?24u3uewqc1r40yv para los que no han intalado ninguna otra versión solo suben todos los archivos y editan lo siguiente. (solo los que no intalaron la versión anterior) ahora habren el archivo email.php que se encuentra en la carpeta staff. y buscan <tuemail> y lo remplazan por tu email o por el cual quieres que llege el mensaje. en el mismo archivo buscan <tuweb> y lo remplazan por la url de su web. ahora para seguir ejecutaremos la siguiente consulta. ALTER TABLE w_configuracion ADD new_staff VARCHAR( 15 ) NOT NULL AFTER offline_message ahora habren c.admin.php y buscan. WHERE `tscript_id` = \'1\'')) y antes agregan , `new_staff` = \'' . $c['n_staff'] . '\' y en el mismo archivo buscan. (mas arriba) 'count_guests' => $tsCore->setSecure($_POST['count_guests']), y agregan 'n_staff' => $tsCore->setSecure($_POST['n_staff']), ahora en el archivo m.admin_config.tpl buscan <dt><label for="ai_edad">Edad requerida:</label> <br /><span>A partir de que edad los usuarios pueden registrarse.</span></dt> y arriba agregan <dl><dt><label for="ai_n_staff">Nuevo STAFF:</label><br /><span>Permitir Solicitudes para unirse al STAFF.</span></dt> <dd> <label><input name="n_staff" type="radio" id="ai_n_staff" value="1" {if $tsConfig.new_staff == 1}checked="checked"{/if} class="radio"/>S&iacute;</label> <label><input name="n_staff" type="radio" id="ai_n_staff" value="0" {if $tsConfig.new_staff != 1}checked="checked"{/if} class="radio"/>No</label> </dd> </dl> <hr />
  19. Bueno este mini-complemento lo que hace es no tomar en cuenta si se clickea o no la casilla de Tatuajes o Piercings en /cuenta/ y asi poder llegar al 100% sin necesidad de marcarlos. Lo único que hay que hacer es ir al c.cuenta.php en la carpeta inc/class En el buscan: $tengo = array($tsCore->setSecure($_POST['t_0']),$tsCore->setSecure($_POST['t_1'])); y lo borran. Luego buscan: 'tengo' => serialize($tengo), y lo borran tambien. Eso seria todo, les dejo una cap:
  20. Hola a todos comparto este mod para que puedan ver el fondo de perfil de usuario en su post y tambien su cabecera de perfil en el VCard. Primero debemos tener el mod de Tutan instalado Ahora abrimos c.posts.php que esta en inc/class y buscamos /* getSideData($array) */ function getAutor($user_id){ global $tsUser, $tsCore; // DATOS DEL AUTOR $query = mysql_query('SELECT u.user_id, u.user_name, u.user_rango, u.user_puntos, u.user_lastactive, u.user_last_ip, u.user_activo, u.user_baneado, p.user_pais, p.user_sexo, p.p_socials, p.user_firma FROM u_miembros AS u LEFT JOIN u_perfil AS p ON u.user_id = p.user_id WHERE u.user_id = \''.(int)$user_id.'\' LIMIT 1'); $data = mysql_fetch_assoc($query); Reemplazamos por /* getSideData($array) */ function getAutor($user_id){ global $tsUser, $tsCore; // DATOS DEL AUTOR $query = mysql_query('SELECT u.user_id, u.user_name, u.user_rango, u.user_puntos, u.user_lastactive, u.user_last_ip, u.user_activo, u.user_baneado, p.user_pais, p.user_sexo, p.p_socials, p.p_fondo, p.user_firma FROM u_miembros AS u LEFT JOIN u_perfil AS p ON u.user_id = p.user_id WHERE u.user_id = \''.(int)$user_id.'\' LIMIT 1'); $data = mysql_fetch_assoc($query); Guardamos y ahora abrimos c.user.php en la misma carpeta y buscamos // INFORMACION GENERAL $query = mysql_query('SELECT u.user_id, u.user_name, u.user_lastactive, u.user_baneado, p.user_sexo, p.user_pais, p.p_nombre, p.p_mensaje, p.p_sitio FROM u_miembros AS u, u_perfil AS p WHERE u.user_id = \''.(int)$user_id.'\' AND p.user_id = \''.(int)$user_id.'\''); $data = mysql_fetch_assoc($query); Reemplazamos por // INFORMACION GENERAL $query = mysql_query('SELECT u.user_id, u.user_name, u.user_lastactive, u.user_baneado, p.user_sexo, p.user_pais, p.p_fondoper, p.p_nombre, p.p_mensaje, p.p_sitio FROM u_miembros AS u, u_perfil AS p WHERE u.user_id = \''.(int)$user_id.'\' AND p.user_id = \''.(int)$user_id.'\''); $data = mysql_fetch_assoc($query); Guardamos y ahora abrimos t.posts.tpl que está en templates y despues de {include file='sections/main_header.tpl'} Agregamos {if $tsAutor.p_fondo != ''} <body style="background-image:url('{$tsAutor.p_fondo}');background-repeat: repeat;background-position: center"> {/if} Guardamos y ahora abrimos p.live.vcard.tpl que está en templates/t.php_files y buscamos <div class="hovercard-inner"> <div class="bd"> <a href="{$tsConfig.url}/perfil/{$tsData.user_name}" class="profile-pic"><img src="{$tsConfig.url}/files/avatar/{$tsData.user_id}_50.jpg" class="avatar" /></a> <div class="bio"> Reemplazamos por: <div class="hovercard-inner"> <div class="bd"> {if $tsData.p_fondoper != ''}<img src="{$tsData.p_fondoper}" style="height:75px;width:278px;">{/if} <a {if $tsData.p_fondoper != ''}style="margin: -20px 10px;"{/if} href="{$tsConfig.url}/perfil/{$tsData.user_name}" class="profile-pic"><img src="{$tsConfig.url}/files/avatar/{$tsData.user_id}_50.jpg" class="avatar" /></a> <div class="bio" {if $tsData.p_fondoper != ''}style="margin-left: 70px;"{/if}> Y eso es todo... les quedará algo como esto: Para el que no tenga cabecera de perfil se verá normalmente Y el fondo de perfil que se verá en los posts.... Y eso es todo espero que les haya gustado les recuerdo que tienen que instalar el mod de de tutan para que pueda previsualizarse las imagenes: Nos vemos en otro mod en p.live.vcard reemplazamos por esto: <div class="hovercard-inner"> <div class="bd"> {if $tsData.p_fondoper != ''}<img src="{$tsData.p_fondoper}" style="height:75px;width:278px;">{/if} <a {if $tsData.p_fondoper != ''}style="margin: -20px 10px;"{/if} href="{$tsConfig.url}/perfil/{$tsData.user_name}" class="profile-pic"><img src="{$tsConfig.url}/files/avatar/{$tsData.user_id}_120.jpg" class="avatar" {if $tsData.p_fondoper != ''}style="height:60px;width:60px;"{/if}/></a> <div class="bio" {if $tsData.p_fondoper != ''}style="margin-left: 80px;"{/if}> Disculpen no lo había actualizado correctamente, que algun mod edite el tema
  21. Últimos videos en la home

    Hola a todos les traigo este mod para agregar la sección de últimos videos en la home. Prmero abrimos c.videos.php que está en inc/class Luego buscamos /* getLastVideos() */ Y arriba de eso agregamos /* getHomeVideos() By Kmario19 */ function getHomeVideos(){ global $tsCore, $tsUser; // $query = 'SELECT v.vid_id, v.vid_title, v.vid_hits, v.vid_date, v.vid_description, v.vid_url, v.vid_status, u.user_name, u.user_activo, u.user_baneado, u.user_id FROM v_videos AS v LEFT JOIN u_miembros AS u ON u.user_id = v.vid_user '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? '' : 'WHERE v.vid_status = \'0\' AND u.user_activo = \'1\' && u.user_baneado = \'0\'').' ORDER BY v.vid_id DESC LIMIT 6'; $data['data'] = result_array(mysql_query($query)); // return $data; } Ahora abrimos post.php que está en inc/php y despues de $smarty->assign("tsImTotal",count($tsImages)); Agregamos // VIDEOS include(TS_CLASS."c.videos.php"); $tsVideos =& tsVideos::getInstance(); // ULTIMOS VIDEOS $smarty->assign("tsHomVideos",$tsVideos->getHomeVideos()); Abrimos estilos.css y al final de todo agregamos #lvideos img{ width: 78px; height: 72px; padding: 2px; border: 1px solid #DDD; -moz-transition: color, text-shadow 0.5s, 0.5s; -webkit-transition: color, text-shadow 0.5s, 0.5s; margin: 0 5px 5px 0; } #lvideos img:hover { opacity:0.5; } Ahora vamos a t.home.tpl que está en tutema/templates y debajo de {include file='modules/m.home_stats.tpl'} Agregamos {include file='modules/m.home_last_videos.tpl'} Subimos este archivo (m.home_last_videos) a la carpeta tutema/templates/modules Descargar Y al final les quedará algo como esto: Espero que les haya gustado nos vemos en otro mod adios
  22. [MOD] notificaciones de fotos

    Bueno la otra vez dijeron que no estaba completas las notificaciones de las fotos, si pusieron los vídeos les digo que las de las fotos debería de andar bueno. le puse mod pero no se si es un mod es corto vamos a inc/class abrimos c.monitor.php a) buscamos case 17: return 'SELECT f.foto_id, f.f_title, f.f_user, m.medal_id, m.m_title, m.m_image, a.medal_for, u.user_id, u.user_name FROM w_medallas_assign AS a LEFT JOIN f_fotos AS f ON f.foto_id = a.medal_for LEFT JOIN u_miembros AS u ON u.user_id = f.f_user LEFT JOIN w_medallas AS m ON m.medal_id = a.medal_id WHERE m.medal_id = \''.(int)$data['obj_uno'].'\' AND f.foto_id = \''.(int)$data['obj_dos'].'\' LIMIT 1'; break; debajo agregan case 10: return 'SELECT f_title, f_url, foto_id, f_user, u.user_name, u.user_id FROM f_fotos AS f LEFT JOIN u_miembros AS u ON f.f_user = u.user_id WHERE foto_id = \''.(int)$data['obj_uno'].'\' LIMIT 1'; break; case 11: return 'SELECT f_title, f_url, foto_id, f_user, u.user_name, u.user_id FROM f_fotos LEFT JOIN f_comentarios AS c ON c.cid LEFT JOIN u_miembros AS u ON f_user = u.user_id WHERE foto_id = \''.(int)$data['obj_uno'].'\' LIMIT 1'; break; buscamos // PUBLICACION EN MURO case 12: $oracion['text'] = $this->monitor[$no_type]['text'].$txt_extra; $oracion['link'] = $site_url.'/perfil/'.$tsUser->nick.'/'.$data['obj_uno']; $oracion['ltext'] = ($this->show_type == 1) ? $ln_text : $tsUser->nick; $oracion['ltit'] = ($this->show_type == 1) ? $tsUser->nick : ''; break; arriba ponen case 10: $oracion['text'] = $this->monitor[$no_type]['text']; $oracion['link'] = $site_url.'/fotos/'.$data['user_name'].'/'.$data['foto_id'].'/'.$tsCore->setSEO($data['f_title']).'.html'; $oracion['ltext'] = ($this->show_type == 1) ? $ln_text : $data['f_title']; break; case 11: // CUANTOS $no_total = $data['not_total']; // MAS DE UNA ACCION if($no_total > 1) { $text = $this->monitor[$no_type]['text'][1].$txt_extra; $oracion['text'] = str_replace('_REP_', "<b>{$no_total}</b>", $text); } else $oracion['text'] = $this->monitor[$no_type]['text'][0].$txt_extra; // $oracion['link'] = $site_url.'/fotos/'.$data['user_name'].'/'.$data['foto_id'].'/'.$tsCore->setSEO($data['f_title']).'.html'; $oracion['ltext'] = ($this->show_type == 1) ? $ln_text : $data['f_title']; $oracion['ltit'] = ($this->show_type == 1) ? $data['f_title'] : ''; break; y eso es todo cap Bueno saludos que anden bien, ahora me voy a dormir
  23. [minimod]Nuevo cargando.....

    bueno antes que nada saludos y empezare a explicar un poco noc algunos themes creo no lo tienen pero este les va a todos bueno empezemos vamos a estilo.css buscamos lo siguiente lo borran y lo remplazan por: importante bueno una vez echo esto vamos a tutheme/templates/section/main_header.tpl buscan esto lo remplazan por y suben estas imagenes a images y listo se mirara as i bueno quiero agradecerle a eduardorapalo--por el diseño -wah espero les guste algun problema que tengan diganme ok
  24. (mini Complemento) Emoticones T!

    Hola Amigos De PHPost este MOD sirve para cambiar los emoticones que vienen en el default por los emoticones clasicos identicos a T!. Caps : Instrucciones: Descargar: http://www.mediafire.com/?vddsulivz7dd67i 1- Descargar el zip, dentro de este zip hay una carpeta llamada emoticones T! By Romero07, entran en esta carpeta y todo el contenido que tiene lo suben a themes/TU THEME/images/smiles. 2- Se dirigen a inc/php/ajax y abren el archivo ajax.emoticones.php hay buscan la siguiente línea de código: array("(A)","014.png"), Borran esa linea y las demas lineas hasta esta linea : array("(xx)","103.png"), y abajo añaden // Emoticones T! By Romero07 array(":zombie:","zombie.gif"), array(":wow:","wow.gif"), array(":winky:","winky.gif"), array(":wink:","wink.gif"), array(":verde:","verde.gif"), array(":unsure:","unsure.gif"), array(":twisted:","twisted.gif"), array(":tongue:","tongue.gif"), array(":smile:","smile.gif"), array(":shrug:","shrug.gif"), array(":sad:","sad.gif"), array(":s:","s.gif"), array(":roll:","roll.gif"), array(":rip:","rip.gif"), array(":pregunta:","pregunta.gif"), array(":papel:","papel.gif"), array(":pacman:","pacman.gif"), array(":oops:","oops.gif"), array(":ok:","ok.gif"), array(":noo:","noo.gif"), array(":no:","no.gif"), array(":metal:","metal.gif"), array(":mario:","mario.gif"), array(":lpmqtp:","lpmqtp.gif"), array(":love:","love.gif"), array(":lol:","lol.gif"), array(":limoon:","limoon.gif"), array(":laughing:","laughing.gif"), array(":idiot:","idiot.gif"), array(":huh:","huh.gif"), array(":hot:","hot.gif"), array(":grn:","grn.gif"), array(":grin:","grin.gif"), array(":globo:","globo.gif"), array(":getalife:","getalife.gif"), array(":fantasma:","fantasma.gif"), array(":exclamacion:","exclamacion.gif"), array(":drool:","drool.gif"), array(":culo:","culo.gif"), array(":crying:","crying.gif"), array(":cry:","cry.gif"), array(":cool:","cool.gif"), array(":cold:","cold.gif"), array(":buenpost:","buenpost.gif"), array(":bobo:","bobo.gif"), array(":blaf:","blaf.gif"), array(":bang:","bang.gif"), array(":angry:","angry.gif"), array(":alabama:","alabama.gif"), array(":lloron:","lloron.gif"), array(":ciego:","ciego.gif"), array(":sorprendido:","sorprendido.gif"), array(":8s:","8s.gif"), array(":verde2:","verde2.gif"), //Fin Emoticones T! 3- Se dirigen a inc/ext y abren el archivo bbcode.inc.php hay buscan la siguiente línea de código: $bbcode[] =":)"; $html[] = $pre."001.png".$end; Borran esa linea y las demas hasta esta linea : $bbcode[] = "(xx)"; $html[] = $pre."103.png".$end; Y abajo añaden: // Emoticones T! By Romero07 $bbcode[] = ":zombie:"; $html[] = $pre."zombie.gif".$end; $bbcode[] = ":wow:"; $html[] = $pre."wow.gif".$end; $bbcode[] = ":winky:"; $html[] = $pre."winky.gif".$end; $bbcode[] = ":wink:"; $html[] = $pre."wink.gif".$end; $bbcode[] = ":verde:"; $html[] = $pre."verde.gif".$end; $bbcode[] = ":unsure:"; $html[] = $pre."unsure.gif".$end; $bbcode[] = ":twisted:"; $html[] = $pre."twisted.gif".$end; $bbcode[] = ":tongue:"; $html[] = $pre."tongue.gif".$end; $bbcode[] = ":smile:"; $html[] = $pre."smile.gif".$end; $bbcode[] = ":shrug:"; $html[] = $pre."shrug.gif".$end; $bbcode[] = ":sad:"; $html[] = $pre."sad.gif".$end; $bbcode[] = ":roll:"; $html[] = $pre."roll.gif".$end; $bbcode[] = ":rip:"; $html[] = $pre."rip.gif".$end; $bbcode[] = ":pregunta:"; $html[] = $pre."pregunta.gif".$end; $bbcode[] = ":papel:"; $html[] = $pre."papel.gif".$end; $bbcode[] = ":pacman:"; $html[] = $pre."pacman.gif".$end; $bbcode[] = ":oops:"; $html[] = $pre."oops.gif".$end; $bbcode[] = ":ok:"; $html[] = $pre."ok.gif".$end; $bbcode[] = ":noo:"; $html[] = $pre."noo.gif".$end; $bbcode[] = ":no:"; $html[] = $pre."no.gif".$end; $bbcode[] = ":metal:"; $html[] = $pre."metal.gif".$end; $bbcode[] = ":mario:"; $html[] = $pre."mario.gif".$end; $bbcode[] = ":lpmqtp:"; $html[] = $pre."lpmqtp.gif".$end; $bbcode[] = ":love:"; $html[] = $pre."love.gif".$end; $bbcode[] = ":lol:"; $html[] = $pre."lol.gif".$end; $bbcode[] = ":limoon:"; $html[] = $pre."limoon.gif".$end; $bbcode[] = ":laughing:"; $html[] = $pre."laughing.gif".$end; $bbcode[] = ":idiot:"; $html[] = $pre."idiot.gif".$end; $bbcode[] = ":huh:"; $html[] = $pre."huh.gif".$end; $bbcode[] = ":hot:"; $html[] = $pre."hot.gif".$end; $bbcode[] = ":grn:"; $html[] = $pre."grn.gif".$end; $bbcode[] = ":grin:"; $html[] = $pre."grin.gif".$end; $bbcode[] = ":globo:"; $html[] = $pre."globo.gif".$end; $bbcode[] = ":getalife:"; $html[] = $pre."getalife.gif".$end; $bbcode[] = ":fantasma:"; $html[] = $pre."fantasma.gif".$end; $bbcode[] = ":exclamacion:"; $html[] = $pre."exclamacion.gif".$end; $bbcode[] = ":drool:"; $html[] = $pre."drool.gif".$end; $bbcode[] = ":culo:"; $html[] = $pre."culo.gif".$end; $bbcode[] = ":crying:"; $html[] = $pre."crying.gif".$end; $bbcode[] = ":cry:"; $html[] = $pre."cry.gif".$end; $bbcode[] = ":cool:"; $html[] = $pre."cool.gif".$end; $bbcode[] = ":cold:"; $html[] = $pre."cold.gif".$end; $bbcode[] = ":ciego:"; $html[] = $pre."ciego.gif".$end; $bbcode[] = ":car:"; $html[] = $pre."car.gif".$end; $bbcode[] = ":buenpost:"; $html[] = $pre."buenpost.gif".$end; $bbcode[] = ":bobo:"; $html[] = $pre."bobo.gif".$end; $bbcode[] = ":blaf:"; $html[] = $pre."blaf.gif".$end; $bbcode[] = ":bang:"; $html[] = $pre."bang.gif".$end; $bbcode[] = ":angry:"; $html[] = $pre."angry.gif".$end; $bbcode[] = ":alabama:"; $html[] = $pre."alabama.gif".$end; $bbcode[] = ":8s:"; $html[] = $pre."8s.gif".$end; //Fin de Emoticones T! Con eso ya estaría listo. Demo: http://www.zona-full.10h.com.ar ¿Algún problema? Publicalo en el foro correspondiente: Soporte
  25. Holas. En ésta ocación les mostraré una manera de hacer una aplicación RSS de tus posts para Android. Para esto necesitarán el 1) Deben ir a Appyet y registrarse. 2) Una vez registrados, vamos a donde dice "Get Started" 3) Rellenamos los siguiente espacios. Donde dice "Package Name:" se rellena solo cuando agregas el nombre de la aplicacion. Cuando rellenan los datos le dan "Create App". 4) Lo siguiente será rellenar los siguientes espacios (aunque solo hay que modificar el icono, si quieren, porque los otros datos los agarra solo). Cuando terminan le dan "Save Changes". 5) Siguiente paso, la captura lo explica todo: 6) Ahora vamos a la pestaña "Tabs". Y haganlo a su gusto y le dan "Save Changes" 7) Vamos a la pestaña "Settings". E igual los llenan a como gusten y le damos "Save Changes". 8) Ahora vamos a la pestaña "Submit". Y si tod está listo le damos "Submit To Build". Y en unos segundos les llegará un correo donde podrán descargar la aplicación .APK. 9) Así sería lo que llega al correo: Una captura de una que ya hice: Espero que hayan entendido los procedimientos, y pues logicamente que les funcione . Si no fuese así dejen un comentario para ver en que les ayudo
×