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

Search the Community

Showing results for tags 'complementos-mod'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • El núcleo de PHPost
    • Novedades e información
    • Off Topic
    • Presentaciones
  • PHPost Risus
    • Actualizaciones
    • Versión 1.1
    • Versión 1.2
  • La esquina
    • Rincón del PC
    • Rincón del móvil
  • Escuela de Actualización de Risus Phpost's PHP 7.X
  • Escuela de Actualización de Risus Phpost's Smarty
  • Escuela de Actualización de Risus Phpost's EXTRAS
  • Escuela de Actualización de Risus Phpost's Themes
  • Escuela de Actualización de Risus Phpost's Fixes
  • Escuela de Actualización de Risus Phpost's Actualizaciones

Calendars

There are no results to display.

There are no results to display.


Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


AIM


MSN


Sitio web


ICQ


Yahoo


Jabber


Skype


Localización


Intereses

Found 732 results

  1. Este es otro complemento de mi mod : Practicamente agrega la foto de facebook al avatar ademas un agregado que se olvido poner a alan... 1- En el directorio principal de la web (donde esta el header.php,index.php,etc..) creamos un directorio con el nombre tmp y le damos permisos 777: 2- en su php.ini buscan el DOCUMENT ROOT : y guardamos esa ruta para mas adelante... si no saben donde esta su php.ini solo creen un archivo con lo siguiente: <?php phpinfo(); ?> nombrenlo ini.php y subanlo a inc/php/ y ejecutenlo asi: http://tuweb.com/inc/php/ini.php 3- Hagan respaldo del archivo c.facebook.php , lo abrimos y buscamos: public static $fbData; Debajo agregamos: public static $t; Mas abajo buscamos: self::$fbBirthday = $s['birthday']; Debajo agregamos: //obtenemos url real de la imagen de perfil $jsonurl = 'https://graph.facebook.com/'.self::$fbUID.'/picture?type=large&redirect=false'; $data = json_decode(file_get_contents($jsonurl,true)); self::$t = $data->data->url; luego bucamos: mysql_query('INSERT INTO u_perfil (user_id, user_dia, user_mes, user_ano, user_sexo, p_nombre) VALUES (\''.$id .'\', \''.$_POST['day'].'\', \''.$_POST['month'].'\', \''.$_POST['year'].'\', \''.$gender.'\', \''.$GLOBALS['tsCore']->setSecure($_POST['name']).'\')'); Reemplazamos por: $mijo = '1'; mysql_query('INSERT INTO u_perfil (user_id, user_dia, user_mes, user_ano, user_sexo, p_nombre,p_avatar) VALUES (\''.$id .'\', \''.$_POST['day'].'\', \''.$_POST['month'].'\', \''.$_POST['year'].'\', \''.$gender.'\', \''.$GLOBALS['tsCore']->setSecure($_POST['name']).'\',\''.$mijo.'\')'); mas abajo buscamos: $GLOBALS['tsUser']->userActivate($id, md5(time())); $GLOBALS['tsUser']->loginUser($GLOBALS['tsCore']->setSecure($_POST['user_name']), $_POST['password'], true, $GLOBALS['tsCore']->settings['url'].'/cuenta/'); Reemplazamos por: $GLOBALS['tsUser']->userActivate($id, md5(time())); //Obtenemos la foto $content = file_get_contents(self::$t); //Guardamos $fp = fopen('/home/tu/root/tmp/image.jpg', 'w'); fwrite($fp, $content); fclose($fp); FBConnect::copi($id); $GLOBALS['tsUser']->loginUser($GLOBALS['tsCore']->setSecure($_POST['user_name']), $_POST['password'], true, $GLOBALS['tsCore']->settings['url'].'/cuenta/'); Donde dice: /home/tu/root/ Reemplazamos por el document root antes buscado: Bucamos: return 1; } Debajo agregamos: public static function copi($key){ $source = '/home/tu/documentroot/tmp/image.jpg'; $size = getimagesize($source); // TAMAÑOS $_w = $_h = 120; $_tw = $_th = 50; // CREAMOS LA IMAGEN DEPENDIENDO EL TIPO switch($size['mime']){ case 'image/jpeg': case 'image/jpg': $img = imagecreatefromjpeg($source); break; case 'image/gif': $img = imagecreatefromgif($source); break; case 'image/png': $img = imagecreatefrompng($source); break; } // $width = imagesx($img); $height = imagesy($img); list($ancho, $alto) = getimagesize($source); // AVATAR $avatar = imagecreatetruecolor($_w, $_h); imagecopyresampled($avatar, $img, 0, 0, 0, 0, $_w, $_h, $ancho, $alto); // AVATAR THUMB $thumb = imagecreatetruecolor($_tw, $_th); imagecopyresampled($thumb, $img, 0, 0, 0, 0, $_tw, $_th, $ancho, $alto); // GUARDAMOS... $root = TS_FILES.'avatar/'.$key.'_'; imagejpeg($avatar,$root.'120.jpg',90); imagejpeg($thumb,$root.'50.jpg',90); // CLEAR imagedestroy($img); imagedestroy($avatar); imagedestroy($thumb); // BORRAMOS LA ORIGINAL unlink($source); // } Donde dice: /home/tu/documentroot/ lo cambiamos por su document root antes mencionado. 4- Por ultimo abrimos t.facebook-finish.tpl y buscamos: {if !$facebook.birthday} <li> Antes Agregamos: <li> <label for="name">Tu Nombre:</label> <input type="text" name="name" id="name" class="text-inp required" maxlength="200" value="{$facebook.name}" tabindex="2"> </li> Cap: Demo: http://www.mytech.com.mx/ OJO: para que funcione la copia de la imagen de perfil es necesario que tengan estas configuracion del php.ini asi:
  2. tutan-kabron

    [mod] facepost

    este mod es un preview de un post masomenos asi abren c.posts y hasta abaj buscan el ultimo } y antes agregan: //facepost tutan-absa function Light_facePost($pid){ global $tsCore, $tsUser; if(empty($pid)) return 'Ningun ID de Post Ingresada .)'; else{ //$query = $this->query("SELECT * FROM p_posts WHERE post_id = '{$pid}'"); $query = mysql_query('SELECT c.* ,m.*, u.user_id FROM `p_posts` AS c LEFT JOIN `u_miembros` AS u ON c.post_user = u.user_id LEFT JOIN `u_perfil` AS m ON c.post_user = m.user_id WHERE `post_id` = \''.(int)$pid.'\' '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? '' : 'AND u.user_activo = \'1\' && u.user_baneado = \'0\'').' LIMIT 1'); $data = mysql_fetch_assoc($query); // NÚMERO DE COMENTARIOS $data['post_comments'] = mysql_num_rows(mysql_query('SELECT u.user_name, c.cid FROM u_miembros AS u LEFT JOIN p_comentarios AS c ON u.user_id = c.c_user WHERE c.c_post_id = \''.(int)$pid.'\' '.($tsUser->is_admod ? '' : 'AND c.c_status = \'0\' AND u.user_activo = \'1\' && u.user_baneado = \'0\''))); // NÚMERO DE FAVORITOS $data['post_favoritos'] = mysql_num_rows(mysql_query('SELECT fav_id FROM p_favoritos WHERE fav_post_id = \''.(int)$pid.'\'')); //VISITANTES RECIENTES if($data['post_visitantes']){ $data['visitas'] = result_array(mysql_query('SELECT v.*, u.user_id, u.user_name FROM w_visitas AS v LEFT JOIN u_miembros AS u ON v.user = u.user_id WHERE v.for = \''.(int)$data['post_id'].'\' && v.type = \'2\' && v.user > 0 ORDER BY v.date LIMIT 10')); } //PUNTOS //$data['post_puntos'] = result_array(mysql_query('SELECT p.*, u.user_id, u.user_name FROM p_votos AS p LEFT JOIN u_miembros AS u ON p.tuser = u.user_id WHERE p.tid = \''.(int)$pid.'\' && p.type = \'1\' ORDER BY p.cant DESC')); if($data['post_private'] == 1 and !$tsUser->is_member) return false; else{ //Lo Agregamos visita sean registrados o Visitantes //NUEVA VISITA : FUNCION SIMPLE $visitado = mysql_num_rows(mysql_query('SELECT id FROM `w_visitas` WHERE `for` = \''.(int)$pid.'\' && `type` = \'2\' && '.($tsUser->is_member ? '(`user` = \''.$tsUser->uid.'\' OR `ip` LIKE \''.$_SERVER['REMOTE_ADDR'].'\')' : '`ip` LIKE \''.$_SERVER['REMOTE_ADDR'].'\'').' LIMIT 1')); if($tsUser->is_member && $visitado == 0) { mysql_query('INSERT INTO w_visitas (`user`, `for`, `type`, `date`, `ip`) VALUES (\''.$tsUser->uid.'\', \''.(int)$pid.'\', \'2\', \''.time().'\', \''.$_SERVER['REMOTE_ADDR'].'\')'); mysql_query('UPDATE p_posts SET post_hits = post_hits + 1 WHERE post_id = \''.(int)$pid.'\' AND post_user != \''.$tsUser->uid.'\''); }else{ mysql_query('UPDATE `w_visitas` SET `date` = \''.time().'\', ip = \''.$_SERVER['REMOTE_ADDR'].'\' WHERE `for` = \''.(int)$pid.'\' && `type` = \'2\''); } if($tsCore->settings['c_hits_guest'] == 1 && !$tsUser->is_member && !$visitado) { mysql_query('INSERT INTO w_visitas (`user`, `for`, `type`, `date`, `ip`) VALUES (\''.$tsUser->uid.'\', \''.(int)$pid.'\', \'2\', \''.time().'\', \''.$_SERVER['REMOTE_ADDR'].'\')'); mysql_query('UPDATE p_posts SET post_hits = post_hits + 1 WHERE post_id = \''.(int)$pid.'\''); } // Obtenemos la Fecha $data['post_date'] = strftime("%d.%m.%Y a las %H:%M hs",$data['post_date']); // BBcodes $data['post_title'] = $tsCore->parseBadWords($data['post_title']); $data['post_body'] = html_entity_decode(substr(htmlentities($tsCore->parseBadWords($tsCore->parseBBCode($data['post_body']))), 0, 1000)); //Autor $Autor = $this->getAutor($data['post_user']); //<!-- Solo nos interesa el nick --> $data['autor'] = $Autor['user_name']; return $data; } } } luego abren ajax.posts.php y buscan: 'posts-last-comentarios' => array('n' => 0, 'p' => 'last-comentarios'), debajo agregan: 'posts-view' => array('n' => 0, 'p' => 'facebox'), mas abajon buscan el ultimo break; y debajo agregan: case 'posts-view': //<-- $pid = $_GET['pid']; $lightpost = $tsPosts->Light_facePost($pid); $smarty->assign("Lpost",$lightpost); //--> break; luego abren main_header.tpl que esta en sections/ y antes de: <!-- AGREGAMOS UN ESTILO EXTRA SI EXISTE --> agregan: <!-- FACEPOST --> <link href="{$tsConfig.tema.t_url}/js/facebox/facebox.css" rel="stylesheet" type="text/css" /> <script src="{$tsConfig.js}/facebox/facebox.js" type="text/javascript"></script> mas abajo buscan </head> y antes agregan: <script type="text/javascript"> {literal} jQuery(document).ready(function($) { $('a[rel*=facebox]').facebox() }) facebox.init(); {/literal} </script> luego abren m.home_last_posts.tpl y buscan: {foreach from=$tsPostsStickys item=p} <li {if $p.post_status == 3}style="background-color:#f1f1f1;"{elseif $p.post_status == 1}style="background-color:coral;"{elseif $p.post_status == 2}style="background-color:rosyBrown;"{elseif $p.user_activo == 0}style="background-color:burlyWood;"{elseif $p.user_baneado == 1}style="background-color:orange;"{/if} class="categoriaPost sticky{if $p.post_sponsored == 1} patrocinado{/if}"> <a {if $p.post_status == 3}class="qtip" title="El post est&aacute; en revisi&oacute;n"{elseif $p.post_status == 1}class="qtip" title="El post se encuentra en revisi&oacute;n por acumulaci&oacute;n de denuncias"{elseif $p.post_status == 2}class="qtip" title="El post est&aacute; eliminado"{elseif $p.user_activo == 0}class="qtip" title="La cuenta del usuario est&aacute; desactivada"{/if} href="{$tsConfig.url}/posts/{$p.c_seo}/{$p.post_id}/{$p.post_title|seo}.html" style="background:url({$tsConfig.tema.t_url}/images/icons/cat/{$p.c_img}) no-repeat 5px center" title="{$p.post_title}" target="_self" class="title">{$p.post_title|truncate:55}</a> </li> {/foreach} reemplazan por: {foreach from=$tsPostsStickys item=p} <li {if $p.post_status == 3}style="background-color:#f1f1f1;"{elseif $p.post_status == 1}style="background-color:coral;"{elseif $p.post_status == 2}style="background-color:rosyBrown;"{elseif $p.user_activo == 0}style="background-color:burlyWood;"{elseif $p.user_baneado == 1}style="background-color:orange;"{/if} class="categoriaPost sticky{if $p.post_sponsored == 1} patrocinado{/if}"> <a {if $p.post_status == 3}class="qtip" title="El post est&aacute; en revisi&oacute;n"{elseif $p.post_status == 1}class="qtip" title="El post se encuentra en revisi&oacute;n por acumulaci&oacute;n de denuncias"{elseif $p.post_status == 2}class="qtip" title="El post est&aacute; eliminado"{elseif $p.user_activo == 0}class="qtip" title="La cuenta del usuario est&aacute; desactivada"{/if} href="{$tsConfig.url}/posts/{$p.c_seo}/{$p.post_id}/{$p.post_title|seo}.html" style="background:url({$tsConfig.tema.t_url}/images/icons/cat/{$p.c_img}) no-repeat 5px center" title="{$p.post_title}" target="_self" class="title">{$p.post_title|truncate:55}</a><div class="foto-hover2"><a rel="facebox" href="{$tsConfig.url}/posts-view.php?pid={$p.post_id}"><img src="{$tsConfig.url}/themes/default/images/icons/eye.png" alt="" class="qtip" title="previsualizar" style="float:right; opacity:0.2" "width: 12px; height: 12px; opacity: 0.2; " onmouseover="this.style.opacity=1;this.filters.alpha.opacity=100"onmouseout="this.style.opacity=0.2;this.filters.alpha.opacity=30"></a></div> </li> {/foreach} mas abajo buscan: <span class="floatR"><a href="{$tsConfig.url}/posts/{$p.c_seo}/">{$p.c_nombre}</a></span> reemplazan por: <span class="floatR"><!--<a href="{$tsConfig.url}/posts/{$p.c_seo}/">{$p.c_nombre}</a>--><div class="foto-hover2"><a rel="facebox" href="{$tsConfig.url}/posts-view.php?pid={$p.post_id}"><img src="{$tsConfig.url}/themes/default/images/icons/eye.png" alt="" class="qtip" title="previsualizar" style="float:right; opacity:0.2" "width: 12px; height: 12px; opacity: 0.2; " onmouseover="this.style.opacity=1;this.filters.alpha.opacity=100"onmouseout="this.style.opacity=0.2;this.filters.alpha.opacity=30"></a></div></span> abren estilo.css y al final agregan: .foto-hover2{ float:right; margin-right:3px; margin-top:-19px; } .foto-hover:hover2{ } por ultimo suben este rar a sus respectivas carpetas: http://www.mediafire.com/?tj1d3q8tglk1kne caps:
  3. Hola a toda la excelente comunidad de Phpost. Pues después de mucho pedir, hoy vengo a dar algo a cambio. Mi primer MOD para Phpost. Se trata de un complemento, dirío yo, bastante útil para cualquier LinkSharing System. Este en específico, y como su título indica, encripta los enlaces en Base64, no emplea la encriptación nativa de JDownloader, pues no me dan los conocimientos (aún) para hacerlo en Phpost. Pero planeo hacerlo eventualmente, es un reto personal. La instalación es relativamente sencilla, así que vayamos a ello. EN C.CORE.PHP BUSCAR: $parser->restriction = array('url', 'code', 'quote', 'quotePHPost', 'font', 'size', 'color', 'img', 'b', 'i', 'u', 'align', 'spoiler', 'swf', 'goear', 'hr', 'li' DESPUES DE: 'li' AGREGAR: , 'jd' EN BBCODE.INC.PHP BUSCAR: public $restriction = Array("url", "code", "quote", "quotePHPost", "font", "size", "color", "img", "b", "i", "u", "align", "spoiler", "swf", "goear", "hr", "li" DESPUES DE: 'li'AGREGAR: , "jd" LUEGO BUSCAR: array("url", "/(?i)\[url\=(http|https|ftp|irc|ed2k|gopher|telnet|gopher|telnet)(\:\/\/)([^\<\>[:space:]]+?)\](.+?)(\[\/url\])/i", "<a href=\"\\1\\2\\3\" target=\"_blank\">\\4</a>"), DEBAJO AGREGAMOS: array("jd", "/(?i)(\[jd\])(.+?)(\[\/jd\])/i", '<form action="http://127.0.0.1:9666/flash/add" target="hidden" method="POST" id="jd"> <input name="source" value="http://google.com" type="hidden"> <input name="urls" id="urls" value="\\2" type="hidden"> <center><input class="jdbutton" id="subir" type="submit" onClick="zulux91();" value="Click para agregar a JDownloader"></center>'), EN ACCIONES.JS BUSCAMOS: lang['Upload'] = "Subir Im&aacute;genes"; DEBAJO AGREGAMOS: lang['Insertar enlace para jd'] = "Insertar enlace"; lang['Ingrese el enlace para JDownloader'] = "Ingrese el enlace para JDownloader"; lang['ingrese la para JDownloader'] = "Ingrese el enlace para JDownloader"; LUEGO MÁS ABAJO BUSCAMOS: /*{name:lang['Tu'], openWith:'[tu]', closeWith:'' },*/ Y AGREGAMOS ARRIBA: {name:lang['Insertar enlace para jd'], beforeInsert:function(h){ markit_jdownloader(h); }}, AGREGAR AL FINAL DEL ARCHIVO: /** * * Base64 encode / decode * http://www.webtoolkit.info/ * **/ var Base64 = { // private property _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", // public method for encoding encode : function (input) { var output = ""; var chr1, chr2, chr3, enc1, enc2, enc3, enc4; var i = 0; input = Base64._utf8_encode(input); while (i < input.length) { chr1 = input.charCodeAt(i++); chr2 = input.charCodeAt(i++); chr3 = input.charCodeAt(i++); enc1 = chr1 >> 2; enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); enc4 = chr3 & 63; if (isNaN(chr2)) { enc3 = enc4 = 64; } else if (isNaN(chr3)) { enc4 = 64; } output = output + this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) + this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4); } return output; }, // private method for UTF-8 encoding _utf8_encode : function (string) { string = string.replace(/\r\n/g,"\n"); var utftext = ""; for (var n = 0; n < string.length; n++) { var c = string.charCodeAt(n); if (c < 128) { utftext += String.fromCharCode(c); } else if((c > 127) && (c < 2048)) { utftext += String.fromCharCode((c >> 6) | 192); utftext += String.fromCharCode((c & 63) | 128); } else { utftext += String.fromCharCode((c >> 12) | 224); utftext += String.fromCharCode(((c >> 6) & 63) | 128); utftext += String.fromCharCode((c & 63) | 128); } } return utftext; }, } function markit_jdownloader(h){ if(h.selection==''){ var msg = prompt(lang['Ingrese el enlace para JDownloader'], 'http://'); if(msg != null){ h.replaceWith = '[jd]' + Base64.encode(msg) + '[/jd]'; h.openWith = ''; h.closeWith = ''; }else{ h.replaceWith = ''; h.openWith = ''; h.closeWith = ''; } }else if(h.selection.substring(0,7)=='http://' || h.selection.substring(0,8)=='https://' || h.selection.substring(0,6)=='ftp://'){ h.replaceWith = '[jd]' + Base64.encode(h.selection) + '[/jd]'; h.openWith=''; h.closeWith=''; } } EN FUNCIONES.JS AGREGAR AL FINAL DEL ARCHIVO: function base64_decode(data) { var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, dec = '', tmp_arr = []; if (!data) { return data; } data += ''; do { // unpack four hexets into three octets using index points in b64 h1 = b64.indexOf(data.charAt(i++)); h2 = b64.indexOf(data.charAt(i++)); h3 = b64.indexOf(data.charAt(i++)); h4 = b64.indexOf(data.charAt(i++)); bits = h1 << 18 | h2 << 12 | h3 << 6 | h4; o1 = bits >> 16 & 0xff; o2 = bits >> 8 & 0xff; o3 = bits & 0xff; if (h3 == 64) { tmp_arr[ac++] = String.fromCharCode(o1); } else if (h4 == 64) { tmp_arr[ac++] = String.fromCharCode(o1, o2); } else { tmp_arr[ac++] = String.fromCharCode(o1, o2, o3); } } while (i < data.length); dec = tmp_arr.join(''); return dec.replace(/\0+$/, ''); } function zulux91(){ $('#urls').val(base64_decode($('#urls').val())); $('#subir').removeAttr('onclick'); return false; } AL FINAL DEl ARCHIVO EXTRAS.CSS AGREGAMOS: .jdbutton { font-family: Arial, Helvetica, sans-serif; font-weight: bold; position: relative; font-size: 16px; color: #050505; padding: 12px 10px; background: -moz-linear-gradient( top, #ffffff 0%, #c7d95f 50%, #add136 50%, #448000); background: -webkit-gradient( linear, left top, left bottom, from(#ffffff), color-stop(0.50, #c7d95f), color-stop(0.50, #add136), to(#448000)); -moz-border-radius: 14px; -webkit-border-radius: 14px; border-radius: 14px; border: 1px solid #6d8000; -moz-box-shadow: 0px 1px 3px rgba(000,000,000,0.5), inset 0px 0px 2px rgba(255,255,255,1); -webkit-box-shadow: 0px 1px 3px rgba(000,000,000,0.5), inset 0px 0px 2px rgba(255,255,255,1); box-shadow: 0px 1px 3px rgba(000,000,000,0.5), inset 0px 0px 2px rgba(255,255,255,1); text-shadow: 0px -1px 0px rgba(000,000,000,0.2), 0px 1px 0px rgba(255,255,255,0.4); } .jdbutton:hover { font-weight: bold; box-shadow: 0 5px 5px #313131, 0 1px 0 #393939, 0px 9px 10px rgba(0,0,0,0.4), inset 0px 2px 15px rgba(255,255,255,0.4), inset 0 -2px 9px rgba(0,0,0,0.2); color: #fff !important; } PARA TERMINAR EN ESTILOS.CSS BUSCAMOS: /* FIN - CSS markItUp */ Y ARRIBA AGREGAMOS: .markItUp .markItUpButton18 a { background: transparent url('images/jd.png') no-repeat scroll left top; height: 10px; } AGREGAMOS LA SIGUIENTE IMAGEN A LA CARPETA images DEL TEMA EN USO No hay mucho que mostrar, pero igual les dejo algunas capturillas. Con el estilo hover Así queda en el código fuente Y eso es todo, espero les sea útil. Cualquier cosa, me chiflan y ayudaré en lo que pueda. Por último aclarar que para agregar varios enlaces, estos se deben agregar en el cuadro de diálogo separados por espacios y coma, por ejemplo: mienlace , mienlace , mienlace , mienlace CRÉDITOS: A Vellenger: Me basé en su mod: y algunas dudas que me aclaró. A Rhuan: Por haberme aclarado algunas dudas, muy agradecido. A todas las neuronas que perdieron la vida en el proceso de creación de este MOD.
  4. Aqui les quiero dejar este Complemento que es para poder ver y controlar las conversaciones de los usuarios mediante los mensajes. Ya que la vercion anterior fue eliminada por ser vulnerable, y ya que lo pedian aqui les dejo mi vercion para su utilidad. Trae opcion de vista previa de las conversaciones. Opcion para eliminar el mensaje. VIsta completa de las conversaciones. Paginacion Incluida. Opcion para responder el mensaje. No dispone de la Opcion para editar ya que no me parece util. ademas de que se tendria que hacer mas cosas, y no seria de mucha utilidad.. Comenzamos. En admin.php Bscamos: // CAMBIAR RANGO PREDETERMINADO DEL REGISTRO elseif($act == 'setdefault'){ if($tsAdmin->SetDefaultRango()) $tsCore->redirectTo($tsCore->settings['url'].'/admin/rangos?save=true'); } Y agregamos despues: /** Control de Mensajes x Vellenger **/ } elseif($action == 'control_mp'){ if(isset($_GET['delete'])) { $tsAdmin->delControl_mp($_GET['delete']); } $smarty->assign("tsControl_mp",$tsAdmin->getControl_mp()); En el archivo c.admin.php buscamos: } /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ } Y agregamos Arriba: public function getControl_mp() { global $tsCore; // $max = 20; // MAXIMO A MOSTRAR $limit = $tsCore->setPageLimit($max, true); $retorno['data']=result_array(mysql_query('SELECT mp.mp_id, mp.mp_from, mp.mp_subject, mp.mp_preview, u.user_name, u.user_id FROM u_mensajes AS mp LEFT JOIN u_miembros AS u ON u.user_id = mp.mp_from ORDER BY mp.mp_id DESC LIMIT '.$limit)); // PAGINAS $query = mysql_query('SELECT COUNT(mp_id) FROM u_mensajes'); list($total) = mysql_fetch_row($query); $retorno['pages'] = $tsCore->pageIndex($tsCore->settings['url'] . '/admin/control_mp?', $_GET['s'], $total, $max); return $retorno; } public function delControl_mp($id) { // filtramos // $id = (int) $id; mysql_query('DELETE FROM u_mensajes WHERE mp_id = '.$id); } En el archivo m.admin_sidemenu.tpl buscamos: <li id="a_rangos"><span class="cat-title"><a href="{$tsConfig.url}/admin/rangos">Rangos de Usuarios</a></span></li> Y agregamos Abajo: <li id="a_users"><span class="cat-title"><a href="{$tsConfig.url}/admin/control_mp">Control de Mp</a></span></li> En el archivo t.admin.tpl buscamos: {/if} Y agregamos arriba: {elseif $tsAction == 'control_mp'} {include file='admin_mods/m.control_mp.tpl'} Subimos el Archivo m.control_mp.tpl a la carpeta admin_mods http://puu.sh/3xa3c.zip Eso seria todo.. dentro del zip les dejo las instrucciones en un txt para el que lo quiera.. Espero que les sea de Utilidad.. Si precisan que lo mejore me avisan cuales serian y vemos que se puede hacer ok.. Hasta la Proxima..
  5. este es algo que a mi me jodia mucho y era no poder subir imagenes pequeñas menores a 100px asi que lo repare y les comparto el simple metodo para hacerlo jaja buscan en m.agregar_sidebar.tpl esto: img = img.replace(ext,'th.' + ext); y lo cambian por: img = img.replace(ext,'' + ext);
  6. Vengo a dejarles un código para los que quieran nieve cayendo en sus webs, es simple, fácil pero dado a la época. en main_header.tpl antes de </head> pengan el siguiente código. <script type="text/javascript"> {literal} //<![CDATA[ // Nieve en el blog /** @license DHTML Snowstorm! JavaScript-based Snow for web pages -------------------------------------------------------- Version 1.42.20111120 (Previous rev: 1.41.20101113) Copyright (c) 2007, Scott Schiller. All rights reserved. Code provided under the BSD License: http://schillmania.com/projects/snowstorm/license.txt */ var snowStorm=function(e,d){function g(a,d){isNaN(d)&&(d=0);return Math.random()*a+d}function o(){e.setTimeout(function(){a.start(true)},20);a.events.remove(i?d:e,"mousemove",o)}function r(){if(!a.excludeMobile||!s)a.freezeOnBlur?a.events.add(i?d:e,"mousemove",o):o();a.events.remove(e,"load",r)}this.flakesMax=128;this.flakesMaxActive=64;this.animationInterval=40;this.excludeMobile=true;this.flakeBottom=null;this.followMouse=true;this.snowColor="#ffffff";this.snowCharacter="&bull;";this.snowStick=true; this.targetElement=null;this.useMeltEffect=true;this.usePositionFixed=this.useTwinkleEffect=false;this.freezeOnBlur=true;this.flakeRightOffset=this.flakeLeftOffset=0;this.flakeHeight=this.flakeWidth=8;this.vMaxX=5;this.vMaxY=4;this.zIndex=0;var a=this,y=this,i=navigator.userAgent.match(/msie/i),z=navigator.userAgent.match(/msie 6/i),A=navigator.appVersion.match(/windows 98/i),s=navigator.userAgent.match(/mobile/i),B=i&&d.compatMode==="BackCompat",t=s||B||z,h=null,k=null,j=null,m=null,u=null,v=null, p=1,n=false,q;a:{try{d.createElement("div").style.opacity="0.5"}catch(C){q=false;break a}q=true}var w=false,x=d.createDocumentFragment();this.timers=[];this.flakes=[];this.active=this.disabled=false;this.meltFrameCount=20;this.meltFrames=[];this.events=function(){function a(b){var b=f.call(b),c=b.length;l?(b[1]="on"+b[1],c>3&&b.pop()):c===3&&b.push(false);return b}function d(a,c){var e=a.shift(),f=[b[c]];if(l)e[f](a[0],a[1]);else e[f].apply(e,a)}var l=!e.addEventListener&&e.attachEvent,f=Array.prototype.slice, b={add:l?"attachEvent":"addEventListener",remove:l?"detachEvent":"removeEventListener"};return{add:function(){d(a(arguments),"add")},remove:function(){d(a(arguments),"remove")}}}();this.randomizeWind=function(){var c;c=g(a.vMaxX,0.2);u=parseInt(g(2),10)===1?c*-1:c;v=g(a.vMaxY,0.2);if(this.flakes)for(c=0;c<this.flakes.length;c++)this.flakes[c].active&&this.flakes[c].setVelocities()};this.scrollHandler=function(){var c;m=a.flakeBottom?0:parseInt(e.scrollY||d.documentElement.scrollTop||d.body.scrollTop, 10);isNaN(m)&&(m=0);if(!n&&!a.flakeBottom&&a.flakes)for(c=a.flakes.length;c--;)a.flakes[c].active===0&&a.flakes[c].stick()};this.resizeHandler=function(){e.innerWidth||e.innerHeight?(h=e.innerWidth-(!i?16:16)-a.flakeRightOffset,j=a.flakeBottom?a.flakeBottom:e.innerHeight):(h=(d.documentElement.clientWidth||d.body.clientWidth||d.body.scrollWidth)-(!i?8:0)-a.flakeRightOffset,j=a.flakeBottom?a.flakeBottom:d.documentElement.clientHeight||d.body.clientHeight||d.body.scrollHeight);k=parseInt(h/2,10)};this.resizeHandlerAlt= function(){h=a.targetElement.offsetLeft+a.targetElement.offsetWidth-a.flakeRightOffset;j=a.flakeBottom?a.flakeBottom:a.targetElement.offsetTop+a.targetElement.offsetHeight;k=parseInt(h/2,10)};this.freeze=function(){var c;if(a.disabled)return false;else a.disabled=1;for(c=a.timers.length;c--;)clearInterval(a.timers[c])};this.resume=function(){if(a.disabled)a.disabled=0;else return false;a.timerInit()};this.toggleSnow=function(){a.flakes.length?(a.active=!a.active,a.active?(a.show(),a.resume()):(a.stop(), a.freeze())):a.start()};this.stop=function(){var c;this.freeze();for(c=this.flakes.length;c--;)this.flakes[c].o.style.display="none";a.events.remove(e,"scroll",a.scrollHandler);a.events.remove(e,"resize",a.resizeHandler);a.freezeOnBlur&&(i?(a.events.remove(d,"focusout",a.freeze),a.events.remove(d,"focusin",a.resume)):(a.events.remove(e,"blur",a.freeze),a.events.remove(e,"focus",a.resume)))};this.show=function(){var a;for(a=this.flakes.length;a--;)this.flakes[a].o.style.display="block"};this.SnowFlake= function(a,e,l,f){var b=this;this.type=e;this.x=l||parseInt(g(h-20),10);this.y=!isNaN(f)?f:-g(j)-12;this.vY=this.vX=null;this.vAmpTypes=[1,1.2,1.4,1.6,1.8];this.vAmp=this.vAmpTypes[this.type];this.melting=false;this.meltFrameCount=a.meltFrameCount;this.meltFrames=a.meltFrames;this.twinkleFrame=this.meltFrame=0;this.active=1;this.fontSize=10+this.type/5*10;this.o=d.createElement("div");this.o.innerHTML=a.snowCharacter;this.o.style.color=a.snowColor;this.o.style.position=n?"fixed":"absolute";this.o.style.width= a.flakeWidth+"px";this.o.style.height=a.flakeHeight+"px";this.o.style.fontFamily="arial,verdana";this.o.style.overflow="hidden";this.o.style.fontWeight="normal";this.o.style.zIndex=a.zIndex;x.appendChild(this.o);this.refresh=function(){if(isNaN(b.x)||isNaN(b.y))return false;b.o.style.left=b.x+"px";b.o.style.top=b.y+"px"};this.stick=function(){t||a.targetElement!==d.documentElement&&a.targetElement!==d.body?b.o.style.top=j+m-a.flakeHeight+"px":a.flakeBottom?b.o.style.top=a.flakeBottom+"px":(b.o.style.display= "none",b.o.style.top="auto",b.o.style.bottom="0px",b.o.style.position="fixed",b.o.style.display="block")};this.vCheck=function(){if(b.vX>=0&&b.vX<0.2)b.vX=0.2;else if(b.vX<0&&b.vX>-0.2)b.vX=-0.2;if(b.vY>=0&&b.vY<0.2)b.vY=0.2};this.move=function(){var d=b.vX*p;b.x+=d;b.y+=b.vY*b.vAmp;if(b.x>=h||h-b.x<a.flakeWidth)b.x=0;else if(d<0&&b.x-a.flakeLeftOffset<-a.flakeWidth)b.x=h-a.flakeWidth-1;b.refresh();if(j+m-b.y<a.flakeHeight)b.active=0,a.snowStick?b.stick():b.recycle();else{if(a.useMeltEffect&&b.active&& b.type<3&&!b.melting&&Math.random()>0.998)b.melting=true,b.melt();if(a.useTwinkleEffect)if(b.twinkleFrame)b.twinkleFrame--,b.o.style.visibility=b.twinkleFrame&&b.twinkleFrame%2===0?"hidden":"visible";else if(Math.random()>0.9)b.twinkleFrame=parseInt(Math.random()*20,10)}};this.animate=function(){b.move()};this.setVelocities=function(){b.vX=u+g(a.vMaxX*0.12,0.1);b.vY=v+g(a.vMaxY*0.12,0.1)};this.setOpacity=function(a,b){if(!q)return false;a.style.opacity=b};this.melt=function(){!a.useMeltEffect||!b.melting? b.recycle():b.meltFrame<b.meltFrameCount?(b.meltFrame++,b.setOpacity(b.o,b.meltFrames[b.meltFrame]),b.o.style.fontSize=b.fontSize-b.fontSize*(b.meltFrame/b.meltFrameCount)+"px",b.o.style.lineHeight=a.flakeHeight+2+a.flakeHeight*0.75*(b.meltFrame/b.meltFrameCount)+"px"):b.recycle()};this.recycle=function(){b.o.style.display="none";b.o.style.position=n?"fixed":"absolute";b.o.style.bottom="auto";b.setVelocities();b.vCheck();b.meltFrame=0;b.melting=false;b.setOpacity(b.o,1);b.o.style.padding="0px";b.o.style.margin= "0px";b.o.style.fontSize=b.fontSize+"px";b.o.style.lineHeight=a.flakeHeight+2+"px";b.o.style.textAlign="center";b.o.style.verticalAlign="baseline";b.x=parseInt(g(h-a.flakeWidth-20),10);b.y=parseInt(g(j)*-1,10)-a.flakeHeight;b.refresh();b.o.style.display="block";b.active=1};this.recycle();this.refresh()};this.snow=function(){for(var c=0,d=0,e=0,f=null,f=a.flakes.length;f--;)a.flakes[f].active===1?(a.flakes[f].move(),c++):a.flakes[f].active===0?d++:e++,a.flakes[f].melting&&a.flakes[f].melt();if(c<a.flakesMaxActive&& (f=a.flakes[parseInt(g(a.flakes.length),10)],f.active===0))f.melting=true};this.mouseMove=function(c){if(!a.followMouse)return true;c=parseInt(c.clientX,10);c<k?p=-2+c/k*2:(c-=k,p=c/k*2)};this.createSnow=function(c,d){var e;for(e=0;e<c;e++)if(a.flakes[a.flakes.length]=new a.SnowFlake(a,parseInt(g(6),10)),d||e>a.flakesMaxActive)a.flakes[a.flakes.length-1].active=-1;y.targetElement.appendChild(x)};this.timerInit=function(){a.timers=!A?[setInterval(a.snow,a.animationInterval)]:[setInterval(a.snow,a.animationInterval* 3),setInterval(a.snow,a.animationInterval)]};this.init=function(){var c;for(c=0;c<a.meltFrameCount;c++)a.meltFrames.push(1-c/a.meltFrameCount);a.randomizeWind();a.createSnow(a.flakesMax);a.events.add(e,"resize",a.resizeHandler);a.events.add(e,"scroll",a.scrollHandler);a.freezeOnBlur&&(i?(a.events.add(d,"focusout",a.freeze),a.events.add(d,"focusin",a.resume)):(a.events.add(e,"blur",a.freeze),a.events.add(e,"focus",a.resume)));a.resizeHandler();a.scrollHandler();a.followMouse&&a.events.add(i?d:e,"mousemove", a.mouseMove);a.animationInterval=Math.max(20,a.animationInterval);a.timerInit()};this.start=function(c){if(w){if(c)return true}else w=true;if(typeof a.targetElement==="string"&&(c=a.targetElement,a.targetElement=d.getElementById(c),!a.targetElement))throw Error('Snowstorm: Unable to get targetElement "'+c+'"');if(!a.targetElement)a.targetElement=!i?d.documentElement?d.documentElement:d.body:d.body;if(a.targetElement!==d.documentElement&&a.targetElement!==d.body)a.resizeHandler=a.resizeHandlerAlt; a.resizeHandler();a.usePositionFixed=a.usePositionFixed&&!t;n=a.usePositionFixed;if(h&&j&&!a.disabled)a.init(),a.active=true};a.events.add(e,"load",r,false);return this}(window,document); //]]> {/literal} </script> Fuente
  7. Control de Mensajes Privados V2 Aqui es comparto este mod que me pidieron, si bien anteriormente había dejado un que tenia la misma funcion, solo tenia datos del autor del mensaje, y ocupaba info de las conversaciones. Esta muestra las conversaciones entre los usuarios en un contenido aparte, ademas de la opción de enviar alertas o eliminar respuestas o mensajes completos. Los mensajes se mostraran segun actualicen sus respuestas, esto se debe a que algunos usuarios envian mensajes normales, y despues de un tiempo envian mensajes no deseados como spam, ya que los mensajes antiguos no los tomarian en cuenta, asi que con esto cuando envien un nuevo mensaje, o una respuesta saldran primero. En .htaccess buscamos: RewriteRule ^admin/news/nueva inc/php/admin.php?action=news&act=nuevo [QSA,L] Y agregamos abajo: RewriteRule ^admin/mensajes/leer/([0-9]+)$ inc/php/admin.php?action=mensajes&act=leer&mpid=$1 [QSA,L] En c.user.php buscamos: /* getUserName($user_id) */ function getUserName($user_id){ // $query = mysql_query('SELECT user_name FROM u_miembros WHERE user_id = \''.(int)$user_id.'\' LIMIT 1'); $tsUser = mysql_fetch_assoc($query); // return $tsUser['user_name']; } Y agregamos abajo: /* getUserRango($user_id) */ function getUserRango($user_id){ // $query = mysql_query('SELECT r.rango_id, r.r_name, r.r_color, u.user_id, u.user_rango FROM u_rangos AS r LEFT JOIN u_miembros AS u ON u.user_rango = r.rango_id WHERE user_id = \''.(int)$user_id.'\' LIMIT 1'); $tsUser = mysql_fetch_assoc($query); // return $tsUser['r_color']; } En c.admin.php al final buscamos: /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ } Y agregamos arriba: function delMensajes() { global $tsCore; $mp = $_POST['mp']; if (mysql_num_rows(mysql_query('SELECT mp_id FROM u_mensajes WHERE mp_id = \'' . $tsCore->setSecure($mp) . '\' LIMIT 1'))) { if (mysql_query('DELETE FROM u_mensajes WHERE mp_id = \'' . $tsCore->setSecure($mp) . '\'')) mysql_query('DELETE FROM u_respuestas WHERE mp_id = \'' . $tsCore->setSecure($mp) . '\''); return '1: Mensaje Eliminado'; } else return '0: El mensaje no existe'; } function delMpres() { global $tsCore; $rmp = $_POST['rmp']; if (mysql_num_rows(mysql_query('SELECT mr_id FROM u_respuestas WHERE mr_id = \'' . $tsCore->setSecure($rmp) . '\' LIMIT 1'))) { if (mysql_query('DELETE FROM u_respuestas WHERE mr_id = \'' . $tsCore->setSecure($rmp) . '\'')) return '1: Respuesta Eliminada'; } else return '0: El mensaje no existe'; } En admin.php buscamos: } elseif($action == 'temas'){ Y lo cambiamos por: }elseif($action == 'mensajes'){ include("../class/c.mp.php"); $tsMp =new tsMp(); if(empty($act)){ $smarty->assign("tsCmp",$tsMp->getControlMp()); } elseif($act == 'leer'){ $smarty->assign("tsDatamp",$tsMp->getDatmp()); $smarty->assign("tsLeermp",$tsMp->getLeermp()); } } elseif($action == 'temas'){ Mas abajo buscamos: $smarty->assign("tsUsername",$tsUser->getUserName($user_id)); Y agregamos abajo: $smarty->assign("tsUserRango",$tsUser->getUserRango($user_id)); En ajax.admin.php buscamos: 'admin-badwords-delete' => array('n' => 4, 'p' => ''), Y agregamos abajo: 'admin-mensajes-borrar' => array('n' => 4, 'p' => ''), 'admin-respuestas-borrar' => array('n' => 4, 'p' => ''), Mas abajo buscamos: default: die('0: Este archivo no existe.'); break; Y agregamos arriba: case 'admin-mensajes-borrar': //<--- echo $tsAdmin->delMensajes(); //---> break; case 'admin-respuestas-borrar': //<--- echo $tsAdmin->delMpres(); //---> break; En admin.js buscamos: users: { setInActive: function(uid){ Y agregamos arriba: mp : { borrar:function(mp_id, gew){ if(!gew){ mydialog.show(); mydialog.title('Borrar Mensaje'); mydialog.body('&#191;Quieres borrar el mensaje completo?'); mydialog.buttons(true, true, 'S&iacute;', "admin.mp.borrar('" + mp_id + "', true)", true, false, true, 'No', 'close', true, true); mydialog.center(); }else{ $('#loading').fadeIn(250); $.post(global_data.url + '/admin-mensajes-borrar.php', 'mp=' + mp_id, function(a){ mydialog.alert((a.charAt(0) == '0' ? 'Opps!' : 'Hecho'), a.substring(3), false); mydialog.center(); success: if(a.charAt(0) == '1') $('#mp_' + mp_id).fadeOut(); $('#loading').fadeOut(350); }); } }, }, rmp : { borrar:function(mr_id, gew){ if(!gew){ mydialog.show(); mydialog.title('Borrar Respuesta'); mydialog.body('&#191;Quiere borrar la respuesta?'); mydialog.buttons(true, true, 'S&iacute;', "admin.rmp.borrar('" + mr_id + "', true)", true, false, true, 'No', 'close', true, true); mydialog.center(); }else{ $('#loading').fadeIn(250); $.post(global_data.url + '/admin-respuestas-borrar.php', 'rmp=' + mr_id, function(a){ mydialog.alert((a.charAt(0) == '0' ? 'Opps!' : 'Hecho'), a.substring(3), false); mydialog.center(); success: if(a.charAt(0) == '1') $('#rmp_' + mr_id).fadeOut(); $('#loading').fadeOut(350); }); } }, }, En t.admin.tpl buscamos: {/if} Y agregamos arriba: {elseif $tsAction == 'mensajes'} {include file='admin_mods/m.admin_control_mp.tpl'} Al final de extras.css agregamos: ul.lest-mp li{display:block;padding:5px 5px 5px 10px;border-bottom:1px solid #EEE;} ul.lest-mp li a img{width:38px;height:38px;padding:1px;border:1px solid #CCC;} ul.lest-mp li a img:hover{background:#FFF;opacity:0.70;} ul.lest-mp{border:1px solid #EEE;border-bottom:none;} ul.lest-mp li span{position:absolute;margin-left:10px;color:#999;} ul.lest-mp li span a{margin-right:10px;} ul.lest-mp li h2{font-weight:300;color:#000;} ul.lest-mp li h2 a{font-weight:300;} .bodymp{ position:relative; background:#EEE; width:620px; padding:5px; height:auto; margin:-20px 5px 5px 52px; border:1px dashed #CCC; border-radius:5px; -moz-border-radius:5px; -webkit-border-radius:5px; -o-border-radius:5px; color:#666; } .frommp { height:40px; background:#DEDEDE url('images/icons/comments.png') no-repeat 10px 10px; 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; border:1px solid #CCC; } .frommp h2{margin-left:40px;} .delres{position:absolute;right:30px;} .pag-compl { overflow: hidden; clear: both; color: transparent; margin:10px 0 10px 25px; } .pag-compl b { -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; color: #fff; background: #65D43B; background: -moz-linear-gradient(top, #88E64F 0%, #5ED037 100%); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#88E64F), to(#5ED037)); border: 1px solid #53A32E; padding: 4px 10px; display: inline-block; text-shadow: 0 -1px 1px #6ACB3C; } .pag-compl a { padding: 5px 10px; display: inline-block; font-weight: bold; border: 1px solid #bbb; color: #555!important; text-shadow: 0 1px 0 #EEE; background: #E4E4E4; background: -moz-linear-gradient(top, #FCFCFC 0%, #EEE 100%); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#FCFCFC), to(#EEE)); -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } .pag-compl a:hover { color: #888!important; text-shadow: 0 1px 0 #EEE; background: #E4E4E4!important; text-decoration: none; background: -moz-linear-gradient(top, #FCFCFC 0%, #ddd 100%)!important; background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#FCFCFC), to(#ddd))!important; } En m.admin_sidemenu.tpl buscamos: <li id="a_rangos"><span class="cat-title"><a href="{$tsConfig.url}/admin/rangos">Rangos de Usuarios</a></span></li> Y agregamos abajo: <li id="a_mensajes"><span class="cat-title"><a href="{$tsConfig.url}/admin/mensajes">Control de Mensajes</a></span></li> En admin.css buscamos: li#a_rangos {background-image: url(../images/icons/crown.png);} Y agregamos abajo: li#a_mensajes {background-image: url(../images/icon-mensajes-recibidos.gif);} Subimos los arhivos a sus respectivas carpetas.... https://mega.co.nz/#!URVRgIjL!bQXolwRJcIJfioxzVDN5PJO7GBHjVP2R3YZ9Pp-L6Gc Espero les sea de utilidad. Usar como un medio de control para evitar el spam. Hasta la próxima. Control-Mp.zip
  8. Buenas tardes, vuelvo con este tema que actualize con otro mod, esta vez, el Credito es para : alexander1712 : Bueno, gracias a el, saco muchos mods muy buenos, por ej: Fuente, Comunidades v4, Phpost Musica, Phpost Juegos! y tiene mas seguro. AVISO: Yo estoy usando la V5 de To-Up, tambien los codigos se puede usar en Default, menos en la parte de m.admin.sidemenu, ya que en la V5 es : a.a-sidebar . Comenzemos con la actualizacion del mod: Busquen el archivo c.admin.php en Inc/class y busquen : /****************** ADMINISTRACIÓN DE FOTOS ******************/ Y arriba de eso, ponemos este codigo: /****************** ADMINISTRACIÓN DE COMENTARIOS ACTUALIZADO ******************/ function GetAdminComents() { global $tsCore; // $max = 18; // MAXIMO A MOSTRAR $limit = $tsCore->setPageLimit($max, true); // $query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT p.post_title, p.post_id, u.user_id, u.user_name, c.cid, c.c_body, c.c_date, c.c_ip, s.c_seo FROM p_comentarios AS c LEFT JOIN u_miembros AS u ON c.c_user = u.user_id LEFT JOIN p_posts AS p ON c.c_post_id = p.post_id LEFT JOIN p_categorias AS s ON s.cid = p.post_category WHERE c.cid > \'0\' ORDER BY cid DESC LIMIT ' . $limit); // $data['data'] = result_array($query); // coments $query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT COUNT(*) FROM p_comentarios WHERE cid > \'0\''); list($total) = db_exec('fetch_row', $query); $data['pages'] = $tsCore->pageIndex($tsCore->settings['url'] . "/admin/coments?", $_GET['s'], $total, $max); // return $data; } function DelAdminComents($id) { $id = (int) $id; //filtro anti sqli id. db_exec(array(__FILE__, __LINE__), 'query', "delete from p_comentarios where cid = $id"); } function GetAdminComent_unique($id) { $id = (int) $id; $query = db_exec(array(__FILE__, __LINE__), 'query', "SELECT cid, c_body FROM p_comentarios WHERE cid = $id"); return db_exec('fetch_array', $query); } function UPDAdminComents($id,$corpus) { $id = (int) $id; //filtramos $corpus = db_exec('real_escape_string', htmlspecialchars(stripslashes($corpus))); //lo recontra re filtramos db_exec(array(__FILE__, __LINE__), 'query', "update p_comentarios set c_body='$corpus' where cid=$id"); echo show_error('Error al ejecutar la consulta de la l&iacute;nea '.__LINE__.' de '.__FILE__.'.', 'db'); } Ahora busquen el archivo admin.php en Inc/Php y busquen : // POSTS Y arriba de eso, ponemos este codigo: //////////////////////////////////////////////////////////////////// // coments by alexander1712 } elseif($action == 'coments'){ if(!$act) { $smarty->assign("tsAdminComents",$tsAdmin->GetAdminComents()); } elseif ($act == 'c_delete') { $tsAdmin->DelAdminComents($_GET['id']); $smarty->assign("tsAdminComents",$tsAdmin->GetAdminComents()); } elseif ($act == 'c_editar') { //levantar datos y hacer formulario $smarty->assign("tsAdminComentsContent",$tsAdmin->GetAdminComent_unique($_GET['id'])); } elseif ($act == 'c_edit2') { //guardar datos $tsAdmin->UPDAdminComents($_POST['id'],$_POST['cuerpo']); $smarty->assign("tsAdminComents",$tsAdmin->GetAdminComents()); } //////////////////////////////////////////////////////////////////// Ahora busquemos este archivo t.admin.tpl en tutheme/templates y busquen: {include file='admin_mods/m.admin_posts.tpl'} Y abajo poner este codigo: {elseif $tsAction == 'coments'} {if $tsAct!='c_editar'} {include file='admin_mods/m.admin_coments.tpl'} {else} {include file='admin_mods/m.admin_coments_edit.tpl'} {/if} Ahora creen un archivo que sea .tpl , el nombre del archivo se tiene que llamar: m.admin_coments.tpl .y copien todo este codigo <div class="boxy-title"> <h3>Administrar Comentarios</h3> </div> <div id="res" class="boxy-content" style="position:relative"> {if $tsAct == '' || $tsAct == 'c_delete' || $tsAct == 'c_edit2'} {if !$tsAdminComents.data} <div class="phpostAlfa">No hay comentarios.</div> {else} <table cellpadding="0" cellspacing="0" border="0" class="admin_table" width="100%" align="center"> <thead> <th>ID</th> <th>Autor</th> <th>Comentario</th> <th>Fecha</th> <th>Post</th> <th>ip</th> <th>Acciones <a id="actionsee" onclick="$('#actionsee').slideUp( 120, 'easeInOutElastic'); $('.right').fadeOut('slow').css('width', '920px').slideDown( 1700, 'easeInOutElastic'); $('.left').slideUp( 1500, 'easeInOutElastic'); $('#moreinfo').slideDown('fast'); "><img src="{$tsConfig.default}/images/icons/details.png" width="14px" height="14px" title="M&aacute;s informaci&oacute;n" /></a></th> </thead> <tbody> {foreach from=$tsAdminComents.data item=c} <tr id="post_{$c.cid}"> <td>{$c.cid}</td> <td><a href="{$tsConfig.url}/perfil/{$c.user_name}" class="hovercard" uid="{$c.user_id}">{$c.user_name}</a></td> <td>{$c.c_body|truncate:50}</td> <td>{$c.c_date|hace:true}</td> <td id="status_post_{$p.cid}"><a href="{$tsConfig.url}/posts/{$c.c_seo}/{$c.post_id}/{$c.post_title|seo}.html" target="_blank">{$c.post_title|truncate:30}</a></td> <td id="moreinfo1_2"><a href="{$tsConfig.url}/moderacion/buscador/1/1/{$c.c_ip}" class="geoip" target="_blank">{$c.c_ip}</a></td> <td class="admin_actions"> <a href="{$tsConfig.url}/admin/coments?act=c_editar&id={$c.cid}"><img src="{$tsConfig.default}/images/icons/editar.png" title="Editar Comentario" /></a> <a href="{$tsConfig.url}/admin/coments?act=c_delete&id={$c.cid}"><img src="{$tsConfig.default}/images/icons/close.png" title="Borrar Comentario" /></a> </td> </tr> {/foreach} </tbody> <tfoot> <td colspan="7">P&aacute;ginas: {$tsAdminComents.pages}</td> </tfoot> </table> {/if} {/if} </div> Y lo suben a tutheme/templates/admin_mods Y ahora creen otro archivo que sea tpl. , el nombre del archivo se tiene que llamar : m.admin_coments_edit.tpl y copien todo el codigo <center> <div class="form-add-post" > <form action="{$tsConfig.url}/admin/coments?act=c_edit2" method="post" name="newartist" autocomplete="off"> <ul class="clearbeta"> <li> <label>Comentario</label> <span style="display: none;" class="errormsg"></span> <br /><input type="hidden" value="{$tsAdminComentsContent.cid}" name="id"/><textarea name="cuerpo" tabindex="2" style="min-height:200px; width:600px;" >{$tsAdminComentsContent.c_body}</textarea> </li> </ul> <div class="end-form clearbeta" style="width:600px;"> <center><input tabindex="8" value="Guardar!" name="preview" class="mBtn btnGreen" style="width: auto; margin-left: 5px;" type="submit"></center> </div> </form> </div> </center> Y ahora vayamos a buscar el archivo a.a-sidebar , se encuentra en V5/templates/b_toup/administracion y busquen : <li><a {if $tsAction == 'rangos'}id="activo-mod"{/if} href="{$tsConfig.url}/admin/rangos" style="width: 228px;"><img src="{$tsConfig.tema.t_url}/images/icons/crown.png" />Rangos de Usuarios</a></li> Y abajo de eso, agregan esto <li><a {if $tsAction == 'posts'}id="activo-mod"{/if} href="{$tsConfig.url}/admin/coments" style="width: 228px;"><img src="{$tsConfig.tema.t_url}/images/icons/users.png" />Todos los Comentarios</a></li> Y listo, asi va a quedar : Aviso: El color negro esta puesto a proposito para la seguridad de mis usuarios de mi pagina. Y ahora para los que quieren el Default con este mod, tiene que hacer todos los pasos menos el a.a-sidebar, Busquen el archivo m.admin.sidemenu.tpl que se encuentra en tutheme/templates/admin_mods y añaden esto abajo de todos los posts: <li id="a_posts"><span class="cat-title"><a href="{$tsConfig.url}/admin/coments"> todos los Comentarios</a></span></li> Y listo, ya estara el Mod en Default tambien , saludos y hasta la proxima , vendre con otra actualizacion, si no sabes actualizar y queres que lo haga, decime y con gusto te ayudo. SOLO APORTO CON LA ACTUALIZACION PARA LOS USUARIOS DE PHPOST QUE NO SEPAN COMO ACTUALIZAR LA VERSION.
  9. a pedido de un usuario de este topic les traigo este mod que es simple, agregaremos el like box como un modulo en la home y que si quieren pueden agregarlo en toda la web... empecemos, primero que nada van a esta direccion: https://developers.facebook.com/docs/plugins/like-box-for-pages/ luego les aparecera algo como esto: llenan los datos de esta forma. donde dice Face page url: tienen que colocar la url de la pagina que crearon en facebook, sino la tienen crence una... ya clicleando el resto de opciones se daran cuenta para que sirve, una vez configurado a su gusto le dan clik en el boton azul que dice Get Code saldra una ventana de dialogo como esta y es aqui donde biene el problema, si alguna vez crearon una aplicacion y tiene el SandBox Mode osea que solo tu puedes verlo no se vera nada en tu web, asi que cambien eso en su app de facebook (osea desactiven esa funcion), para los que nunca hecho una app, o no tienen el mod login de facebook el face cojera tu id de face eso creo no estoy seguro porque estoy haciendo esto a la ligera casi sin pensarlo... bien deben copiar esos dos codigos que estan en el tag html5 y pegarlo donde se les diga en el siguiente archivo que les voy a dejar http://www.mediafire.com/download/oo9ur38t2h453u3/m_mod_like_box.tpl lo abren con su editor favorito de texto y copian los dos textos que les salio en la ventanita de face tal cual como se los deje en el archivo, luego lo suben a la carpeta modules de su theme. en una parte del segundo codigo les dice esto: data-width="250" data-colorscheme="light" el data-with="250" es el ancho de la caja del mod depende del theme, el ancho que van usar ustedes lo ajustan para que les quede, hay esta 250px de ancho sin el px ojo con esto... para el que pidio esto creo y calculo que su ancho va a ser unos 300px osea: data-width="300" data-colorscheme="light" seguimos con la instalacion, abrimos nuestro t.home.tpl que esta en la carpeta templates y veran algo como esto: {include file='sections/main_header.tpl'} {$tsInstall} <div id="izquierda"> {include file='modules/m.home_last_posts.tpl'} </div> <div id="centro"> {include file='modules/m.home_search.tpl'} {include file='modules/m.home_stats.tpl'} {include file='modules/m.home_last_comments.tpl'} {include file='modules/m.home_top_posts.tpl'} {include file='modules/m.home_top_users.tpl'} <!--Poner aqui mas modulos--> </div> <div id="derecha"> {if $tsConfig.c_fotos_private == 1 && !$tsUser->is_member} {else} {include file='modules/m.home_fotos.tpl'} {/if} {include file='modules/m.home_afiliados.tpl'} <br class="spacer"/> {include file='modules/m.global_ads_160.tpl'} </div> <div style="clear:both"></div> {include file='sections/main_footer.tpl'} nos fijamos en esta parte: <div id="derecha"> {if $tsConfig.c_fotos_private == 1 && !$tsUser->is_member} {else} {include file='modules/m.home_fotos.tpl'} {/if} {include file='modules/m.home_afiliados.tpl'} <br class="spacer"/> {include file='modules/m.global_ads_160.tpl'} </div> y agregamos este codigo {include file='modules/m.mod_like_box.tpl'} despues de {include file='modules/m.home_afiliados.tpl'} y les quedaria asi: <div id="derecha"> {if $tsConfig.c_fotos_private == 1 && !$tsUser->is_member} {else} {include file='modules/m.home_fotos.tpl'} {/if} {include file='modules/m.home_afiliados.tpl'} {include file='modules/m.mod_like_box.tpl'} <br class="spacer"/> {include file='modules/m.global_ads_160.tpl'} </div> guardan y ya les quedara funcionando, ya segun el caso si quieren que esto les aparescan en toda la web, pues deberan agregar esa linea en todos los otros archivos t.fotos, t.perfil etc... se muy duro o agregan uno en el main_footer.tpl y le agregan un gran ancho y se les vera en toda la web sin ningun problema.. ya con el mod instalado les quedara algo asi, en mi caso tomando la idea del footer bien espero que le sirva a todos y especial a quien lo pidio...
  10. Aqui les quiero dejar la segunda parte de este Mini-Mod que al aprecer les gustaron a mas de uno, Asi que aqui les dejo la segunda parte,, SI bien en la primera los datos se guardaban, no habia manera de editarles los valores, asi que le d esa correccion ademas de cambiar la tabla sql donde se guardaban de forma entera y no decimal, sino se fundirian con el dinero que darian con cifras redondas,, Comenzamos deberan tener instalada la primera vecion. Pero no creen las tablas con el instalador. ( Repasen los pasos en el archivo c.cuenta.php no se olviden de agregar u.user_prem, y en el perfil es asi {$tsInfo.user_prem} ) Una ves instalada se necesita hacerle cambios. donde ingresaron: // Dinero x Posts Administrables by Vellenger mysql_query('UPDATE u_miembros SET user_prem = user_prem + \''.(int)$tsCore->settings['x_posts'].'\' WHERE user_id = \''.(int)$tsUser->uid.'\''); Lo cambian por: // Dinero x Posts Administrables by Vellenger mysql_query('UPDATE u_miembros SET user_prem = user_prem + \''.(float)$tsCore->settings['x_posts'].'\' WHERE user_id = \''.(int)$tsUser->uid.'\''); Lo que se agrega en m.admin_configs.tpl donde esta maxlength="3" lo cambian a maxlength="4" o dependiendo de las cifras.. Ahora la segunda parte. En el archivo admin.php buscamos: case 8: if(!empty($_POST['save'])){ $update = $tsAdmin->setUserFirma($user_id); if($update == 'OK') $tsCore->redirectTo($tsCore->settings['url'].'/admin/users?act=show&uid='.$user_id.'&save=true'); else $smarty->assign("tsError",$update); } $smarty->assign("tsUserF",$tsAdmin->getUserData()); break; Y agregamos despues: case 9: if(!empty($_POST['save'])){ $update = $tsAdmin->setUserDinerox($user_id); if($update == 'OK') $tsCore->redirectTo($tsCore->settings['url'].'/admin/users?act=show&uid='.$user_id.'&save=true'); else $smarty->assign("tsError",$update); } $smarty->assign("tsUserF",$tsAdmin->getUserData()); break; En el archivo c.admin.php buscamos: function setUserFirma($user_id) { global $tsCore; if (mysql_query('UPDATE `u_perfil` SET user_firma = \'' . $tsCore->setSecure($_POST['firma']) . '\' WHERE user_id = \'' . (int)$user_id . '\'')) return true; } Y agragamos abajo: function setUserDinerox($user_id) { global $tsCore; $ipuser= $_SERVER['REMOTE_ADDR']; $saldo = '<b style="color:#005CA5;">Su saldo se a Actualizado a : $'.$tsCore->setSecure($_POST['prem']).'</b>'; if (mysql_query('UPDATE `u_miembros` SET user_prem = \'' . $tsCore->setSecure($_POST['prem']) . '\' WHERE user_id = \'' . (int)$user_id . '\'')) if (mysql_query('INSERT INTO `u_avisos` (`user_id`, `av_subject`, `av_body`, `av_date`, `av_type`) VALUES (\''.(int)$user_id.'\', \'Actualizaci&oacute;n\', \''.$saldo.'\', \''.time().'\', \'0\')')) if (mysql_query('INSERT INTO `u_avisos` (`user_id`, `av_subject`, `av_body`, `av_date`, `av_type`) VALUES (\'1\', \'Se cambio al saldo \', \'Se cambio el saldo del usuario: <img class="hovercard" uid="'.(int)$user_id.'" style="width:16px; height:16px;cursor:pointer;" src="'.$tsCore->settings['url'].'/files/avatar/'.(int)$user_id.'_120.jpg"></img>\', \''.time().'\', \'0\')')) if (mysql_query('INSERT INTO `u_pagos` (`user_id`, `av_ip`, `av_body`, `av_date`, `av_type`) VALUES (\''.(int)$user_id.'\', \' ip: '.$ipuser.'\', \''.$tsCore->setSecure($_POST['prem']).'\', \''.time().'\', \'0\')')) return true; } Hacen esta consulta SQL en su BD CREATE TABLE IF NOT EXISTS `u_pagos` ( `av_id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `av_ip` varchar(100) NOT NULL, `av_body` varchar(24) NOT NULL, `av_date` int(10) NOT NULL, `av_read` int(1) NOT NULL DEFAULT '0', `av_type` int(1) NOT NULL DEFAULT '0', PRIMARY KEY (`av_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=93 ; Ahora hacemos esta consulta; ALTER TABLE `w_configuracion` ADD `x_posts` float NOT NULL DEFAULT '0'; NOTAS.. En esta segunda parte podran descontar el dinero acumulado cuando sea requerido. Se le dara notificacion al usuario de su saldo actualizado . Una notificacion sera enviada al primer administrador de la accion realizada. ( por si alguien cambia datos ) Y se guardaran un historial de los cobros o descuento de la cantidad que se tenia antes y despues. Consejos, Si al ingresar un valor de opcion en la admin el valor recomendado es de 0.01 o cual Uds. quieran asi como lo ven con un punto . Si bien este es un Mini-Mod lo ire completando cada ves mas.. Despues le dejare la tercera parte donde va la solicitud del autor, y el control detallado en la admin de las acciones de todos los pagos. Espero que les guste.. Queda en responsabilidad de Uds. de usar y no hacerle Falsas Promesas de pago a un usuario, agan responsable su uso, que seguramente los usuarios le pondran empeño si le agrada el pago, Talves no lo puedan usar todos, ya que no todos disponemos de dinero para su pago, pero para el que si pueda trate de sacar probecho de ello. Hasta la Proxima.. Dudas, Consultas, Reclamos Me lo pueden hacer saber, No olviden de regresar a este topic xq siempre surgen problemas y las respuesta las dejo en los COMENTARIOS.. Tambien agregan a extras.css .inp-v { border-radius:4px; -moz-border-radius:4px; -webkit-border-radius:4px; -o-border-radius:4px; border-right: solid 1px #C6C6C6; border-left: solid 1px #C6C6C6; border-top: solid 1px #CECECE; border-bottom: solid 1px #A4A4A4; box-shadow: 0 1px 1px lightGrey; -mox-box-shadow: 0 1px 1px #D3D3D3; -webkit-box-shadow: 0 1px 1px lightGrey; } .inp-v:hover { box-shadow: 0 0 5px 0 #B5DFF1; -moz-box-shadow: 0 0 5px 0 #B5DFF1; -webkit-box-shadow: 0 0 5px 0 #B5DFF1; border: 1px solid #38B2E5; } .inp-v:focus { box-shadow: 0 0 5px 0 #B5DFF1; -moz-box-shadow: 0 0 5px 0 #B5DFF1; -webkit-box-shadow: 0 0 5px 0 #B5DFF1; border: 1px solid #38B2E5; }
  11. hoy les traigo este mod xD primero van a t.home.tpl abajo de {include file='sections/main_header.tpl'} agregan <br> <div class="separador-web">Seleccion de categorias.</div> <div class="jojoman">{foreach from=$tsConfig.categorias item=c} <li><a title="Filtrar tutoriales por {$c.c_nombre}" target="_self" href="{$tsConfig.url}/posts/{$c.c_seo}/"><img title="{$c.c_nombre}" class="qtip selecciona_cat" src="{$tsConfig.url}/themes/default/images/icons/cat/{$c.c_img}"></a></li> {/foreach}</div> suben estos tpl a sus carpetas http://www.mediafire.com/?kki57dj7p55t9mz y en estilos.css ponen al final .selecciona_cat { background: none repeat scroll 0 0 white; border: 1px solid #CCCCCC; float: left; height: 35px; margin-left: 5.3px; padding: 3px; right: 40px; text-align: center; width: 35px; margin-top: 9px; -webkit-transition: all 250ms ; -moz-transition: all 250ms ; -ms-transition: all 250ms ; -o-transition: all 250ms ; transition: all 250ms ; opacity: 0.5; } .selecciona_cat:hover { margin-top: 2px; -webkit-transition: all 250ms ; -moz-transition: all 250ms ; -ms-transition: all 250ms ; -o-transition: all 250ms ; transition: all 250ms ; box-shadow: 0 7px 2px -5px #CCCCCC; opacity: 1; } .separador-web { border-bottom: 2px solid #333333; clear: both; color: #333333; font-family: oswald; font-size: 14px; font-weight: 300; height: 20px; margin-bottom: 10px; opacity: 0.6; text-align: left; text-transform: uppercase; }
  12. Hola gente les traigo este mod, cumpleaños en la home como aparece aquí en el foro Asi: Bueno, la instalación es la siguiente: 1. en c.afiliados.php que está en inc/class (aqui para no cargar tanto c.posts.php como siempre se instalanlos mods ahí.) Agregan esta función antes de la última llave } /* Cumpleaños by kmario19 */ function getBirthday(){ global $tsUser, $tsCore; // ZONA HORARIA date_default_timezone_set("America/Bogota"); // TIEMPO $mes = date("m",time()); $dia = date("d",time()); $ano = date("Y",time()); // DATOS $query = mysql_query('SELECT u.user_id, u.user_name, p.user_ano FROM u_miembros AS u, u_perfil AS p WHERE u.user_id = p.user_id AND u.user_baneado = 0 AND p.user_mes = \''.$mes.'\' AND p.user_dia = \''.$dia.'\''); $data['data'] = result_array($query); // TOTAL $data['total'] = count($data['data']); // AÑO ACTUAL $data['ano'] = $ano; // RETORNO return $data; } Como pueden notar está una linea que dice ZONA HORARIA ahí está mi zona horaria (Colombia) para que no tome la hora y fecha del servidor, sino que la modifiquen a su pais de residencia o cual quiera. Aquí les dejo una lista de las diferentes zonas horarias que encontré, para cambiarla reemplazan la cadena: "America/Bogota" por... 2. Ahora nos vamos a posts.php que está en inc/php y debajo de: // AFILIADOS $smarty->assign("tsAfiliados",$tsAfiliado->getAfiliados()); Agregamos // CUMPLEAÑOS $smarty->assign("tsBirthday",$tsAfiliado->getBirthday()); Después de esto solo falta agregar el tpl a la home que puede ser de esta manera: 3. Abrimos t.home.tpl que está en templates y arriba de {include file='modules/m.home_afiliados.tpl'} Agregamos {if $tsBirthday.data} {include file='modules/m.home_cumpleanos.tpl'} {/if} 4. Creamos un archivo llamado m.home_cumpleanos.tpl y lo guardamos en templates/modules y este será su contenido: <div id="lastCommBox"> <div class="box_title"> <div class="box_txt estadisticas">Cumplea&ntilde;os ({$tsBirthday.total})</div> <div class="box_rss"> </div> </div> <div class="box_cuerpo" style="padding-bottom: 3px;"> {foreach from=$tsBirthday.data item=b} <div style="font-weight: bold;margin-bottom: 5px;"> <a href="{$tsConfig.url}/perfil/{$b.user_name}" title="{$b.user_name}" style="display: inline-block;vertical-align: middle;margin-right: 5px;"> <img src="{$tsConfig.url}/files/avatar/{$b.user_id}_50.jpg" alt="{$b.user_name}"/> </a> {$b.user_name} ({$tsBirthday.ano-$b.user_ano}) </div> {/foreach} </div> <br class="space"/> </div> De igual forma pueden hacerle cualquier otro diseño y/o adaptarlo a su theme. Espero les guste el mod y les sea util, la verdad lo puse una vez en la web de un amigo y todo el mundo empezaba a desearle feliz cumpleaños en sus muros De cierto modo ayuda a que los usuarios se socialicen más entre ellos Saludos y nos vemos en otro mod
  13. Hola a todos en Phpost. Hace ya tiempo publiqué el mod Clic'N'Load 2 para Phpost pero que empleaba encriptación en Base64 y un tiempo después puse a la venta el Clic'N'Load 2 estándar con encriptación en 128 bits, como el que se emplea en Identi, par que se hagan una idea. En aquel momento mi situación era distinta al actual, por lo que ahora estoy en condiciones de compartir el mod con todos ustedes. Vamos a lo que importa encotnces. EN C.CORE.PHP BUSCAR: $parser->restriction = array('url', 'code', 'quote', 'quotePHPost', 'font', 'size', 'color', 'img', 'b', 'i', 'u', 'align', 'spoiler', 'swf', 'goear', 'hr', 'li'); DESPUES DE 'li' AGREAGAR , 'jd' EN BBCODE.INC.PHP BUSCAR: public $restriction = Array("url", "code", "quote", "quotePHPost", "font", "size", "color", "img", "b", "i", "u", "align", "spoiler", "swf", "goear", "hr", "li"); DESPUES DE "li" AGREAGAR , "jd" LUEGO BUSCAR: array("url", "/(?i)\[url\=(http|https|ftp|irc|ed2k|gopher|telnet|gopher|telnet)(\:\/\/)([^\<\>[:space:]]+?)\](.+?)(\[\/url\])/i", "<a href=\"\\1\\2\\3\" target=\"_blank\">\\4</a>"), AGREGAR DEBAJO: array("jd", "/(?i)(\[jd\])(.+?)(\[\/jd\])/ie", '$this->zulux91("\\2");'), AL FINAL DEL ARCHIVO ARRIBA DE LA ÚLTIMA LLAVE QUE CIERRA "}" AGREGAR: //Función Clic'N'Load2 de Jdownloader para Phpost desarrollada por Zulux91 public function zulux91($link){ $crypted=""; $key="1234567890987654"; $transmitKey=""; for($i=0;$i<strlen($key);$i++){ $tmp=ord(substr($key,$i,1)); $transmitKey.=dechex($tmp); } $cp = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', 'cbc', ''); @mcrypt_generic_init($cp, $key, $key); $enc = mcrypt_generic($cp, $link); mcrypt_generic_deinit($cp); mcrypt_module_close($cp); $crypted=base64_encode($enc); $return = "<FORM ACTION=\"http://127.0.0.1:9666/flash/addcrypted2\" target=\"hidden\" METHOD=\"POST\"> <INPUT TYPE=\"hidden\" NAME=\"passwords\" VALUE=\"\"> <INPUT TYPE=\"hidden\" NAME=\"source\" VALUE=\"http://google.com\"> <INPUT TYPE=\"hidden\" NAME=\"jk\" VALUE=\"function f(){ return '31323334353637383930393837363534';}\"> <INPUT TYPE=\"hidden\" NAME=\"crypted\" VALUE=\"".$crypted."\"> <center><INPUT CLASS=\"jdbutton\" TYPE=\"SUBMIT\" NAME=\"submit\" VALUE=\"Agregar enlaces a JDownloader\"><center></FORM>"; return $return; } AL FINAL DE EXTRAS.CSS AGREGAR: .jdbutton { font-family: Arial, Helvetica, sans-serif; position: relative; font-size: 16px; color: #050505; padding: 12px 10px; background: -moz-linear-gradient( top, #ffffff 0%, #c7d95f 50%, #add136 50%, #448000); background: -webkit-gradient( linear, left top, left bottom, from(#ffffff), color-stop(0.50, #c7d95f), color-stop(0.50, #add136), to(#448000)); -moz-border-radius: 14px; -webkit-border-radius: 14px; border-radius: 14px; border: 1px solid #6d8000; -moz-box-shadow: 0px 1px 3px rgba(000,000,000,0.5), inset 0px 0px 2px rgba(255,255,255,1); -webkit-box-shadow: 0px 1px 3px rgba(000,000,000,0.5), inset 0px 0px 2px rgba(255,255,255,1); box-shadow: 0px 1px 3px rgba(000,000,000,0.5), inset 0px 0px 2px rgba(255,255,255,1); text-shadow: 0px -1px 0px rgba(000,000,000,0.2), 0px 1px 0px rgba(255,255,255,0.4); } .jdbutton:hover { font-weight: bold; box-shadow: 0 5px 5px #313131, 0 1px 0 #393939, 0px 9px 10px rgba(0,0,0,0.4), inset 0px 2px 15px rgba(255,255,255,0.4), inset 0 -2px 9px rgba(0,0,0,0.2); color: #fff !important; } EN ACCIONES.JS BUSCAMOS: lang['Upload'] = "Subir Im&aacute;genes"; DEBAJO AGREGAMOS: lang['Insertar enlace para jd'] = "Insertar enlace"; lang['Ingrese el enlace para JDownloader'] = "Ingrese el enlace para JDownloader"; lang['ingrese la para JDownloader'] = "Ingrese el enlace para JDownloader"; LUEGO MÁS ABAJO BUSCAMOS: /*{name:lang['Tu'], openWith:'[tu]', closeWith:'' },*/ Y AGREGAMOS ARRIBA: {name:lang['Insertar enlace para jd'], beforeInsert:function(h){ markit_jdownloader(h); }}, AGREGAR AL FINAL DEL ARCHIVO: function markit_jdownloader(h){ if(h.selection==''){ var msg = prompt(lang['Ingrese el enlace para JDownloader'], 'http://'); if(msg != null){ h.replaceWith = '[jd]' + msg + '[/jd]'; h.openWith = ''; h.closeWith = ''; }else{ h.replaceWith = ''; h.openWith = ''; h.closeWith = ''; } }else if(h.selection.substring(0,7)=='http://' || h.selection.substring(0,8)=='https://' || h.selection.substring(0,6)=='ftp://'){ h.replaceWith = '[jd]' + h.selection + '[/jd]'; h.openWith=''; h.closeWith=''; } } PARA TERMINAR EN ESTILOS.CSS BUSCAMOS: /* FIN - CSS markItUp */ Y ARRIBA AGREGAMOS: .markItUp .markItUpButton18 a { background: transparent url('images/jd.png') no-repeat scroll left top; height: 10px; } AGREGAMOS ESTA IMAGEN A LA CARPETA "images" DEL TEMA EN USO Bueno esto es todo, no hay mucho que mostrar, pero les dejo como se ve en el código fuente. Por último aclarar que para agregar varios enlaces, estos se deben agregar en el cuadro de diálogo separados por espacios y coma, por ejemplo: mienlace , mienlace , mienlace , mienlace Espero les sea útil, y cualquier cosa avisen.
  14. Hola a todos les traigo este pequeño minimod, les mostrará los ultimos posts que agregaron a favoritos y será público si lo desean. 1. abrir c.cuenta.php que esta en inc/class y debajo de: // BLOQUEADO $query = mysql_query('SELECT * FROM `u_bloqueos` WHERE b_user = \''.$tsUser->uid.'\' AND b_auser = \''.(int)$user_id.'\' LIMIT 1'); $data['block'] = mysql_fetch_assoc($query); Agregar: // SEGURIDAD FAVORITOS if($data['p_configs']['favs'] == 0){ $data['can_favs'] = false; }elseif($data['p_configs']['favs'] == 3 && ($this->iFollow($user_id) || $tsUser->is_admod)){ $data['can_favs'] = true; }elseif($data['p_configs']['favs'] == 4 && ($this->yFollow($user_id) || $tsUser->is_admod)){ $data['can_favs'] = true; }elseif($data['p_configs']['favs'] == 5 && $tsUser->is_member){ $data['can_favs'] = true; }elseif($data['p_configs']['favs'] == 6){ $data['can_favs'] = true; } // POSTS FAVORITOS $query = mysql_query('SELECT f.fav_date, p.post_id, p.post_title, c.c_seo FROM p_favoritos AS f LEFT JOIN p_posts AS p ON p.post_id = f.fav_post_id LEFT JOIN p_categorias AS c ON c.cid = p.post_category WHERE fav_user = \''.(int)$user_id.'\' AND p.post_status = \'0\' ORDER BY f.fav_id DESC LIMIT 10'); $data['favs'] = result_array($query); // TOTAL $query = result_array(mysql_query('SELECT fav_id FROM p_favoritos WHERE fav_user = \''.(int)$user_id.'\'')); $data['favs_total'] = count($query); Ahora debajo de: $see_hits = ($_POST['last_hits'] == 1 || $_POST['last_hits'] == 2) ? 0 : $_POST['last_hits'];Agregar: $last_favs = ($_POST['last_favs'] > 6) ? 5 : $_POST['last_favs'];Y una línea abajo al lado de: 'hits' => $see_hitsAgregar: , 'favs' => $last_favs(Respetando la coma al principio) 2. En m.perfil_sidebar.tpl que esta en templates/modules, debajo de: <div style="margin-bottom: 10px"> {$tsConfig.ads_300} </div> Agregar: {if $tsInfo.can_favs} <div class="widget w-medallas clearfix"> <div class="title-w clearfix"> <h3>Posts favoritos de {$tsInfo.user_name}</h3> <span>{$tsInfo.favs_total}</span> </div> {if $tsInfo.favs_total > 0} <ul class="clearfix"> {foreach from=$tsInfo.favs item=f key=i} <li> <strong style="color: #36F;">{if $i <= 8}0{/if}{$i+1}. </strong> <a style="" href="{$tsConfig.url}/posts/{$f.c_seo}/{$f.post_id}/{$f.post_title|seo}.html" class="qtip size13" title="{$f.fav_date|hace}">{$f.post_title|truncate:45}</a> </li> {/foreach} </ul> {if $tsInfo.user_id == $tsUser->uid}<a href="{$tsConfig.url}/favoritos.php" class="see-more">Ver todos</a>{/if} {else} <div class="emptyData">No has agregado posts a tus favoritos.</div> {/if} </div> {/if} 3. En m.cuenta_config.tpl que está en templates/modules, arriba de: {if !$tsUser->is_admod} {if $tsPerfil.p_configs.rmp != 8} Agregar: <div class="field"> <label>ver &uacute;ltimos posts favoritos?</label> <div class="input-fake"> <select name="last_favs" class="cuenta-save-7"> {foreach from=$tsPrivacidad item=p key=i} {if $i != 1 && $i != 2}<option value="{$i}" {if $tsPerfil.p_configs.favs == $i}selected{/if}>{$p}</option>{/if} {/foreach} </select> </div> </div> Y listo, eso es todo, configuran la privacidad de sus favoritos si quieren que los vean sus seguidores, a quien siguen, usuarios registrados o nadie. Espero les haya gustado, nos vemos en otro mod, adios!
  15. Noticias para el Staff Aqui les comparto este complemento que me lo pidieron, el cual consiste que el primer admin pueda dejar un mensaje en la moderacion, asi lo podran ver los demas admin y moderadores. Hacemos esta consulta SQL CREATE TABLE IF NOT EXISTS `w_nstaff` ( `n_id` int(11) NOT NULL AUTO_INCREMENT, `n_body` text NOT NULL, `n_date` int(10) NOT NULL, `n_active` int(1) NOT NULL DEFAULT '0', PRIMARY KEY (`n_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; En c.admin.php al final buscamos: /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ } Y agregamos arriba: /* getNotistaff() */ function getNotistaff() { global $tsCore; // $n_id = $tsCore->setSecure($_GET['nid']); // $query = mysql_query('SELECT `n_id`, `n_body`, `n_date`, `n_active` FROM w_nstaff WHERE n_id = \'' . (int)$n_id . '\' LIMIT 1'); $data = mysql_fetch_assoc($query); // return $data; } /* getNstaff() */ function getNstaff() { // $query = mysql_query('SELECT * FROM w_nstaff WHERE n_id >0 ORDER BY n_id DESC'); $data = result_array($query); // return $data; } /* newNstaff() */ function newNstaff() { global $tsCore, $tsUser; // $n_body = $tsCore->setSecure($tsCore->parseBadWords(substr($_POST['n_body'], 0, 300))); $n_active = empty($_POST['n_active']) ? 0 : 1; if (!empty($n_body)) { if (mysql_query('INSERT INTO `w_nstaff` (`n_body`, `n_date`, `n_active`) VALUES (\'' . $n_body . '\', \'' . time() . '\', \'' . $n_active .'\')')) return true; } // return false; } /* editNstaff() */ function editNstaff() { global $tsCore, $tsUser; // $n_id = intval($_GET['nid']); $n_body = $tsCore->setSecure($tsCore->parseBadWords(substr($_POST['n_body'], 0, 300))); $n_active = empty($_POST['n_active']) ? 0 : 1; // if (!empty($n_body)) { if (mysql_query('UPDATE `w_nstaff` SET `n_body` = \'' . $n_body . '\', n_active = \'' . $n_active . '\' WHERE n_id = \'' . (int) $n_id . '\'')) return true; } } /* delNstaff(); */ function delNstaff() { $n_id = $_GET['nid']; if (!mysql_num_rows(mysql_query('SELECT `n_id` FROM `w_nstaff` WHERE `n_id` = \'' . (int)$n_id . '\' LIMIT 1'))) { return 'El id ingresado no existe.'; } mysql_query('DELETE FROM `w_nstaff` WHERE `n_id` = \'' . (int)$n_id . '\''); } function setNstaff() { global $tsUser; $nstaff = $_POST['nid']; $query = mysql_query('SELECT n_active FROM w_nstaff WHERE n_id = \'' . (int) $nstaff . '\''); $data = mysql_fetch_assoc($query); // COMPROBAMOS if ($data['n_active'] == 1) { if (mysql_query('UPDATE w_nstaff SET n_active = \'0\' WHERE n_id = \'' . (int) $nstaff . '\'')) { return '2: Noticia desactivada'; } else return '0: Ocurri&oacute, un error'; } else { if (mysql_query('UPDATE w_nstaff SET n_active = \'1\' WHERE n_id = \'' . (int) $nstaff . '\'')) { return '1: Noticia activada.'; } else return 'Ocurri&oacute; un error'; } } En c.moderacion.php al final de la ultima } Agregamos arriba: /* geNoticiasStaff() */ function geNoticiasStaff() { // $query = mysql_query('SELECT * FROM w_nstaff WHERE n_id >0 AND n_active= 1 ORDER BY n_id DESC'); // $data = result_array($query); // return $data; } En moderacion.php buscamos: $smarty->assign("tsMods",$tsMod->getMods()); Y agregamos abajo: $smarty->assign("tsNotistaff",$tsMod->geNoticiasStaff()); En admin.php buscamos: } elseif($action == 'news'){ Y lo cambiamos por: } elseif($action == 'nstaff'){ if(empty($act)) $smarty->assign("tsNstaffs",$tsAdmin->getNstaff()); elseif($act == 'nuevo' && !empty($_POST['n_body'])){ if($tsAdmin->newNstaff()) $tsCore->redirectTo($tsCore->settings['url'].'/admin/nstaff?save=true'); } elseif($act == 'editar'){ if(!empty($_POST['n_body'])){ if($tsAdmin->editNstaff()) $tsCore->redirectTo($tsCore->settings['url'].'/admin/nstaff?save=true'); } else $smarty->assign("tsNstaff",$tsAdmin->getNotistaff()); } elseif($act == 'borrar'){ if($tsAdmin->delNstaff()) $tsCore->redirectTo($tsCore->settings['url'].'/admin/nstaff?borrar=true'); } } elseif($action == 'temas'){ En ajax.admin.php buscamos: 'admin-noticias-setInActive' => array('n' => 4, 'p' => ''), Y agregamos abajo: 'admin-nstaff-setInActive' => array('n' => 4, 'p' => ''), Mas abajo buscamos: case 'admin-noticias-setInActive': //<--- echo $tsAdmin->setNoticiaInActive(); //---> break; Y agregamos abajo: case 'admin-nstaff-setInActive': //<--- echo $tsAdmin->setNstaff(); //---> break; En el archivo .htaccess Buscamos: RewriteRule ^admin/news/nueva inc/php/admin.php?action=news&act=nuevo [QSA,L] Y agregamos abajo: RewriteRule ^admin/nstaff/editar/([0-9]+)$ inc/php/admin.php?action=nstaff&act=editar&nid=$1 [QSA,L] RewriteRule ^admin/nstaff/nueva inc/php/admin.php?action=nstaff&act=nuevo [QSA,L] En el archivo admin.js buscamos: nicks : { Y agregamos arriba: nstaff : { accion: function(nid){ $('#loading').fadeIn(250); $.ajax({ type: 'POST', url: global_data.url +'/admin-nstaff-setInActive.php', data: 'nid=' + nid, success: function(h){ switch(h.charAt(0)){ case '0': //Error mydialog.alert('Error', h.substring(3)); break; case '1': // $('#status_nstaff_' + nid).html('<font color="green">Activa</font>'); break; case '2': // $('#status_nstaff_' + nid).html('<font color="purple">Inactiva</font>'); break; } $('#loading').fadeOut(350); } }); }, }, En t.admin.tpl al final buscamos: {/if} Y agregamos arriba: {elseif $tsAction == 'nstaff'} {include file='admin_mods/m.admin_staff.tpl'} En m.mod_welcome.tpl buscamos: <div class="boxy-title"> <h3>Centro de Moderaci&oacute;n</h3> </div> Y agregamos abajo: {if $tsNotistaff} <div class="notstaff"> <h2>Mensaje de Administraci&oacute;n</h2> <ul class="lastnstff"> {foreach from=$tsNotistaff key=i item=n} <li>{$i+1})&nbsp;&nbsp;{$n.n_body}</li> {/foreach} </ul> </div> {/if} Al final de extras.css agregamos: .notstaff { height:auto; background:#FFFFBF; border:2px dashed orange; } .notstaff h2 { color:red; padding:5px 0 5px 25px; } ul.lastnstff li { display:block; color:#006600; font-weight:600; font-family: Helvetica,Arial; font-size:12px; padding:10px; background:#FFF; border-top:1px solid orange; border-bottom:1px solid orange; margin:5px 0; } En m.admin_sidemenu.tpl buscamos: <li id="a_news"><span class="cat-title"><a href="{$tsConfig.url}/admin/news">Noticias</a></span></li> Y agregamos abajo: {if $tsUser->uid==1}<li id="a_news"><span class="cat-title"><a href="{$tsConfig.url}/admin/nstaff">Noticias Staff</a></span></li>{/if} Subimos el archivo a su respectiva carpeta, deje la instalación en un txt si les hace falta ok. Descarga Espero les sea de utilidad.. Hasta la próxima
  16. Hola amigos de PHPost, hace tiempo les dejé un MOD de Urls automaticas en posts pero tenían unos pequeños fallos. Ahora les traigo la v2. ¿Que cambia? - Fix bug interferencia con BBCode - Fix bug interferencia con BBCode - Fix bug se ve HTML al editar post SI TIENEN LA V1 HAGAN ESTO: Abren el c.posts.php de inc/class y buscan: $postData['body'] = eregi_replace('(((f|ht){1}tps?://)[[email protected]:%_+.~#?&//=]+)', '<a href="\1" target="_blank">\1</a>', $postData['body']); Y lo borran. AHORA LA V2 1) Abren el c.posts.php de inc/class y buscan: //VISITANTES RECIENTES if($postData['post_visitantes']){ $postData['visitas'] = result_array(mysql_query('SELECT v.*, u.user_id, u.user_name FROM w_visitas AS v LEFT JOIN u_miembros AS u ON v.user = u.user_id WHERE v.for = \''.(int)$postData['post_id'].'\' && v.type = \'2\' && v.user > 0 ORDER BY v.date DESC LIMIT 10')); } //PUNTOS if($postData['post_user'] == $tsUser->uid || $tsUser->is_admod){ $postData['puntos'] = result_array(mysql_query('SELECT p.*, u.user_id, u.user_name FROM p_votos AS p LEFT JOIN u_miembros AS u ON p.tuser = u.user_id WHERE p.tid = \''.(int)$postData['post_id'].'\' && p.type = \'1\' ORDER BY p.cant DESC')); } // CATEGORIAS $query = mysql_query('SELECT c.c_nombre, c.c_seo FROM p_categorias AS c WHERE c.cid = \''.$postData['post_category'].'\''); $postData['categoria'] = mysql_fetch_assoc($query); Y abajo añaden: //URLs automáticas $postData['post_body'] = preg_replace("@([[:space:]])(https?://([-\w.]+[-\w])+(:\d+)?(/([\w-.~:/?#\[\]\@!$&\'()*+,;=%]*)?)?)([[:space:]])@", '[url=$2]$2[/url]', $postData['post_body']); Y listo!! Caps: Al agregar un post: El resultado: Demo: http://programu.net/posts/phpost/76/-MOD-URLs-automaticas-en-posts-v2.html#demo Ahí pueden ver como quedan las URLs, y si bajan a abajo, pueden ver que el MOD no interfiere con las imágenes User: demo Pass: demo1234 Saludos
  17. Hace unos minutos leí en el chat que un usuario (nuestro querido ) estaba redactando un post muy largo y -sin querer- lo ha borrado. Algunos navegadores y editores permiten deshacer ese borrado fácilmente, ya sea con botones o pulsando las combinación de teclas "Control + Mayús + Z". Sin embargo, por si eso no fuera suficiente, recomiendo añadir el guardado automático en borradores. Hay otras formas de evitar eso, pero es algo no prioritario en estos momentos. Hay que tener en cuenta que aunque puede salvarte de esa situación, podría darle la vuelta a la moneda y jugar en tu contra. Pongámonos en la situación de que has escrito un post muy largo y lo guardas en borrador. Desde ese momento, el guardado automático comienza ejecutarse -por ejemplo- cada 15 segundos. Resulta que justo cuando va a guardarse, eliminas todo el contenido del post sin querer. Si la anterior combinación de teclas no funciona y el editor no incorpora la opción de "Deshacer", perderías el contenido redactado. Para evitar un poco esto, podéis hacer el paso 4. Es fácil de añadir, tan solo hay que seguir un par de pasos: 1. Abrir el archivo /themes/{tu_plantilla}/templates/modules/m.agregar_javascript.tpl. 2. Buscar: borrador_setTimeout = setTimeout('borrador_save_enabled()', 60000); 3. Añadir debajo: borrador_setTimeout = setTimeout('save_borrador()', 120000); Nota: donde dice "120000", hay que cambiarlo por la cantidad de segundos en los que queramos ejecutar el guardado. En este caso son dos minutos (120 segundos). Se debe poner con tres ceros finales, ya que son milisegundos. Yo recomiendo añadirlo cada par de minutos, no cada ciertos segundos; de manera que evitaremos sobrecargar el servidor MySQL. 4. Este paso es opcional, pero si quieres añadir una comprobación para evitar guardar un borrador vacío, hazlo. Debajo del código anterior, añade lo siguiente: var error = false; $('.required').each(function(){ if (!$.trim($(this).val())) { showError(this, 'Este campo es obligatorio'); $(this).parent('li').addClass('error'); error = true; return false; } }); if (error) { return false; }
  18. Hola [email protected] Hoy les traigo las Comunidades Para el Theme KM-Tronos adentro esta las instrucciones Descargar http://www.mediafire.com/?8slk5csr611hj16 Lo único que Falta es Modificar un poco de CSS y mas nada No dejo Demo por que lo hice en localhost y estoy apurado pero si una cap Bueno El que pueda editarlo un poco mejor bueno solo falta editar unos CSS Aclaro que las comunidades no son mía todas Son las Comunidades_Risus ESPERO SUS COMENTARIOS Perdón por las imágenes que se ven muy pequeñas
  19. Holas a todos Vengo aportar mis emoticones adaptado al mod de Kmario19, Aproximadamente son como 900 emoticones! Antes que nada deberán instalar el mod hasta el paso 16: http://www.phpost.net/topic/30098-mod-emoticones-administrables-v2/ 1. Descargamos el archivo donde viene consultas, iconos y emoticones --> Mega o si te gusta Mediafire 2. Subimos todo los emoticones que están en smiles en themes/default/images/icons/smiles 2.1. Subimos los iconos que están en Icons en themes/default/images/icons 3. Vamos a inc/ext/datos.php al final buscamos: /*CATEGORIAS EMOTICONES*/ $tsCatsEmotis = array( 1 => array('title' => 'Cl&aacute;sicos', 'data' => array()), array('title' => 'Memes', 'data' => array()), array('title' => 'Personas', 'data' => array()), array('title' => 'Naturaleza', 'data' => array()), array('title' => 'Objetos', 'data' => array()), array('title' => 'Lugares', 'data' => array()), array('title' => 'S&iacute;mbolos', 'data' => array()) );Reemplazamos por: /*CATEGORIAS EMOTICONES*/ $tsCatsEmotis = array( 1 => array('title' => 'Cl&aacute;sicos', 'icon' => 'caritas.png', 'data' => array()), array('title' => 'Memes', 'icon' => 'memes.png', 'data' => array()), array('title' => 'Naturaleza', 'icon' => 'naturaleza.png', 'data' => array()), array('title' => 'Objetos', 'icon' => 'objetos.png', 'data' => array()), array('title' => 'Lugares', 'icon' => 'lugares.png', 'data' => array()), array('title' => 'S&iacute;mbolos', 'icon' => 'simbolos.png', 'data' => array()) );4. Abrimos p.emoticones.load.tpl y buscamos: <li class="active" data-tab="0">Recientes</li>reemplazamos por: <li class="active" data-tab="0"> &nbsp;<img src="{$tsConfig.default}/images/icons/recientes.png"></li>luego buscamos: <li data-tab="{$i}">{$c.title}</li>reemplazamos por: <li data-tab="{$i}"> &nbsp;<img src="{$tsConfig.default}/images/icons/{$c.icon}"></li>5. Importamos la consulta w_emoticones.sql a nuestra base de datos y listo. Luego pueden seguir subiendo emoticones a gusto Créditos: Kmario19 me ayudo bastante, así que si ven un comentario de el por aquí, den +1 también a el Eso es todo, cualquier duda o consulta no olviden de comentar Saludos.-
  20. Hola amigos de PHPost!, a pedido de Jonas les traigo este MOD: Consiste en que puedes añadir un usuario secundario a un post, que tendrá permisos para editarlo y los puntos se repartirán a partes iguales entre los dos. ¿Que trae? - Poder poner a dos usuarios como dueños de un post. - Usuario secundario no puede votar, si es secundario en el post. - Usuario secundario puede editar post - Tarjeta de usuario secundario en post. La instalación es un poco larga, así que empecemos: 1) Hacen esta SQL en su BD: ALTER TABLE `p_posts` ADD `post_usec` INT( 11 ) NOT NULL DEFAULT '0'; 2) Abren el c.posts.php de inc/class y buscan: /* newPost() */ function newPost(){ global $tsCore, $tsUser, $tsMonitor, $tsActividad; // if($tsUser->is_admod || $tsUser->permisos['gopp']){ // $postData = array( 'date' => time(), 'title' => $tsCore->parseBadWords($tsCore->setSecure($_POST['titulo'], true)),2, 'body' => $tsCore->setSecure($_POST['cuerpo']), 'tags' => $tsCore->parseBadWords($tsCore->setSecure($_POST['tags'], true)),true,1, 'category' => intval($_POST['categoria']), Y justo abajo, agregan: 'sec' => empty($_POST['sec']) ? 0 : $tsCore->setSecure($_POST['sec']), En ese archivo buscan: //ANTIFLOOD $antiflood = 2; Y abajo agregan: if($postData['sec'] != 0){ $postData['sec'] = $tsUser->getUserID($postData['sec']); if($postData['sec'] == 0) return 'El usuario secundario ingresado no existe.'; } Luego buscan: if(mysql_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, Y justo al lado añaden: post_usec, Ahí cerca buscan: \''.(int)$postData['block_comments'].'\', \''.(int)$postData['sponsored'].'\', \''.(int)$postData['sticky'].'\', Y justo al lado agregan: \''.$postData['sec'].'\', ------------------------------------------------------------------------------------------------------------------------------------------------------------------------En ese archivo buscan: $query = mysql_query('SELECT post_user, post_sponsored, post_sticky, post_status FROM p_posts WHERE post_id = \''.(int)$post_id.'\' LIMIT 1'); Y lo reemplazan por: $query = mysql_query('SELECT post_user, post_sponsored, post_sticky, post_usec, post_status FROM p_posts WHERE post_id = \''.(int)$post_id.'\' LIMIT 1'); Luego buscan: if($data['post_status'] != '0' && !$tsUser->is_admod && !$tsUser->permisos['moedpo']) { return 'El post no puede ser editado.'; } // $postData = array( 'title' => $tsCore->parseBadWords($_POST['titulo'], true), 'body' => $tsCore->setSecure($_POST['cuerpo'], true), 'tags' => $tsCore->parseBadWords($tsCore->setSecure($_POST['tags'], true)), 'category' => $_POST['categoria'], ); Y lo reemplazan por: if($data['post_status'] != '0' && !$tsUser->is_admod && !$tsUser->permisos['moedpo'] && $tsUser->uid != $data['post_usec']) { return 'El post no puede ser editado.'; } // $postData = array( 'title' => $tsCore->parseBadWords($_POST['titulo'], true), 'body' => $tsCore->setSecure($_POST['cuerpo'], true), 'tags' => $tsCore->parseBadWords($tsCore->setSecure($_POST['tags'], true)), 'category' => $_POST['categoria'], 'sec' => empty($_POST['sec']) ? 0 : $tsCore->setSecure($_POST['sec']), ); if(!empty($postData['sec'])){ $postData['sec'] = $tsUser->getUserID($postData['sec']); if($postData['sec'] == 0) return 'El usuario secundario ingresado no existe.'; } En ese archivo buscan: post_visitantes = \''.$postData['visitantes'].'\', Y justo al lado añaden: post_usec = \''.$postData['sec'].'\', Luego buscan: // if(empty($ford['post_id'])){ return 'El post elegido no existe.'; }elseif($ford['post_status'] != '0' && $tsUser->is_admod == 0 && $tsUser->permisos['moedpo'] == false){ return 'El post no puede ser editado.'; }elseif(($tsUser->uid != $ford['post_user']) && $tsUser->is_admod == 0 && $tsUser->permisos['moedpo'] == false){ return 'No puedes editar un post que no es tuyo.'; } Y lo reemplazan por: // if(empty($ford['post_id'])){ return 'El post elegido no existe.'; }elseif($ford['post_status'] != '0' && $tsUser->is_admod == 0 && $tsUser->permisos['moedpo'] == false){ return 'El post no puede ser editado.'; }elseif(($tsUser->uid != $ford['post_user'] && $ford['post_usec'] != $tsUser->uid) && $tsUser->is_admod == 0 && $tsUser->permisos['moedpo'] == false){ return 'No puedes editar un post que no es tuyo.'; } $ford['post_usec'] = $tsUser->getUserName($ford['post_usec']); Buscan: if(empty($post_id)) return array('deleted','Oops! Este post no existe o fue eliminado.'); // DAR MEDALLA $this->DarMedalla($post_id); // DATOS DEL POST $query = mysql_query('SELECT c.* ,m.*, u.user_id FROM `p_posts` AS c LEFT JOIN `u_miembros` AS u ON c.post_user = u.user_id LEFT JOIN `u_perfil` AS m ON c.post_user = m.user_id WHERE `post_id` = \''.(int)$post_id.'\' '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? '' : 'AND u.user_activo = \'1\' && u.user_baneado = \'0\'').' LIMIT 1'); // $postData = mysql_fetch_assoc($query); Y abajo añaden: if($postData['post_usec'] > 0){ $postData['aut_sec'] = mysql_fetch_assoc(mysql_query('SELECT m.*, u.* FROM `p_posts` AS c LEFT JOIN `u_miembros` AS u ON c.post_usec = u.user_id LEFT JOIN `u_perfil` AS m ON c.post_usec = m.user_id WHERE `post_id` = \''.(int)$post_id.'\' '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? '' : 'AND u.user_activo = \'1\' && u.user_baneado = \'0\'').' LIMIT 1')); // $postData['aut_sec']['rango'] = mysql_fetch_assoc(mysql_query('SELECT * FROM `u_rangos` WHERE `rango_id` = \''.(int)$postData['aut_sec']['user_rango'].'\' LIMIT 1')); } Para acabar en este archivo buscan: // SUMAR PUNTOS $query = mysql_query('SELECT post_user FROM p_posts WHERE post_id = \''.(int)$post_id.'\' LIMIT 1'); $data = mysql_fetch_assoc($query); // ES MI POST? $is_mypost = ($data['post_user'] == $tsUser->uid) ? true : false; // NO ES MI POST, PUEDO VOTAR if(!$is_mypost){ // YA LO VOTE? $votado = mysql_num_rows(mysql_query('SELECT tid FROM p_votos WHERE tid = \''.(int)$post_id.'\' AND tuser = \''.$tsUser->uid.'\' AND type = \'1\' LIMIT 1')); if(empty($votado)){ // COMPROBAMOS LOS PUNTOS QUE PODEMOS DAR if($tsCore->settings['c_allow_points'] > 0) { $max_points = $tsCore->settings['c_allow_points']; }elseif($tsCore->settings['c_allow_points'] == '-1') { //TRUCO, podrás dar todos los puntos que tengas disponibles $max_points = $tsUser->info['user_puntosxdar']; }elseif($tsCore->settings['c_allow_points'] == '-2') { //TRUCO, podrás dar todos los puntos que quieras (sin abusar ¬¬), se restarán igual, si tienes puesto mantener puntos, estarás debiendo puntos durante una temporada. $max_points = 999999999; }else{ $max_points = $tsUser->permisos['gopfp']; } // TENGO SUFICIENTES PUNTOS if($tsUser->info['user_puntosxdar'] >= $puntos){ if($puntos > 0) { // Votar sin dar puntos? No, gracias. if($puntos <= $max_points) { // seroo churra XD ._. No alteraciones de javascript para sumar más de lo que se permite (? LOL ¬¬ // SUMAR PUNTOS AL POST mysql_query('UPDATE p_posts SET post_puntos = post_puntos + '.(int)$puntos.' WHERE post_id = \''.(int)$post_id.'\''); // SUMAR PUNTOS AL DUEÑO DEL POST mysql_query('UPDATE u_miembros SET user_puntos = user_puntos + \''.(int)$puntos.'\' WHERE user_id = \''.(int)$data['post_user'].'\''); Y lo reemplazan por: // SUMAR PUNTOS $query = mysql_query('SELECT post_user, post_usec FROM p_posts WHERE post_id = \''.(int)$post_id.'\' LIMIT 1'); $data = mysql_fetch_assoc($query); // ES MI POST? $is_mypost = ($data['post_user'] == $tsUser->uid || $data['post_usec'] == $tsUser->uid) ? true : false; // NO ES MI POST, PUEDO VOTAR if(!$is_mypost){ // YA LO VOTE? $votado = mysql_num_rows(mysql_query('SELECT tid FROM p_votos WHERE tid = \''.(int)$post_id.'\' AND tuser = \''.$tsUser->uid.'\' AND type = \'1\' LIMIT 1')); if(empty($votado)){ // COMPROBAMOS LOS PUNTOS QUE PODEMOS DAR if($tsCore->settings['c_allow_points'] > 0) { $max_points = $tsCore->settings['c_allow_points']; }elseif($tsCore->settings['c_allow_points'] == '-1') { //TRUCO, podrás dar todos los puntos que tengas disponibles $max_points = $tsUser->info['user_puntosxdar']; }elseif($tsCore->settings['c_allow_points'] == '-2') { //TRUCO, podrás dar todos los puntos que quieras (sin abusar ¬¬), se restarán igual, si tienes puesto mantener puntos, estarás debiendo puntos durante una temporada. $max_points = 999999999; }else{ $max_points = $tsUser->permisos['gopfp']; } // TENGO SUFICIENTES PUNTOS if($tsUser->info['user_puntosxdar'] >= $puntos){ if($puntos > 0) { // Votar sin dar puntos? No, gracias. if($puntos <= $max_points) { // seroo churra XD ._. No alteraciones de javascript para sumar más de lo que se permite (? LOL ¬¬ // SUMAR PUNTOS AL POST mysql_query('UPDATE p_posts SET post_puntos = post_puntos + '.(int)$puntos.' WHERE post_id = \''.(int)$post_id.'\''); // SUMAR PUNTOS AL DUEÑO DEL POST if($data['post_usec'] > 0){ $puntos = $puntos / 2; mysql_query('UPDATE u_miembros SET user_puntos = user_puntos + \''.(int)$puntos.'\' WHERE user_id = \''.(int)$data['post_user'].'\''); mysql_query('UPDATE u_miembros SET user_puntos = user_puntos + \''.(int)$puntos.'\' WHERE user_id = \''.(int)$data['post_usec'].'\''); }else{ mysql_query('UPDATE u_miembros SET user_puntos = user_puntos + \''.(int)$puntos.'\' WHERE user_id = \''.(int)$data['post_user'].'\''); } 3) Abren el m.post_content.tpl de themes/TUTEMA/templates/modules y buscan: {if !$tsUser->is_member}{include file='modules/m.global_ads_728.tpl'}{/if} Y abajo agregan: {if $tsPost.post_usec == $tsUser->uid} <a title="Editar Post" onclick="location.href='{$tsConfig.url}/posts/editar/{$tsPost.post_id}'; return false" href="" class="btnActions"> <img alt="Editar" src="{$tsConfig.images}/editar.png"/> Editar</a> {/if} 4) Abren el m.agregar_form.tpl de themes/TUTEMA/templates/modules y buscan: <li> <label>Tags</label> <span style="display: none;" class="errormsg"></span> <input type="text" tabindex="4" name="tags" maxlength="128" class="text-inp required" value="{$tsDraft.b_tags}"/> Una lista separada por comas, que describa el contenido. Ejemplo: <b>gol, ingleses, Copa Oro, futbol, Chicharito, M&eacute;xico</b> </li> Y abajo agregas: <li> <label>Usuario secundario</label> <input type="text" tabindex="4" name="sec" maxlength="128" class="text-inp required" value="{$tsDraft.b_usec}"/> Puedes insertar aqui un usuario que tendrá permiso para editar el post y los puntos obtenidos en este post se repartirán. <b>Verifica que escribes bien el usuario, escribe las mayúsculas, minisculás etc. que tenga su nick. De lo contrario, si introduces un usuario incorrecto se perderá mucha información.</b> </li> 5) Abren el m.post_autor.tpl de themes/TUTEMA/templates/modules y buscan: AVISO: Este diseño es para la v4, iré publicando diseños sueltos para diferentes themes </div> {/if} </div> <br /> Y abajo añades: <div class="post-autor vcard"> <div class="box_title"> <div class="box_txt post_autor">Usuario secundario:</div> <div class="box_rss"> <a href="{$tsConfig.url}/rss/posts-usuario/{$tsPost.aut_sec.user_name}"> <span style="position:relative;"> <img border="0" title="RSS con posts de {$tsPost.aut_sec.user_name}" alt="RSS con posts de Usuario" style="position:absolute; top:-354px; clip:rect(352px 16px 368px 0px);" src="{$tsConfig.images}/big1v12.png"/> <img border="0" style="width:14px;height:12px" src="{$tsConfig.images}/space.gif"/> </span> </a> </div> </div> <div class="avatarBox"> <a href="{$tsConfig.url}/perfil/{$tsPost.aut_sec.user_name}"> <img title="Ver perfil de {$tsPost.aut_sec.user_name}" alt="Ver perfil de {$tsPost.aut_sec.user_name}" class="avatar" src="{$tsConfig.url}/files/avatar/{$tsPost.aut_sec.user_id}_120.jpg"/> </a> </div> <a href="{$tsConfig.url}/perfil/{$tsPost.aut_sec.user_name}" style="text-decoration:none"> <span class="given-name" style="color:#{$tsPost.aut_sec.rango.r_color}">{$tsPost.aut_sec.user_name}</span> </a> <br /> <span class="title">{$tsPost.aut_sec.rango.r_name}</span> <br /> <img src="{$tsConfig.default}/images/space.gif" class="status {$tsPost.aut_sec.status.css}" title="{$tsPost.aut_sec.status.t}"/> <img src="{$tsConfig.default}/images/icons/ran/{$tsPost.aut_sec.rango.r_image}" title="{$tsPost.aut_sec.rango.r_name}" /> <img src="{$tsConfig.default}/images/icons/{if $tsPost.aut_sec.user_sexo == 0}female{else}male{/if}.png" title="{if $tsPost.aut_sec.user_sexo == 0}Mujer{else}Hombre{/if}" /> <img src="{$tsConfig.default}/images/flags/{$tsPost.aut_sec.pais.icon}.png" style="padding:2px" title="{$tsPost.aut_sec.pais.name}" /> {if $tsPost.aut_sec.user_id != $tsUser->uid}<a href="#" onclick="{if !$tsUser->is_member}registro_load_form();{else}mensaje.nuevo('{$tsPost.aut_sec.user_name}','','','');{/if}return false"><img title="Enviar mensaje privado" src="{$tsConfig.images}/icon-mensajes-recibidos.gif"/></a>{/if} {if !$tsUser->is_member} <hr class="divider"/> <a class="btn_g follow_user_post" href="#" onclick="registro_load_form(); return false"><span class="icons follow">Seguir Usuario</span></a> {elseif $tsPost.aut_sec.user_id != $tsUser->uid} <hr class="divider"/> <a class="btn_g unfollow_user_post" onclick="notifica.unfollow('user', {$tsPost.aut_sec.user_id}, notifica.userInPostHandle, $(this).children('span'))" {if !$tsPost.aut_sec.follow}style="display: none;"{/if}><span class="icons unfollow">Dejar de seguir</span></a> <a class="btn_g follow_user_post" onclick="notifica.follow('user', {$tsPost.aut_sec.user_id}, notifica.userInPostHandle, $(this).children('span'))" {if $tsPost.aut_sec.follow > 0}style="display: none;"{/if}><span class="icons follow">Seguir Usuario</span></a> {/if} <hr class="divider"/> <div class="metadata-usuario"> <span class="nData user_follow_count">{$tsPost.aut_sec.user_seguidores}</span> <span class="txtData">Seguidores</span> <span class="nData" style="color: #0196ff">{$tsPost.aut_sec.user_puntos}</span> <span class="txtData">Puntos</span> <span class="nData">{$tsPost.aut_sec.user_posts}</span> <span class="txtData">Posts</span> <span style="color: #456c00" class="nData">{$tsPost.aut_sec.user_comentarios}</span> <span class="txtData">Comentarios</span> </div> {if $tsUser->is_admod || $tsUser->permisos.modu || $tsUser->permisos.mosu} <hr class="divider"/> <div class="mod-actions"> <b>Herramientas</b> <a href="{$tsConfig.url}/moderacion/buscador/1/1/{$tsPost.post_ip}" class="geoip" target="_blank">{$tsPost.post_ip}</a> {if $tsUser->is_admod == 1}<a href="{$tsConfig.url}/admin/users?act=show&amp;uid={$tsPost.aut_sec.user_id}" class="edituser">Editar Usuario</a>{/if} {if $tsPost.aut_sec.user_id != $tsUser->uid} <a href="#" onclick="mod.users.action({$tsPost.aut_sec.user_id}, 'aviso', false); return false;" class="alert">Enviar Aviso</a>{/if} {if $tsPost.aut_sec.user_id != $tsUser->uid && $tsUser->is_admod || $tsUser->permisos.modu || $tsUser->permisos.mosu} {if $tsPost.aut_sec.user_baneado} {if $tsUser->is_admod || $tsUser->permisos.modu}<a href="#" onclick="mod.reboot({$tsPost.aut_sec.user_id}, 'users', 'unban', false); $(this).remove(); return false;" class="unban">Desuspender Usuario</a>{/if} {else} {if $tsUser->is_admod || $tsUser->permisos.mosu}<a href="#" onclick="mod.users.action({$tsPost.aut_sec.user_id}, 'ban', false); $(this).remove(); return false;" class="ban">Suspender Usuario</a>{/if} {/if} {/if} </div> {/if} </div> <br /> Y listo!!Les muestro caps: Espero que les guste Saludos y próximamente versiones para más themes
  21. Avatar aleatorio al registro; Hombre o Mujer = a Taringra! [TRON + Max Hurbano] Hola a todos!! Hoy les traigo éste MOD basado en el de TRON: aunque con algunas variantes y novedades. ¿Qué contiene? Avatar aleatorio al registro, ya sea para hombre o mujer. FIX para que funcione tanto el MOD, como el mensaje de bienvenida y el sexo correcto en el perfil. Carpeta comprimida con los distintos avatares. Un par de CAPs, xD. Antes de iniciar... IMPORTANTE: La estructura tanto de variables como de nombres de avatar, y rutas de los archivos de imagen son relativamente diferentes a los del MOD de TRON; si ya lo tienen instalado, deberán eliminar la carpeta avatarregistro, y cambiar el código en el archivo /inc/class/c.registro.php. Si no lo han hecho, deberán aplicar éste FIX: es para que se inserte el sexo correcto en el perfil. Por si lo olvido, recuérdenme aplicar el FIX para el mensaje de bienvenida, xD. Comencemos! Lo primero que haremos será subir ésta carpeta a la raíz de su web: https://mega.co.nz/#!RlEBWDxS!OeGBTGwgGtCqcpnhyusEhzgQ2QtWEqLsmGZpqv9EgMA Ya saben: la suben y descomprimen, o descomprimen y suben el contenido; repito: a la raíz. Abrimos el archivo /inc/class/c.registro.php y buscamos: // INSERTAMOS EL PERFIL mysql_query('INSERT INTO `u_perfil` (`user_id`, `user_dia`, `user_mes`, `user_ano`, `user_pais`, `user_estado`, `user_sexo`) VALUES (\''.(int)$tsData['user_id'].'\', \''.(int)$tsData['user_dia'].'\', \''.(int)$tsData['user_mes'].'\', \''.(int)$tsData['user_anio'].'\', \''.$tsData['user_pais'].'\', \''.$tsData['user_estado'].'\', \''.($tsData['user_sexo'] == 'f' ? 0 : 1).'\')'); mysql_query('INSERT INTO `u_portal` (`user_id`) VALUES (\''.(int)$tsData['user_id'].'\')'); Y agregamos debajo: /////////////////////AVATAR ALEATORIO BY TRON + MAX HURBANO///////////////////// $number=rand(0,10); if($tsData['user_sexo'] != 'f'){ $name=$number.'.jpg'; $namemini=$number.'.jpg'; }else{ $name=$number.'.png'; $namemini=$number.'.png'; } copy('../../files/avatar/registro/'.$name.'','../../files/avatar/'.$tsData['user_id'].'_120.jpg'); copy('../../files/avatar/registro/mini/'.$namemini.'','../../files/avatar/'.$tsData['user_id'].'_50.jpg'); mysql_query('UPDATE u_perfil SET p_avatar= 1 WHERE user_id = \''.$tsData['user_id'].'\''); ////////////////FIN AVATAR ALEATORIO BY TRON + MAX HURBANO///////////// Para el FIX de bienvenida, buscamos: if($tsData['user_sexo'] == 1) $sexo = 'Bienvenido'; else $sexo = 'Bienvenida'; Y reemplazamos con: if($tsData['user_sexo'] != 'f') $sexo = 'Bienvenido'; else $sexo = 'Bienvenida'; Y creo que eso sería todo. CAPS: Creado en localhost y testeado en http://taringra.net/ CREDITOS: TRON, aperpen, Max Hurbano. Hasta el próximo!
  22. Hola [email protected] Hoy Les traigo las Comunidades v2 para el Theme KM-Tronos Hubo Muchas Mejoras de CSS Cap (No hay Demo) Link (Mediafire) http://www.mediafire.com/?yv8z8a6gpx9fk4i Creo que sirve Solo para el de Color Verde Esta al 85% Echo faltan algunas cosas Pero yo no voy a Poder Hacerlo Por que es algo muy Avanzado Tiene Algunos Bug Bueno Espero que le Guste!!!
  23. iamchavo

    Ultimas Fotos en POST!

    Hola buen dia, queria saber de que forma podria poner las ultimas fotos que aparecen en la Home, en los Post! Les dejo una captura : Ese cuadro que aparece a la derecha es el mismo que tengo en la Home, me gustaria colocarlo tambien ahi, para que cuando alguien entre a ver un POST , vea a la derecha las ultimas imagenes! Saludos!
  24. Anonimizador de enlaces con Adfly Este complemento es similar a los demas que ya había posteado anteriormente, pero es diferente, se caracteriza por encriptar las url de manera visual y en el codigo fuente en el momento de querer ver el enlace, Este No jalara enlaces internos en la web, y se puede optar si solo tomara a los visitantes o a miembros registrados. El mecanismo es simple, al ingresar una url se encriptara los enlaces y al ir al el se abira una ventana con el protector de los enlaces, el cual al darle click se abrira un popup, con un contador de tiempo que despues de haber pasado el tiempo de espera, se cerrara solo, y mostrara el enlace que estaba oculto. En bbcode.inc.php buscamos: array("url", "/(?i)(\[url\])(http|https|ftp|irc|ed2k|gopher|telnet)(\:\/\/)([^\<\>[:space:]]+?)(\[\/url\])/i", "<a href=\"\\2\\3\\4\" target=\"_blank\">\\2\\3\\4</a>"), array("url", "/(?i)\[url\=(http|https|ftp|irc|ed2k|gopher|telnet|gopher|telnet)(\:\/\/)([^\<\>[:space:]]+?)\](.+?)(\[\/url\])/i", "<a href=\"\\1\\2\\3\" target=\"_blank\">\\4</a>"), Y lo cambiamos por: array("url", "/(?i)(\[url\])(http|https|ftp|irc|ed2k|gopher|telnet)(\:\/\/)([^\<\>[:space:]]+?)(\[\/url\])/i", '<a href="'.$tsCore->settings['url'].'/go/?p=\\2\\3\\4" target="_blank" class="encoded" data-url="\\2\\3\\4">\\2\\3\\4</a>'), array("url", "/(?i)\[url\=(http|https|ftp|irc|ed2k|gopher|telnet|gopher|telnet)(\:\/\/)([^\<\>[:space:]]+?)\](.+?)(\[\/url\])/i", '<a href="'.$tsCore->settings['url'].'/go/?p=\\1\\2\\3" target="_blank" class="encoded" data-url="\\1\\2\\3">\\4</a>'), Al final de funciones.js agregamos: function base64_encode (data) { // mozilla has this native // - but breaks in 2.0.0.12! //if (typeof this.window['btoa'] === 'function') { // return btoa(data); //} var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, enc = "", tmp_arr = []; if (!data) { return data; } do { // pack three octets into four hexets o1 = data.charCodeAt(i++); o2 = data.charCodeAt(i++); o3 = data.charCodeAt(i++); bits = o1 << 16 | o2 << 8 | o3; h1 = bits >> 18 & 0x3f; h2 = bits >> 12 & 0x3f; h3 = bits >> 6 & 0x3f; h4 = bits & 0x3f; tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4); } while (i < data.length); enc = tmp_arr.join(''); var r = data.length % 3; return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3); } $(document).ready(function(){ $('a.encoded').each(function(){ var new_url = $(this).data('url'); $(this).attr('href', '' + global_data.url + '/go/?p='+base64_encode(new_url)); }); }); Dentro de t.go.tpl buscar: var url_web ="http://adf.ly/6181022/http://vellenger.com/";Y cambian por sus datos, ( ID de adfly y la Url de la web que quieran) Tambien pueden usar linkbucks, adfocus, o similares si lo desean . En go.php encontraran: $tsUser->is_member==false && $tsUser->is_member==trueDe esa manera tomara a visitantes y a registrados, si quieren que solo jale a visitantes solo dejan: $tsUser->is_member==true O si quieren que tome a todos menos a los del staff cambian por: $tsUser->is_admod Codigo fuente Despues del tiempo transcurrido Descarga en la demo DEMO Creditos para David007 por el codigo encode que es de el. Pueden aplicar el mod de url automaticas, asi les evitara que tengan que ingresar los enlaces con la etiqueta del bbcode.
  25. Hola compañeros de PHPost, hoy recordando mi viejo foro, les traigo unos anuncios en barras, yo solo lo modifique un poquito y lo adapte, es algo simple y no vi un topic aqui, pero seguro a alguien le puede gustar o servir. PASOS: 1) Primero suben m.anunciobar.tpl en /themes/TuTema/templates/modules 2) Subir la carpeta anunciobar en /themes/default/images 3) entrar a t.home.tpl en /themes/TuTema/templates y Buscan <div id="izquierda"> Y arriba agregamos: {include file='modules/m.anunciobar.tpl'} Asi se ve en la default: Para editar los anuncios editan m.anunciobar.tpl y listo. Muy facil de instalar. Demo: Barras de Anuncios DEMO Descargar desde MEGA: Click aqui Descargar desde MEDIAFIRE: Click aqui Tambien pueden usar una sola o dos,cambiar la imagen y eso es a gusto de cada uno, bueno eso es todo.. Saludos a todos!
×