Jump to content

Buscar en La Comunidad

Showing results for tags 'Complementos-Mod'.



More search options

  • Search By Tags

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

Tipo de Contenido


Foros

  • El núcleo de PHPost
    • Novedades e información
    • Off Topic
    • Presentaciones
  • PHPost Risus
    • Actualizaciones
    • Versión 1.1
    • Versión 1.2
  • La esquina
    • Rincón del PC
    • Rincón del móvil
  • Next [last version]'s Fix's
  • Next [last version]'s Theme
  • Next [last version]'s Notas!
  • Risus2's Tutoriales
  • Risus2's MODS
  • Risus2's Servicios
  • Next [last version]'s Bugs
  • Risus2's Webs
  • Risus2's Bugs
  • Risus2's Opinión
  • Juegos de Steam Gratis's Activos
  • Risus2's JS
  • Risus2's PHP y Smarty
  • Risus2's El Script
  • Risus2's Diseño
  • Juegos de Steam Gratis's Finalizados
  • Risus2's Off-topic
  • Risus2's Fixes

Calendars

  • Risus2's Calendario

Encontramos 785 resultados

  1. Hola amigos les traigo un mod complemento que pidio oiramsomel el este cual consiste en que podamos introducir videos iframe embed de reproductores tales como nowvideo, allmyvideo entre muchos otros. Bueno empezamos 1º vamos a bbcode.inc.php que esta en la carpeta ext en la ruta inc/ext desde la raiz del sitio y buscamos class BBCode { /** * @name $restriction * @description Que BBCodes podrán ser convertidos */ public $restriction = Array("url", "code", "quote", "quotePHPost", "font", "size", "color", "img", "b", "i", "u", "align", "spoiler", "swf", "goear", "hr", "li", "s", "sub", "sup", "table", "td", "tr", "ul", "ol", "notice", "info", "warning", "error", "success"); y despues de , "success" ponemos , "ifra" quedando asi class BBCode { /** * @name $restriction * @description Que BBCodes podrán ser convertidos */ public $restriction = Array("url", "code", "quote", "quotePHPost", "font", "size", "color", "img", "b", "i", "u", "align", "spoiler", "swf", "goear", "hr", "li", "s", "sub", "sup", "table", "td", "tr", "ul", "ol", "notice", "info", "warning", "error", "success", "ifra" ); 2º Un poco mas abajo buscamos private function complexParse(&$st, $t){ // ELEMNTOS BBCode $elements = array( array("url", "/(?i)(\[url\])(http|https|ftp|irc|ed2k|gopher|telnet)(\:\/\/)([^\<\>[:space:]]+?)(\[\/url\])/i", "<a href=\"\\2\\3\\4\" target=\"_blank\">\\2\\3\\4</a>"), array("url", "/(?i)\[url\=(http|https|ftp|irc|ed2k|gopher|telnet|gopher|telnet)(\:\/\/)([^\<\>[:space:]]+?)\](.+?)(\[\/url\])/i", "<a href=\"\\1\\2\\3\" target=\"_blank\">\\4</a>"), justo debajo de la ultima coma ponemos array("ifra", "/(?i)\[ifra\=(.+?)\]/i", "<iframe width=\"780\" height=\"480\" src=\"\\1\" marginheight=\"0\" align=\"top\" scrolling=\"no\" frameborder=\"0\" hspace=\"0\" vspace=\"0\" allowfullscreen></iframe><br />"), array("ifra", "/(?i)\[goear\]([a-z0-9]{7})\[\/ifra\]/i", "<iframe width=\"780\" height=\"480\" src=\"\\1\" marginheight=\"0\" align=\"top\" scrolling=\"no\" frameborder=\"0\" hspace=\"0\" vspace=\"0\" allowfullscreen></iframe><br />"), bueno por ahora acabamos en bbcode.inc.php 3ºAhora nos vamos al archivo c.core.php que esta en la carpteta class en en la ruta inc/class desde la raiz del sitio y buscamos function parseBBCode($bbcode, $type = 'normal', $t){ // CLASS BBCode include_once(TS_EXTRA . 'bbcode.inc.php'); $parser =& BBCode::getInstance(); switch($type){ // NORMAL case 'normal': // RESTRICTIONS $parser->restriction = array('url', 'code', 'quote', 'quotePHPost', 'font', 'size', 'color', 'img', 'b', 'i', 'u', 'align', 'spoiler', 'swf', 'goear', 'hr', 'li', 's', 'sup', 'sub', 'table', 'tr', 'td', 'ul', 'ol', 'notice', 'info', 'warning', 'error', 'success'); despues de , 'success' ponemos , 'ifra' con esto acabamos en el archivo c.core.php y por consiquiente con los archivos php 4º ahora subimos esta imagen a la carpeta wysibb que esta en la ruta themes/TUTHEME/images/wysibb/ desde la raiz del sitio web y la guardamos con el nombre de IfraVideo.png 5º vamos al archivo wysibb.css que esta en la carpeta css en la ruta themes/TUTHEME/css/ y al final del todo agregamos .ifravideo{background-image:url('../images/wysibb/IfraVideo.png');background-position:-17px 0px;background-position:top left;background-repeat:no-repeat;margin:4px 2px!important;height:20px!important;} 6º ahora vamos al archivo wysibb.js que esta en la carpeta css en la ruta themes/TUTHEME/js/ y buscamos video: "Vídeo de YouTube", debajo ponemos ifra: "Insertar Reproductor Video Iframe", buscamos modal_video_text:"URL del vídeo", y debajo ponemos modal_ifra_text:"URL del Video Reproductor Iframe a Insertar", mas abajo buscamos //END img upload config buttons: "bold,italic,underline,strike,sup,sub,|,img,video,link,|,fontcolor,fontsize,fontfamily,|,smileBox,bullist,numlist,|,spoiler,messages,table,|,justifyleft,justifycenter,justifyright,justify,|,hr,quote,code,goear,swf,|,removeFormat,fullscreen", y despues de video, ponemos ifra, quedando asi //END img upload config buttons: "bold,italic,underline,strike,sup,sub,|,img,video,ifra,link,|,fontcolor,fontsize,fontfamily,|,smileBox,bullist,numlist,|,spoiler,messages,table,|,justifyleft,justifycenter,justifyright,justify,|,hr,quote,code,goear,swf,|,removeFormat,fullscreen", ahora mas abajo buscamos video: { title: CURLANG.video, buttonHTML: '<span class="fonticon ve-tlb-video1">\uE008</span>', modal: { title: CURLANG.video, width: "600px", tabs: [ { title: CURLANG.video, input: [ {param: "SRC",title:CURLANG.modal_video_text} ] } ], onSubmit: function(cmd,opt,queryState) { var url = this.$modal.find('input[name="SRC"]').val(); if (url) { url = url.replace(/^\s+/,"").replace(/\s+$/,""); } var a; if (url.indexOf("youtu.be")!=-1) { a = url.match(/^http[s]*:\/\/youtu\.be\/([a-z0-9_-]+)/i); }else{ a = url.match(/^http[s]*:\/\/www\.youtube\.com\/watch\?.*?v=([a-z0-9_-]+)/i); } if (a && a.length==2) { var code = a[1]; this.insertAtCursor(this.getCodeByCommand(cmd,{src:code})); } this.closeModal(); this.updateUI(); return false; } }, transform: { '<iframe src="http://www.youtube.com/embed/{SRC}" width="640" height="360" frameborder="0" allowfullscreen></iframe>':'[swf=http://www.youtube.com/watch?v={SRC}]' } }, y debajo ponemos ifra : { title: CURLANG.ifra, buttonHTML: '<span class="ifravideo"></span>', modal: { title: CURLANG.ifra, width: "600px", tabs: [ { title: CURLANG.video, input: [ {param: "SRC",title:CURLANG.modal_ifra_text,validation: '^http(s)?://'} ] } ] }, transform : { '<iframe src="{SRC}" width="780" height="480" scrolling="no" frameborder="0"></iframe>':"[ifra={SRC}]" } }, bueno espero no haberme olvidado de nada si es asi reportenlo y lo corregire por ahora unas capturas de como queda Previsualizaion en posts Visualizacion en posts P.D Un saludo
  2. Hola a todos, esta ocacion les comparto una nueva adaptacion del mod de portadas para post de kmario, los creditos son para el... Esto es mas que nada para los que no tienen mucho conocimiento, por si las dudas que luego me estan diciendo que esto es muy facil y no se que tanto mas como en mi topic anterior algunos usuarios... Les dejo unas capturas del mod: Ahora si comenzamos con la instalación: - Crean estas consultas en la BD ALTER TABLE p_posts ADD post_portada VARCHAR( 180 ) NOT NULL; ALTER TABLE p_borradores ADD b_portada VARCHAR( 180 ) NOT NULL - Abrimos c.posts.php y buscamos: /* getPreview() */ function getPreview(){ global $tsCore; // $titulo = $tsCore->setSecure($_POST['titulo'], true); $cuerpo = $tsCore->setSecure($_POST['cuerpo'], true); // return array('titulo' => $titulo, 'cuerpo' => $tsCore->parseBadWords($tsCore->parseBBCode($cuerpo), true)); } Reemplazamos por: /* getPreview() */ function getPreview(){ global $tsCore; // $titulo = $tsCore->setSecure($_POST['titulo'], true); $imagen = $tsCore->setSecure($_POST['imagen'], true); $cuerpo = $tsCore->setSecure($_POST['cuerpo'], true); // return array('titulo' => $titulo, 'imagen' => $imagen, 'cuerpo' => $tsCore->parseBadWords($tsCore->parseBBCode($cuerpo), true)); } - Un poco mas abajo buscamos: 'title' => $tsCore->parseBadWords($tsCore->setSecure($_POST['titulo'], true)),2, Debajo agregamos: 'portada' => $tsCore->parseBadWords($tsCore->setSecure($_POST['imagen'], true)), - Ahora buscamos: // INSERTAMOS $_SERVER['REMOTE_ADDR'] = $_SERVER['X_FORWARDED_FOR'] ? $_SERVER['X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR']; if(!filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP)) { die('0: Su ip no se pudo validar.'); } if(db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `p_posts` (post_user, post_category, post_title, Adelante de post_title, agregamos: post_portada, - En esa misma linea buscamos: .$postData['title'].'\', adelante de eso agregamos: \''.$postData['portada'].'\', - Abajo buscamos: 'title' => $tsCore->parseBadWords($_POST['titulo'], true), Agregamos abajo de eso: 'portada' => $tsCore->parseBadWords($_POST['imagen'], true), - Ahora buscamos: // ACTUALIZAMOS if($tsUser->uid == $data['post_user'] || !empty($tsUser->is_admod) || !empty($tsUser->permisos['moedpo'])){ if(db_exec(array(__FILE__, __LINE__), 'query', 'UPDATE p_posts SET post_title = \''.$postData['title'].'\', Adelante de \''.$postData['title'].'\' agregamos esto: post_portada = \''.$postData['portada'].'\', - Ahora mas abajo buscamos: // ES SU POST EL Q INTENTA BORRAR? $query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT post_id, post_title, post_user, post_body, post_category FROM p_posts WHERE post_id = \''.(int)$post_id.'\' AND post_user = \''.$tsUser->uid.'\''); Lo reemplazamos por: // ES SU POST EL Q INTENTA BORRAR? $query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT post_id, post_title, post_portada, post_user, post_body, post_category FROM p_posts WHERE post_id = \''.(int)$post_id.'\' AND post_user = \''.$tsUser->uid.'\''); - Un poco mas abajo buscamos: // SI ES MIS POST LO BORRAMOS Y MANDAMOS A BORRADORES if(db_exec(array(__FILE__, __LINE__), 'query', 'DELETE FROM p_posts WHERE post_id = \''.(int)$post_id.'\'')) { if(db_exec(array(__FILE__, __LINE__), 'query', 'DELETE FROM p_comentarios WHERE c_post_id = \''.(int)$post_id.'\'')) { if(db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `p_borradores` (b_user, b_date, b_title, b_body, b_tags, b_category, b_status, b_causa) VALUES (\''.$tsUser->uid.'\', \''.time().'\', \''.$tsCore->setSecure($data['post_title']).'\', \''.$tsCore->setSecure($data['post_body']).'\', \'\', \''.$data['post_category'].'\', \'2\', \'\')')) return "1: El post fue eliminado satisfactoriamente."; } Lo cambiamos por: // SI ES MIS POST LO BORRAMOS Y MANDAMOS A BORRADORES if(db_exec(array(__FILE__, __LINE__), 'query', 'DELETE FROM p_posts WHERE post_id = \''.(int)$post_id.'\'')) { if(db_exec(array(__FILE__, __LINE__), 'query', 'DELETE FROM p_comentarios WHERE c_post_id = \''.(int)$post_id.'\'')) { if(db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `p_borradores` (b_user, b_date, b_title, b_portada, b_body, b_tags, b_category, b_status, b_causa) VALUES (\''.$tsUser->uid.'\', \''.time().'\', \''.$tsCore->setSecure($data['post_title']).'\', \''.$tsCore->setSecure($data['post_portada']).'\', \''.$tsCore->setSecure($data['post_body']).'\', \'\', \''.$data['post_category'].'\', \'2\', \'\')')) return "1: El post fue eliminado satisfactoriamente."; } - mas abajo buscamos: /*********/ $query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT p.post_id, p.post_user, p.post_category, p.post_title, p.post_date, p.post_comments, p.post_puntos, p.post_private, p.post_sponsored, p.post_status, p.post_sticky, u.user_id, u.user_name, u.user_activo, u.user_baneado, c.c_nombre, c.c_seo, c.c_img FROM p_posts AS p LEFT JOIN u_miembros AS u ON p.post_user = u.user_id '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? '' : ' && u.user_activo = \'1\' && u.user_baneado = \'0\'').' LEFT JOIN p_categorias AS c ON c.cid = p.post_category WHERE '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? 'p.post_id > 0' : 'p.post_status = \'0\' && u.user_activo = \'1\' && u.user_baneado = \'0\'').' '.$c_where.' '.$s_where.' GROUP BY p.post_id ORDER BY '.$s_order.' DESC LIMIT '.$start); $lastPosts['data'] = result_array($query); Lo reemplazamos por: /*********/ $query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT p.post_id, p.post_user, p.post_category, p.post_title, p.post_portada, p.post_date, p.post_comments, p.post_puntos, p.post_private, p.post_sponsored, p.post_status, p.post_sticky, u.user_id, u.user_name, u.user_activo, u.user_baneado, c.c_nombre, c.c_seo, c.c_img FROM p_posts AS p LEFT JOIN u_miembros AS u ON p.post_user = u.user_id '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? '' : ' && u.user_activo = \'1\' && u.user_baneado = \'0\'').' LEFT JOIN p_categorias AS c ON c.cid = p.post_category WHERE '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? 'p.post_id > 0' : 'p.post_status = \'0\' && u.user_activo = \'1\' && u.user_baneado = \'0\'').' '.$c_where.' '.$s_where.' GROUP BY p.post_id ORDER BY '.$s_order.' DESC LIMIT '.$start); $lastPosts['data'] = result_array($query); - En las ultimas lineas buscan: // $query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT p.post_id, p.post_user, p.post_category, p.post_title, adelante de p.post_title, agregan: p.post_portada, - Ahora abrimos c.borradores.php y buscamos: 'title' => $tsCore->setSecure($tsCore->parseBadWords($_POST['titulo']), true), Abajo agregamos: 'portada' => $tsCore->setSecure($tsCore->parseBadWords($_POST['imagen']), true), - Mas abajo buscamos: // INSERT if(db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `p_borradores` (`b_user`, `b_date`, `b_title`, `b_body`, `b_tags`, `b_category`, `b_private`, `b_block_comments`, `b_sponsored`, `b_sticky`, `b_smileys`, `b_visitantes`, `b_status`, `b_causa`) VALUES (\''.$tsUser->info['user_id'].'\', \''.$draftData['date'].'\', \''.$draftData['title'].'\', \''.$draftData['body'].'\', \''.$draftData['tags'].'\', \''.$draftData['category'].'\', \''.$draftData['private'].'\', \''.$draftData['block_comments'].'\', \''.$draftData['sponsored'].'\', \''.$draftData['sticky'].'\', \''.$draftData['smileys'].'\', \''.$draftData['visitantes'].'\', \'1\', \'\')')) return '1: '.db_exec('insert_id'); Lo reemplazamos por: // INSERT if(db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `p_borradores` (`b_user`, `b_date`, `b_title`, `b_portada`, `b_body`, `b_tags`, `b_category`, `b_private`, `b_block_comments`, `b_sponsored`, `b_sticky`, `b_smileys`, `b_visitantes`, `b_status`, `b_causa`) VALUES (\''.$tsUser->info['user_id'].'\', \''.$draftData['date'].'\', \''.$draftData['title'].'\', \''.$draftData['portada'].'\', \''.$draftData['body'].'\', \''.$draftData['tags'].'\', \''.$draftData['category'].'\', \''.$draftData['private'].'\', \''.$draftData['block_comments'].'\', \''.$draftData['sponsored'].'\', \''.$draftData['sticky'].'\', \''.$draftData['smileys'].'\', \''.$draftData['visitantes'].'\', \'1\', \'\')')) return '1: '.db_exec('insert_id'); - Ahora mas abajo buscamos: function getDraft($status = 1){ global $tsCore, $tsUser; // $bid = intval($_GET['action']); $query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT bid, b_user, b_date, b_title, adelante de b_title, agregamos: b_portada, CON ESO TERMINAMOS LA PARTE DE ARCHIVOS PHP... - Abrimos m.agregar_from.tpl que esta en templates/modules y buscamos <li> <label>T&iacute;tulo</label> <span style="display: none;" class="errormsg"></span> <input type="text" tabindex="1" name="titulo" maxlength="60" size="60" class="text-inp required" value="{$tsDraft.b_title}" style="width:760px"/> <div id="repost"></div> </li> Abajo agregamos: <li> <label>Portada</label> <span style="display: none;" class="errormsg"></span> <input type="text" tabindex="2" name="imagen" maxlength="180" size="60" class="text-inp required" value="{$tsDraft.b_portada}" /> <p style="color:#999;font-size: 11px;margin: 2px 0 5px 2px;">URL de la imagen como caratula para la home</p> </li> - Buscamos: <li> <a name="post"></a> <label>Contenido del Post</label> <span style="display: none;" class="errormsg"></span> <textarea id="markItUp" name="cuerpo" tabindex="2" style="min-height:400px;" class="required">{$tsDraft.b_body}</textarea> <div style="margin:10px 0 0;">{include file='modules/m.global_emoticons.tpl'}</div> </li> Lo cambiamos por: <li> <a name="post"></a> <label>Contenido del Post</label> <span style="display: none;" class="errormsg"></span> <textarea id="markItUp" name="cuerpo" tabindex="3" style="min-height:400px;" class="required">{$tsDraft.b_body}</textarea> <div style="margin:10px 0 0;">{include file='modules/m.global_emoticons.tpl'}</div> </li> - Abrimos t.buscador.tpl y buscamos: <td title="{$r.c_nombre}" style="background:url({$tsConfig.tema.t_url}/images/icons/cat/{$r.c_img}) no-repeat center center;">&nbsp;</td> Lo reemplazamos por: <td title="{$r.c_nombre}"><a href="{$tsConfig.url}/posts/{$r.c_seo}/{$r.post_id}/{$r.post_title|seo}.html"><img height="47" width="47" style="border: solid 1px gray;" src="{$r.post_portada}"/></a></td> - Al final de estilo.css agregamos #ppostc { padding: 5px; float: left; } #listpost { width: 200px; height: 150px; display: inline-block; position: relative; margin: 5px; box-shadow: 0 1px 4px #BBB; border-radius: 4px; float: left; } #listpost a { display: block; position: relative; text-decoration: none; } #listpost .ptitle { display: table-cell; vertical-align: middle; text-align: center; position: relative; max-width: 170px; color: #FFF; background-color: rgba(0,0,0,0.57); padding: 3px 5px; border-radius: 5px; opacity: 1; z-index: 10; top: 4px; text-shadow: 0 1px 0 black; font-size: 10px; font-family: Helvetica,Arial,sans-serif; font-weight: bold; font-style: italic; } #listpost .pimagen { position: absolute; top: 0; left: 0; display: block; border-radius: 4px; width: 200px; height: 150px; background-color: #f7f7f7; background-image: url('images/load-img.gif'); background-position: center center; background-repeat: no-repeat; } #listpost .pimagen:hover { opacity: 0.7; } #listpost .pimagen img { width: 200px; height: 150px; border: 0; border-radius: 4px; -webkit-filter: grayscale(0%); image-rendering: optimizespeed; image-rendering: -moz-crisp-edges; image-rendering: -o-crisp-edges; image-rendering: -webkit-optimize-contrast; -ms-interpolation-mode: nearest-neighbor; } #listpost .pinfo { position: absolute; right: 7px; top: 129px; color: white; background-color: rgba(0,0,0,0.57); font-size: 10px; padding: 3px 5px; border-radius: 5px; z-index: 9; text-shadow: 0 1px 0 black; line-height: 9px; } #listpost .pavatar { top: 114px; left: 5px; border-radius: 4px; position: absolute; } #listpost .pavatar img { width: 30px; border-radius: 4px; box-shadow: 0 0 3px black; } #listpost .pbloq { background-position: -220px -120px!important; background: url(images/p-icons.png) no-repeat; display: block; top: 129px; left: 179px; opacity: 0.5; padding: 0px 18px 16px 0; position: absolute; } #listpost .pstar{ display: block; background: url(images/pstar.png) no-repeat; top: 5px; left: 182px; padding: 0px 24px 24px 0; position: absolute; z-index: 10; } #listpost .pinfo span { background: url(images/p-icons.png) no-repeat; display: inline-block; margin: -1px 2px; width: 14px; height: 9px; text-indent: 17px; } #listpost .pinfo .puntos{ background-position: -160px -217px; } #listpost .pinfo .visitas { background-position: -254px -199px; } #listpost .pinfo .comentarios { background-position: -237px -218px; } Ahora agregan los siguientes archivos: https://mega.co.nz/#!j9AXhZoD!Xu4-aDB2L4aVS1FD_OanVD-wSZLJrmilYGFNibjyEWw
  3. Hola muy buenas gente, les dejo unos codigos para mejorar la verlocidad de carga del script. Utilizando la herramienta de google http://developers.google.com/speed/pagespeed/insights/ podremos saber algunas cosas importantes que debemos mejorar y otras recomendadas. Para utilizar cache de navegadores el codigo que probé y mejor me funcionó es: En htaccess al final agregar: Header unset Pragma FileETag None Header unset ETag # 1 YEAR <FilesMatch "\.(ico|pdf|flv|jpg|JPG|jpeg|png|gif|swf|mp3|mp4)$"> Header set Cache-Control "public" Header set Expires "Thu, 15 Apr 2010 20:00:00 GMT" Header unset Last-Modified </FilesMatch> # 2 HOURS <FilesMatch "\.(html|htm|xml|txt|xsl)$"> Header set Cache-Control "max-age=7200, must-revalidate" </FilesMatch> # CACHED FOREVER # MOD_REWRITE TO RENAME EVERY CHANGE <FilesMatch "\.(js|css)$"> Header set Cache-Control "public" Header set Expires "Thu, 15 Apr 2010 20:00:00 GMT" Header unset Last-Modified </FilesMatch> Con este codigo indicaremos el tiempo que los navegadores deben guarden en cache los archivos. Otra cosa que en mi caso me dice es que debemos priorizar la carga de la mitad superior, para esto puse los archivos js en carga asincrona pero dejaron de funcionar varias partes de la web. Intenté saber cual es el js vital, pero siempre dejaba de funcionar algo, asi que este punto creo que no lo podremos solucionar de este modo. Sin embargo ahora a mi me dice esta correcto y no se exactamente porque. Podremos mejorar tambien la velocidad comprimiendo los css y los js. Esto es lo que nos dice esa herramienta. Realmente a lo que se refiere con esto es eliminar los espacios y/o comentarios de esos archivos css y js ya que los espacios en blanco también suman en el tamaño final del archivo. Estube buscando algo para realizar esta acción y encontre este: http://cssminifier.com/ . Encontre otros pero siempre me daban problema del tamaño del archivo. También nos indica que comprimamos con gzip deflate, para esto debemos saber si nuestro servidor tiene esta opción en ese caso el código que mejor me funciono fue: En htaccess al final agregar: # compress text, HTML, JavaScript, CSS, and XML AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/x-javascript # remove browser bugs BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html Header append Vary User-Agent Redacte este post ayer más completo y detallado, pero no se porque le di a borrar y me fue a la página anterior y perdí todo. Públique un post similar pero más generalizado en mi web, os dejo el enlace por si quereis echarle un ojo pero para Risus es lo que mejor me funcionó. Como mejorar tiempo y velocidad de carga de pagina web . Espero que os sirva para mejorar la velocidad de vuetras webs. Un saludo.
  4. Hola, tras una larga espera para algunos, por fin voy a publicar la primera versión del chat de RC Design adaptado a Risus. Como cualquier chat que se desarrolla con ajax y php, el consumo de recursos del servidor es considerable y por esa razón no se recomienda utilizar este complemento en servidores gratuitos o con planes muy básicos, pero cabe mencionar que aunque este consumo sigue siendo elevado, si lo comparamos con otros chats publicados aquí, el de este es mucho menor. Actualización 16/02/2015 a las 16:00 - Descarga actualizada, corregido un bug que impedía mostrar emoticonos. 08/03/2015 a las 22:50 - Descarga actualizada: se añadió seguridad adicional para evitar el flood y se añadieron las mejoras de la versión "grupos de WhatsApp". Más capturas Eliminar un mensaje o todos del usuario. Suspender usuario por nick. Características Rangos y color iguales que en la web. Suspender usuario por nick y por mensaje. Ver/editar/eliminar usuarios suspendidos. Borrar mensajes individualmente o todos de un usuario. BBCodes: [b], [i], [u], [br], [url], [color]. Imágenes y URLs automáticas. Censuras globales (desde la administración). Emoticonos globales a través de censuras (desde la administración). Antiflood, suspende durante 2 horas. El antiflood no afecta al staff. Sonido al recibir mensajes (desactivado por defecto). Diseño separado para funcionar con cualquier plantilla. Créditos DuvanJ: por hacer de conejillo de indias y probar el chat en su web. tutan-kabron: por encontrar y dar solución al error al parsear emoticonos. Descarga Para Risus 1.2 o superior: rchat_cbox_1.1.zip Instrucciones Subir el directorio "install" a la raíz y acceder desde el navegador a tuweb.com
  5. ¡Hola de nuevo! Hoy les voy a presentar algo "muy" novedoso. Esto les ayudará a crear sus themes con múltiples frameworks y también para el desarrollo de sus sitios webs. El otro día, me dí cuenta de que el archivo "jquery.plugins.js" está adaptado para una versión muy antigua de Jquery. Por eso se me ocurrió probar la versión 3.0.0 + Jquery Migrate (un migrador para versiones anteriores de Jquery). Y si... ¡FUNCIONO!. Tal como lo dice en la página en GitHub, solo tenemos que colocar los scripts y eso sería todo. Esto va siempre arriba de los "Jquery (...) .js" que vienen por defecto. <script src="https://code.jquery.com/jquery-3.0.0.js"></script> <script src="https://code.jquery.com/jquery-migrate-3.0.0.js"></script> Así debería quedarnos: Tienen que mantener el "Jquery.min.js" y el "jquery.plugins.js" si no, no funcionara ni el migrador, ni el jquery, ni el Script. Aquí hice una prueba colocando el Js + El menú de bootstrap . Y funcionaron los Dialogs del Script + lo que coloqué anteriormente. (si no tuviéramos el migrador, los dialogs no funcionarian) Ojala lo prueben y me cuenten como les fue. gracias @Tuente, gracias a ti no me hubiese dado cuenta xD
  6. Bueno dice N°2 porque a la N°1 la tengo que adaptar a la default ya que tenia class de bootstrap! si no se ve clic 1) Crean un archivo llamado panel.js y agregan esto dentro 2) En extras.css agregan esto 3) Ahora crearemos un archivo llamado head_usuario.tpl y lo colocaremos en sections y dentro agregaremos la parte del st-panel-footer la pueden sacar no hay problema 4) Ahora en la misma carpeta sections buscamos main_footer.tpl y agregaremos esto arriba de </body> {include file='sections/head_usuario.tpl'} <script src="{$tsConfig.js}/panel.js" type="text/javascript"></script> 5) Para los iconos descarguen esto → ICONOS FUENTES ← y lo descomprimen en css 6) Busquen en main_header.tpl y debajo de <link href="{$tsConfig.tema.t_url}/extras.css" rel="stylesheet" type="text/css" /> colocan <link rel="stylesheet" href="{$tsConfig.css}/iconfont.css"> y eso sería todo En el caso que haya error avísenme! Esta es la N°1 si no se ve clic Ver panel N°2 ir a Demo32.hol.es Usuario: Demo Pass: demouser
  7. Hola gente, hoy les traigo esta pequeña modificación para el RChat estilo Cbox por Rhuan. Con esta pequeña modificación, podrán tener su chat en el home (posts). Suben el archivo a los modules. [Click Aqui para descargar] Ahora solo tienen que agregar esto a su t.home.tpl Arriba de <div id="izquierda"> agregan {include file='modules/m.home_cboxchat.tpl'}
  8. [MOD] Risus Mobile V2.3

    Este aporte lo hago porque el anterior topic no lo puedo editar y tengo muchos detalles que mencionar ademas de un video que les dejo mas adelante. Como verán le he hecho 3 modificaciones importantes y múltiples fix para mejorar la versión mobile. Empecemos... 1. Añadida la opción de enviar mensajes. 2. Añadida opciones de comentarios en posts como votar (positivo negativo) y citar comentarios. 3. Eliminado plugin thimthumb por tener errores apache en algunos hostings y se reemplazo por otro plugin pero esta vez no es php sino jQuery llamado lazyload, este al igual que thimthumb crea las miniaturas de las imágenes pero las carga por medio de jQuery. Y le he agregado múltiples fix como el registro, load more en comentarios, etc. Como ya saben la instalación es la misma, solo reemplacen sus archivos con esta nueva versión. Recomiendo borrar archivos viejos, verifiquen que en la carpeta inc/php no exista la carpeta cache. V1 con la instalación completa: http://www.phpost.net/?showtopic=27955 Descarga v2.3: https://www.dropbox.com/s/t4tvu5xl05dh5z4/risus_mobile%20V2.3.zip
  9. [mod] mi tipo tariinga

    hola traigo este mod mi pedido x muchos deben tener instalado los mods: -hashtags -pins -editar publicacion -cerrar comentarios (no pongo los links xq no recuerdo cuales son) subimos y reemlazamos estos archivos: https://mega.co.nz/#!c1pFmaCB!tH8D4-DhRXLQ47lc7VV8jCTq6chWaerD_UNVX-AVt1g hagan respaldos de sus archivos de la carpeta inc que viene en el rar ejecutan estas sqls ALTER TABLE u_muro ADD p_status ENUM( '0', '1' ) NOT NULL DEFAULT '0'; ALTER TABLE u_muro ADD p_nick varchar(16) NOT NULL; CREATE TABLE IF NOT EXISTS `u_muro_tags` ( `id` int(11) NOT NULL AUTO_INCREMENT, `p_id` int(11) NOT NULL, `p_tags` varchar(35) NOT NULL, `p_date` varchar(35) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; CREATE TABLE IF NOT EXISTS `u_pins` ( `pid` int(11) NOT NULL AUTO_INCREMENT, `p_user` int(11) NOT NULL, `p_data` text NOT NULL, `p_fecha` varchar(35) NOT NULL, PRIMARY KEY (`pid`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=21 ; ALTER TABLE u_muro ADD p_compa ENUM( '0', '1' ) NOT NULL DEFAULT '0'; ALTER TABLE u_muro ADD p_shared int(4) NOT NULL; ALTER TABLE u_muro ADD p_user_shared int(4) NOT NULL; CREATE TABLE IF NOT EXISTS `u_muro_compartir` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `post_id` int(11) NOT NULL, `p_date` varchar(35) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1; ALTER TABLE u_muro ADD p_favorito int(4) NOT NULL; CREATE TABLE IF NOT EXISTS `u_muro_favorito` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `post_id` int(11) NOT NULL, `p_date` varchar(35) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1; ojo en las sqls vienen lo de hashtags y pins si ya los tienen no las ejecuten x ultimo agreguen esto a su htaccess # MI RewriteRule ^mi/([a-z]+)$ index.php?do=portal&action=$1 [QSA,L] se reemplazaran c.muro,c.portal,portal.php.perfil..php y los archivos ajax correspondientes esta basado en v5 demo: http://www.mytech.com.mx/mi/ si encuentrarn algun problema avisenme caps: me olvide de esto: vayan a su tema/templates/modules/ y suban estas carpeta https://mega.co.nz/#!Ykp02YCS!hlIOxusUsrEc6pL3_DqGwjZEM1BqLh12kuC3DBX0jhw https://mega.co.nz/#!AlByDbZB!MOqR9xI7MQnqcERAUly0hGxbX4ok8DjQbk8mkNyaF8Q y t.perfil lo editan x este: {include file='sections/main_header.tpl'} <script type="text/javascript" src="{$tsConfig.default}/js/perfil.js"></script> <div class="bg-perfil"> {if $tsType == 'story'} {include file='modules/perfil/abrir-shout.tpl'} {else} <div class="bloque-i"> {include file='modules/perfil/cabecera-info.tpl'} {include file='modules/perfil/estadisticas-perfil.tpl'} {include file='modules/perfil/datos-ajax.tpl'} </div> <div class="sidebar-d" style="padding: 5px 10px 10px 10px;"> {include file='modules/perfil/administrar-usuario.tpl'} {include file='modules/perfil/redes-sociales.tpl'} {include file='modules/perfil/karma.tpl'} {include file='modules/perfil/medallas.tpl'} {include file='modules/perfil/seguidores.tpl'} {include file='modules/perfil/siguiendo.tpl'} {include file='modules/perfil/mis-imagenes.tpl'} </div> {/if} </div> {include file='sections/main_footer.tpl'}
  10. Hola gente, ayer estaba viendo los usuarios on-line del foro y al ver su localizacion en el foro me dieron gaans de hacerlo para el script, bueno, les dejo la instalacion completa de esta V1 + un video para poner nuevas localizaciones si tienen otras secciones instaladas. Esta localización muestra cuando el usuario... Visita la página principal. Visita un post. Está agregando un nuevo post. Visita la sección de fotos. Visita una foto. Viendo el álbum de fotos de un usuario. Está agregando una nueva foto. Está viendo los miembro. Está viendo los miembros on-line. Está viendo los top posts. Está viendo los top usuarios. Visita el perfil de algún usuario. Está en el portal. Está buscando algo. Está en la sección de localización. Más adelante les enseño a como localizar al usuario si está en otras secciones (ejemplo comunidades). Empecemos... 1. Descarguen y suban estos tres archivos y guárdenlos en sus respectivas carpetas c.localizacion.php > inc/class localizacion.php > inc/php t.localizacion.tpl > tutema/templates https://www.dropbox.com/s/ms26ofprb5uhwjy/%5BMOD%5DLocalizacion%5BKmario19%5D.zip 2. Abrir el archivo header.php que está en la raiz de los archivos de su web Debajo de: // Monitor de usuario include TS_CLASS.'c.monitor.php'; agregamos: // Localización del usuario include TS_CLASS.'c.localizacion.php'; Más abajo buscamos: // Monitor $tsMonitor = new tsMonitor(); Agregamos debajo: // Localizacion $tsLoc = new tsLoc(); Guardamos. Lo que acabamos de hacer fue crear la nueva clase global para que en los demás php o secciones del script pueda "llamar" la función para crear la localización del usuario. Vamos ahora a editar los php de cada sección para agregar su respectiva localización. Home y Posts en posts.php arriba de: if(!empty($_GET['post_id'])){ agregamos: /**********LOCALIZACION************/ function Localizacion() { global $tsLoc, $tsUser; if($_GET['post_id']){ $tsLoc->setLocalizacion(2, $_GET['post_id'], $tsUser->uid); } else { $tsLoc->setLocalizacion(1, 0, $tsUser->uid); } } Localizacion(); /*********************************/ En agregar.php antes de: if(is_numeric($action)){ agregamos: /**********LOCALIZACION************/ function Localizacion() { global $tsLoc, $tsUser; $tsLoc->setLocalizacion(9, 0, $tsUser->uid); } Localizacion(); /*********************************/ Fotos En fotos.php debajo de: $smarty->assign("tsStats", $q); Agregamos: function Localizacion() { global $tsLoc, $tsUser; $tsLoc->setLocalizacion(4, 0, $tsUser->uid); } Localizacion(); Un poco más abajo buscan: case 'agregar': Y debajo de eso agregan: function Localizacion() { global $tsLoc, $tsUser; $tsLoc->setLocalizacion(10, 0, $tsUser->uid); } Localizacion(); Abren ahora c.fotos.php y debajo de : function getFotos($user_id){ global $tsCore, $tsUser; agregan: $tsLoc->setLocalizacion(6, (int)$user_id, $tsUser->uid); Arriba de eso donde está global ponen al lado de $tsUser, $tsLoc; queda de esta manera: global $tsCore, $tsUser, $tsLoc; Mas abajo buscan: function getFoto(){ Debajo en global hacen lo mismo que el paso anterior, al lado de $tsUser agregan , $tsLoc Para que quede asi: global $tsCore, $tsUser, $tsLoc; Debajo de eso mismo agregan: $tsLoc->setLocalizacion(5, $_GET['fid'], $tsUser->uid); Tops En top.php esto.. switch($action){ case 'posts': $smarty->assign("tsTops",$tsTops->getTopPosts($fecha, $cat)); break; case 'usuarios': $smarty->assign("tsTops",$tsTops->getTopUsers($fecha, $cat)); break; } (todo lo que está debajo de "instrucciones de código") Lo reemplazamos por esto: switch($action){ case 'posts': $smarty->assign("tsTops",$tsTops->getTopPosts($fecha, $cat)); function tsLocposts() { global $tsLoc, $tsUser; $tsLoc->setLocalizacion(7, 0, $tsUser->uid); } tsLocposts(); break; case 'usuarios': $smarty->assign("tsTops",$tsTops->getTopUsers($fecha, $cat)); function tsLocfotos() { global $tsLoc, $tsUser; $tsLoc->setLocalizacion(8, 0, $tsUser->uid); } tsLocfotos(); break; } Buscador En Buscador.php debajo de $smarty->assign("tsAutor",$a); Agregamos: /**********LOCALIZACION************/ function Localizacion() { global $tsLoc, $tsUser; $tsLoc->setLocalizacion(11, 0, $tsUser->uid); } Localizacion(); /*********************************/ Portal En portal.php debajo de: // AFILIADOS $smarty->assign("tsAfiliados",$tsAfiliado->getAfiliados()); Agregamos: /**********LOCALIZACION************/ function Localizacion() { global $tsLoc, $tsUser; $tsLoc->setLocalizacion(13, 0, $tsUser->uid); } Localizacion(); /*********************************/ Usuarios En usuarios.php debajo de : $smarty->assign("tsRangos",result_array($query)); agregamos: /**********LOCALIZACION************/ function Localizacion() { global $tsLoc, $tsUser; if ($_GET['online'] == true) { $tsLoc->setLocalizacion(15, 0, $tsUser->uid); } else { $tsLoc->setLocalizacion(14, 0, $tsUser->uid); } } Localizacion(); /*********************************/ Perfil En c.cuenta.php en la función: function loadGeneral($user_id){ En su global al lado de $tsUser Agregamos $tsLoc para que quede asi: global $tsCore, $tsUser, $tsLoc; Debajo de eso agregamos: $tsLoc->setLocalizacion(3, (int)$user_id, $tsUser->uid); Submenu En head_submenu.tpl que está en tutema/templates/sections arriba del primer <div class="clearBoth"></div> agregamos: <li{if $tsPage == 'localizacion'} class="here"{/if}><a class=vctip title="Localizaci&oacute;n del usuario" href="{$tsConfig.url}/localizacion/">Localizaci&oacute;n</a></li> Consulta Ahora ejecutamos la siguiente consulta en la base de datos: CREATE TABLE IF NOT EXISTS `u_localizacion` ( `id` int(11) NOT NULL AUTO_INCREMENT, `id_user` int(11) NOT NULL, `tipo` int(11) NOT NULL, `lugar` int(11) NOT NULL, `titulo` varchar(200) NOT NULL, `url` varchar(250) NOT NULL, `fecha` int(10) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; Y listo, eso es todo, ahora los dejo con el siguiente vídeo por si quieren agregar más localizaciones, supongo que ya más de uno sabe como funciona este mod. http://www.youtube.com/watch?v=DE91rqwd8RQ Esta es la función "general" para las localizaciones. function Localizacion() { global $tsLoc, $tsUser; $tsLoc->setLocalizacion(16, 0, $tsUser->uid); } Localizacion(); Por si se pasaron la descarga, la vuelvo a colocar: https://www.dropbox.com/s/ms26ofprb5uhwjy/%5BMOD%5DLocalizacion%5BKmario19%5D.zip Aprovecho y hago spam y los invito a mi web, ya terminé el diseño, aún hay un par de bugs por ahí flotando pero son menores, la web como tal está en completo funcionamiento, echenle un vistazo y que opinan de mi theme
  11. Hola a todos les comparto mi nueva creación... Como saben ya había mostrado avances pero les traigo la definitiva, está totalmente terminada y muy fácil de editar! SECCIONES INCLUIDAS Posts recientes Carrousel de 5 posts destacados (los 5 primeros de la semana) Posts destacados (los mejores de los últimos 15 días) Fotos recientes Portal con publicaciones de los seguidores Muro del perfil con las publicaciones de su respectivo usuario Notificaciones recientes Mensajes privados Mantenimiento de la web Suspensión de usuario DE LOS POSTS Votar post (puntos) Recomendar el post (en la página y redes sociales) Agregar a favoritos Comentar DE LAS FOTOS Votar foto (me gusta o no me gusta) Comentar DEL PERFIL Y PORTAL Compartir publicación portal/muro Seguir/Dejar de seguir usuario Me gusta en las publicaciones Comentar publicaciones DE LOS MENSAJES Responder mensajes CARACTERÍSTICAS No tiene logo, es el título de la web con un estilo personalizado Contiene scroll infinito en secciones como últimos posts, fotos, posts relacionados, perfil y portal Se ajusta automáticamente al tamaño de la pantalla del dispositivo detectado Tanto los avatares de los usuarios como los iconos de las categorías los tomará de la versión desktop Se puede volver a la versión de escritorio en cache por un (1) día, al terminar las 24 horas te redirige a la versión mobile o con el botón de "entrada" que te muestra la web en el header Las imágenes de portada de los posts son extraídas del contenido del post automáticamente y comprimidas para ahorrar carga Reducción parcial del paquete de instalación de 0.58Mb versus la de Risus 2.12Mb (Reducción de archivos de un 72%) Reducción de tiempo de carga de un 82% Test de velocidad en Postland vía Pingdom Website Speed Test VERSIÓN DESKTOP VERSIÓN MOBILE Se puede notar la gran diferencia tanto en velocidad de carga como tamaño de página, archivos y peticiones. IMAGENES (Tomadas desde Samsumg Galaxy Spica) INSTALACIÓN Dentro del zip de descarga se encuentra un archivo .html con la instalación completa del mod, sin embargo la colocaré a continuación: 1) Generar la siguiente consulta: ALTER TABLE `w_configuracion` ADD `mobile` TINYTEXT NOT NULL AFTER `url`; 2) En el archivo header.php buscar: // Limpiar variables... cleanRequest(); Agregar debajo: // Salir de version mobil por 1 dia if(isset($_GET['mobile'])){setcookie('mobile', $_GET['mobile'], time() + 86400);} Al final de ese mismo archivo agregar: if($tsCore->settings['isMobile']) { echo '<div style="background: #B8DCFF;width: 100%;overflow: hidden;font-size: 15px;padding: 16px;color: #000;text-align: center;">Navega mejor por '.$tsCore->settings['titulo'].' en nuestra versión mobile <a class="mBtn btnOk" href="'.$tsCore->settings['mobile'].'" onclick="document.cookie = \'mobile=;expires=Thu, 01 Jan 1970 00:00:01 GMT;\'">Entrar</a></div>'; } 3) En c.core.php buscar: function tsCore() Agregar arriba: public function isMobile() { $mobiles = array( "midp", "240x320", "blackberry", "netfront", "nokia", "panasonic", "portalmmm", "sharp", "sie-", "sonyericsson", "symbian", "windows ce", "windows phone", "benq", "mda", "mot-", "opera mini", "philips", "pocket pc", "sagem", "samsung", "sda", "sgh-", "vodafone", "xda", "iphone", "android" ); foreach($mobiles as $mobileClient) { if (strstr(strtolower($_SERVER['HTTP_USER_AGENT']), $mobileClient)) return true; } return false; } Mas abajo buscar: $this->settings['novemods'] = $this->getNovemods(); Agregar debajo: $this->settings['isMobile'] = $this->isMobile(); Mas abajo buscar: function getTema() { Agregar debajo: if($this->isMobile() && !empty($this->settings['mobile']) && empty($_COOKIE['mobile']) && empty($_GET['mobile'])) { header('Location: '.$this->settings['mobile'].$_SERVER['REQUEST_URI']); } 4) En c.admin.php buscar: 'url' => $tsCore->setSecure($tsCore->parseBadWords($_POST['url'])), Agregar debajo: 'mobile' => $tsCore->setSecure($tsCore->parseBadWords($_POST['mobile'])), Mas abajo buscar: `url` = \'' . $c['url'] . '\', Agregar al lado: `mobile` = \'' . $c['mobile'] . '\', 5) En templates/admin_mods/m.admin_configs.tpl buscar: <dl> <dt><label for="ai_url">Dirección del sitio:</label></dt> <dd><input type="text" id="ai_url" name="url" maxlength="32" value="{$tsConfig.url}" /></dd> </dl> Agregar debajo: <dl> <dt><label for="mobile">Dirección del sitio para móviles:</label></dt> <dd><input type="text" id="mobile" name="mobile" maxlength="40" value="{$tsConfig.mobile}" /></dd> </dl> 6) Copiar el archivo config.inc.php de tu web a la carpeta donde se descomprimió los archivos del mod Risus Mobile. Ahora dependiendo de como quieren que se ejecute el mod Risus Mobile, sea en subdominio m.tuweb o lo tengan en una carpeta tuweb/mobile/, deberás descomprimir el zip descargado y dentro encontraras la carpeta themes como si fuera Risus normal, dentro de ella habráotra carpeta llamada default y si el tema que tienes ES DIFERENTE AL DEFAULT tendrás que cambiarle el nombre exactamente igual al nombre de la carpeta del tema que tengas instalado en tu web principal. Ejemplo, si en mi web principal tengo el theme KM-Tronos azul y su carpeta es themes/KM-Tronos_b entonces en la carpeta del mod mobile cambiare el nombre de la carpeta themes/default a themes/KM-Tronos_b para que asi se ajuste cada tema a ambas versiones de la web. Si deseas crear tu propio tema dependiendo del que tengas en la web principal, solo debes duplicar la carpeta default, cambiarle el nombre al del teme que tienes y editar el css y los tpls que quieras para hacer tu diseño acorde al theme que tengas, no está de más recordar que el tema que hice es el de Taringa!. Esa anterior instalación es mas que todo para activar en tu web su versión mobile Obviamente si no hay url, al entrar con un celular o tablet, no redireccionará a ningún lado. CRÉDITOS aperpen Por su función para detectar modelos de los dispositivos. Vellenger Por compartir Timthumb para comprimir las imágenes de portadas de los posts. Me ayudó a optimizar la función de extraer la portada del cuerpo de los posts. kevinzonaa Me ayudó a testear la web en distintos celulares. DEMO Puedes acceder desde tu celular a http://www.postland.com.mx/ que te redirecciona a http://m.postland.com.mx/ ACTUALIZACIONES 22/06/2014 - Etiqueta <meta> para adaptación de diseño a distintas resoluciones. 24/06/2014 - Enlace a sitio desktop (y no mobile) en los shares facebook, twitter y google. 22/07/2014 - Fix vídeos en posts: 26/07/2014 - Fix notificación: "La publicación que has solicitado no existe" DESCARGA risus_mobile V2.3.zip (515Kb) http://www.phpost.net/?showtopic=28313 Espero les guste el mod y comenten sus sugerencias, criticas, recomendaciones y obviamente si encuentran bugs. Nos vemos en otro aporte, disfrútenlo!
  12. Catalogo v3

    Hola gente en esta ocasión les traigo una nueva versión de mi mod :3 -Aconsejado por @Rengo ., ahora se puede autorizar a los rangos a publicar -Filtrar por usuario -Categorías administrables (esto lo pidieron varios en la versión beta) - Filtrar por Categorías Descargar : http://www.mediafire.com/file/8f3772z45st5a45/Catalogo+v3.zip Demo: http://mundofree.net/catalogo/ Se aceptan ideas para mejorar el complemento saludos
  13. Hola a todos, hoy os traigo como sacar el captcha del registro, para hacerlo solo debeis seguir estos pasos. Abren el p.registro.form.tpl de themes/TUTEMA/t.php_files. En el archivo buscan y eliminan el siguiente codigo: <div class="form-line"> <label for="recaptcha_response_field">Ingresa el c&oacute;digo de la imagen:</label> <div id="recaptcha_ajax"> <div id="recaptcha_image"></div> <input type="text" id="recaptcha_response_field" name="recaptcha_response_field" /> </div> <div class="help recaptcha"><span><em></em></span></div> </div> Abren el registro.js de themes/TUTEMA/js. En el archivo buscan y eliminan el siguiente codigo: /* reCAPTCHA */ case 'recaptcha_challenge_field': return true; break; case 'recaptcha_response_field': //Si ya paso por aca y no hubieron cambios, devuelvo el mismo status if(!force_check && this.datos[campo] === value && this.datos['recaptcha_challenge_field'] == $('#RegistroForm .pasoDos #recaptcha_challenge_field').val()) if(this.datos_status[campo]=='empty') return no_empty ? this.show_status(el, this.datos_status[campo], this.datos_text[campo]) : this.hide_status(el, this.datos_status[campo], this.datos_text[campo]); else return this.show_status(el, this.datos_status[campo], this.datos_text[campo]); //Almaceno el dato this.datos[campo] = value; this.datos['recaptcha_challenge_field'] = $('#RegistroForm .pasoDos #recaptcha_challenge_field').val(); //!empty if(empty(value)){ var status = 'empty'; var text = 'El campo es requerido'; if(no_empty) return this.show_status(el, status, text); else return this.hide_status(el, status, text); } return registro.show_status(el, 'ok', 'OK'); break; } }, show_status: function(el, status_aux, text, no_cache_data){ var campo = $(el).attr('name'); var status = (status_aux=='empty') ? 'error' : status_aux; //Si es reCAPTCHA, lo busco directamente if(campo == 'recaptcha_response_field') el = $('#RegistroForm .pasoDos .help.recaptcha'); else{ //Paso al siguiente elemento hasta encontrar un .help do{ el = $(el).next(); }while(!$(el).is('.help')); } $(el).removeClass('ok').removeClass('error').removeClass('info').removeClass('loading').addClass(status).show().children().children().html(text); if(!no_cache_data){ this.datos_status[campo] = status_aux; this.datos_text[campo] = text; } return (status == 'ok'); }, hide_status: function(el, status, text){ var campo = $(el).attr('name'); //Si es reCAPTCHA, lo busco directamente if(campo == 'recaptcha_response_field') el = $('#RegistroForm .pasoDos .help.recaptcha'); else{ //Paso al siguiente elemento hasta encontrar un .help do{ el = $(el).next(); }while(!$(el).is('.help')); } $(el).hide(); this.datos_status[campo] = status; this.datos_text[campo] = text; return (status == 'ok'); }, check_paso: function(){ switch(this.paso_actual){ case 1: var ok = true; Abren el c.registro.php de inc/class. En el archivo buscan y eliminan el siguiente codigo: 'user_captacha_challenge' => $_POST['recaptcha_challenge_field'], En mismo el archivo buscan y eliminan el siguiente codigo: 'captacha' => 'El c&oacute;digo es incorrecto' En mismo el archivo buscan y eliminan el siguiente codigo: // CAPTACHA require(TS_EXTRA . 'recaptchalib.php'); $robot = recaptcha_check_answer(RC_PIK,$_SERVER["REMOTE_ADDR"],$tsData['user_captacha_challenge'],$tsData['user_captacha_response']); if(!$robot->is_valid) return 'recaptcha: El c&oacute;digo es incorrecto.';
  14. Ultimos Registrados + Paises Aqui les dejo por pedido este mini-mod de ultimos registrados, al igual que el mod que habia solo mostraba la fecha, el avatar con el nombre del registrado. Este mostrara la procedencia de su pais. En c.posts.php al final antes de: } Agregamos arriba: /* getUltreg() */ function getUltreg(){ global $tsCore; // $query = mysql_query('SELECT u.user_id, u.user_name, u.user_registro, u.user_baneado, p.user_id, p.user_pais, v.pid, v.p_opcion, v.p_prefijo, v.p_img FROM u_miembros AS u LEFT JOIN u_perfil AS p ON u.user_id = p.user_id LEFT JOIN u_paises AS v ON v.p_prefijo = p.user_pais WHERE u.user_baneado = 0 AND v.pid > 0 ORDER BY u.user_id DESC LIMIT 10'); if(!$query) die(mysql_error()); $data = result_array($query); // return $data; } En posts.php buscamos: // DO <= PARA EL MENU $smarty->assign("tsDo",$_GET['do']); Y agregamos abajo: // ULTIMOS REGISTRADOS $smarty->assign("tsUltreg",$tsPosts->getUltreg()); Al final de extras.css agregamos: #ultregvell { background:#00CCFF; width:198px; height:auto; margin-bottom:5px; overflow:hidden; } ul.ultregvell { background:#FFF; border:1px solid #CCC; border-top:none; padding-bottom:10px; } ul.ultregvell li { display:block; border-bottom:1px dashed #CCC; padding:5px 0 5px 5px; } ul.ultregvell li:hover { background:#F8F8F8; } ul.ultregvell li a { color:#666; text-decoration:none; position:absolute; margin:-3px 5px 2px 5px; } ul.ultregvell li span { color:#666; position:absolute; margin:-12px 0 0 24px; } .regpais { float:right; margin-right:10px; cursor:pointer; } .regimg { width:20px; height:20px; } En t.home.tpl buscamos: {if $tsConfig.c_fotos_private == 1 && !$tsUser->is_member} {else} {include file='modules/m.home_fotos.tpl'} {/if} Y agregamos arriba: {include file='modules/m.ultimos_registrados.tpl'} Subimos el archivo m.ultimos_registrados.tpl a la carpeta /modules/ subimos la carpeta flags a la caprpeta /images/ Importamos la Tabla u_paises a nuestra Base de Datos. Descarga En los modulos anteriores deje ya la tabla u_paises y la carpeta /flags/ si ya la usaron salten esos pasos porque son los mismos archivos a usar. Espero que les sea de agrado. Hasta la Proxima.
  15. Borradme

    Pues el tema se publicó dos veces vayan a este:
  16. Aqui por pedido de este mini mod de puntos por posts.. El cual se puede otorgrar un valor para dar a los usuarios por posts creados una cantidad de puntos. Ya lo habia dejado, pero al parecer lo eliminaron.. Comenzamos: Hacemos esta consulta Sql ALTER TABLE w_configuracion ADD p_x_posts INT(11) NOT NULL; Ahora en c.posts.php buscamos: $postID = mysql_insert_id(); Y agregamos abajo: // Puntos por posts by Vellenger mysql_query('UPDATE u_miembros SET user_puntos = user_puntos + \''.(int)$tsCore->settings['p_x_posts'].'\' WHERE user_id = \''.(int)$tsUser->uid.'\''); En c.admin.php buscamos: 'offline_message' => $tsCore->setSecure($tsCore->parseBadWords($_POST['offline_message'])), Y agregamos despues: 'p_x_posts' => $tsCore->setSecure($_POST['p_x_posts']), Buscamos: '\', `offline_message` = \'' . $c['offline_message']. Y agregamos despues: '\', `p_x_posts` = \'' . $c['p_x_posts']. En el archivo agregar.php buscamos: $smarty->assign("tsAviso",array('titulo' => 'Bien!', 'mensaje' => 'El post <b>'.$_POST['titulo'].'</b> fue agregado. '.(!$tsUser->is_admod && ($tsUser->permisos['gorpap'] == true || $tsCore->settings['c_desapprove_posts'] == 1) ? 'Deber&aacute; esperar su aprobaci&oacute;n' : '').' ', 'but' => 'Acceder al post', 'link' => "{$tsCore->settings['url']}/posts/{$tsCat['c_seo']}/$tsPost/{$tsCore->setSEO($_POST['titulo'])}.html")); Y lo cambiamos por: $smarty->assign("tsAviso",array('titulo' => 'Bien!', 'mensaje' => "El post <b>".$_POST['titulo']."</b> fue agregado.<br/> <i>Has recibido una bonificacion de: <blink><b style='color:#00CCFF;'>{$tsCore->settings['p_x_posts']}</b></blink> Puntos.</i>".(!$tsUser->is_admod && ($tsUser->permisos['gorpap'] == true || $tsCore->settings['c_desapprove_posts'] == 1) ? 'Deber&aacute; esperar su aprobaci&oacute;n' : '').' ', 'but' => 'Acceder al post', 'link' => "{$tsCore->settings['url']}/posts/{$tsCat['c_seo']}/$tsPost/{$tsCore->setSEO($_POST['titulo'])}.html")); En el archivo m.admin_configs.tpl buscamos: <dl> <dt><label for="ai_max_nots">M&aacute;ximo de notificaciones:</label><br /><span>Cuantas notificaciones puede recibir un usuario.</span></dt> <dd><input type="text" id="ai_max_nots" name="max_nots" style="width:10%" maxlength="3" value="{$tsConfig.c_max_nots}" /></dd> </dl> Y agregamos abajo: <dl> <dt><label for="p_x_posts">Puntos por Posts:</label><br /><span>Puntos que recibira como bonificacion un user al subir un posts.</span></dt> <dd><input type="text" id="p_x_posts" name="p_x_posts" style="width:10%" maxlength="3" value="{$tsConfig.p_x_posts}" /></dd> </dl> Eso seria todo.. Espero que les sea de agrado-. Hasta la Proxima..
  17. ¡Hola a todos! Hoy les traigo la adaptacion del mod "[MOD] mps masivos RISUS" de "TRON". Hacen todos los pasos de: Ahora la adaptación: En vez de: //////////////////////INICIA EL MOD DE TRON///////////////// /* newMpsall() ENVIAMOS MP MASIVO */ function newMpsall(){ global $tsUser, $tsCore; // $cuerpo=$tsCore->setSecure($_POST['cuerpo']); $rangos=(int)$_POST['rangos']; $fecha= time(); if($tsUser->is_admod==1){ if($rangos==1){ $where='WHERE user_id != \''.$tsUser->uid.'\''; }elseif($rangos==2){ $where='WHERE user_id != \''.$tsUser->uid.'\' AND user_rango = 1'; }elseif($rangos==3){ $where='WHERE user_id != \''.$tsUser->uid.'\' AND user_rango = 2'; } $query = mysql_query('SELECT user_id,user_name FROM u_miembros '.$where.' ORDER BY user_id DESC'); if(!$query) die(mysql_error()); $data = result_array($query); foreach($data as $dato){ $subject='Mensaje de la administracion'; $sql = "INSERT INTO u_mensajes (mp_to,mp_from,mp_subject,mp_preview,mp_date) VALUES ('{$dato['user_id']}','{$tsUser->uid}','{$subject}','{$cuerpo}','{$fecha}')"; $result = mysql_query($sql); $mp_id = mysql_insert_id(); mysql_query('INSERT INTO `u_respuestas` (mp_id, mr_from, mr_body, mr_ip, mr_date) VALUES (\''.(int)$mp_id.'\', \'1\', \''.$cuerpo.'\', \''.$_SERVER['REMOTE_ADDR'].'\', \''.time().'\')'); } } if($result) return true; else return false; } Usamos esto: //////////////////////INICIA EL MOD DE TRON///////////////// /* newMpsall() ENVIAMOS MP MASIVO */ function newMpsall(){ global $tsUser, $tsCore; // $cuerpo=$tsCore->setSecure($_POST['cuerpo']); $rangos=(int)$_POST['rangos']; $fecha= time(); if($tsUser->is_admod==1){ if($rangos==1){ $where='WHERE user_id != \''.$tsUser->uid.'\''; }elseif($rangos==2){ $where='WHERE user_id != \''.$tsUser->uid.'\' AND user_rango = 1'; }elseif($rangos==3){ $where='WHERE user_id != \''.$tsUser->uid.'\' AND user_rango = 2'; } $query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT user_id,user_name FROM u_miembros '.$where.' ORDER BY user_id DESC'); if(!$query) exit( show_error('Error al ejecutar la consulta de la l&iacute;nea '.__LINE__.' de '.__FILE__.'.', 'db') ); $data = result_array($query); foreach($data as $dato){ $subject='Mensaje de la administracion'; $sql = "INSERT INTO u_mensajes (mp_to,mp_from,mp_subject,mp_preview,mp_date) VALUES ('{$dato['user_id']}','{$tsUser->uid}','{$subject}','{$cuerpo}','{$fecha}')"; $result = db_exec(array(__FILE__, __LINE__), 'query', $sql); $mp_id = db_exec('insert_id'); db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `u_respuestas` (mp_id, mr_from, mr_body, mr_ip, mr_date) VALUES (\''.(int)$mp_id.'\', \'1\', \''.$cuerpo.'\', \''.$_SERVER['REMOTE_ADDR'].'\', \''.time().'\')'); } } if($result) return true; else return false; } y con eso, sería todo. Por cierto, los mensajes se envían desde el usuario numero 1 (el creador de la web, el que instalo el script) y si no te llegan a ti es porque eres el usuario numero 1, pero se envían de todas formas.
  18. Que tal a todos comparto esta versión de portadas para los posts que es un poco más completa y que había hecho antes pero para la versión de to-up, así es como quedaría: Para la default: Para esto no deben tener NINGÚN MOD DE ESTE TIPO ya que manejo otra variable en la BD y puede crear confusión a la hora de instalarla.... Bueno la instalación es la siguiente: 1) Crean esta consulta en la BD ALTER TABLE p_posts ADD post_portada VARCHAR( 180 ) NOT NULL; ALTER TABLE p_borradores ADD b_portada VARCHAR( 180 ) NOT NULL 2) Abrimos c.posts.php y buscamos: /* getPreview() */ function getPreview(){ global $tsCore; // $titulo = $tsCore->setSecure($_POST['titulo'], true); $cuerpo = $tsCore->setSecure($_POST['cuerpo'], true); // return array('titulo' => $titulo, 'cuerpo' => $tsCore->parseBadWords($tsCore->parseBBCode($cuerpo), true)); } Reemplazamos por: /* getPreview() */ function getPreview(){ global $tsCore; // $titulo = $tsCore->setSecure($_POST['titulo'], true); $imagen = $tsCore->setSecure($_POST['imagen'], true); $cuerpo = $tsCore->setSecure($_POST['cuerpo'], true); // return array('titulo' => $titulo, 'imagen' => $imagen, 'cuerpo' => $tsCore->parseBadWords($tsCore->parseBBCode($cuerpo), true)); } 3) Buscamos un poco mas abajo: 'title' => $tsCore->parseBadWords($tsCore->setSecure($_POST['titulo'], true)),2, Debajo de eso agregamos 'portada' => $tsCore->setSecure($_POST['imagen']), 4) Buscamos un poco mas abajo: // INSERTAMOS $_SERVER['REMOTE_ADDR'] = $_SERVER['X_FORWARDED_FOR'] ? $_SERVER['X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR']; if(!filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP)) { die('0: Su ip no se pudo validar.'); } if(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, post_smileys, post_visitantes, post_status) VALUES (\''.$tsUser->uid.'\', \''.(int)$postData['category'].'\', \''.$postData['title'].'\', \''.$postData['body'].'\', \''.$postData['date'].'\', \''.$postData['tags'].'\', \''.$_SERVER['REMOTE_ADDR'].'\', \''.(int)$postData['private'].'\', \''.(int)$postData['block_comments'].'\', \''.(int)$postData['sponsored'].'\', \''.(int)$postData['sticky'].'\', \''.(int)$postData['smileys'].'\', \''.(int)$postData['visitantes'].'\', '.(!$tsUser->is_admod && ($tsCore->settings['c_desapprove_post'] == 1 || $tsUser->permisos['gorpap'] == true) ? '\'3\'' : '\'0\'').')')) { $postID = mysql_insert_id(); Reemplazamos por: // INSERTAMOS $_SERVER['REMOTE_ADDR'] = $_SERVER['X_FORWARDED_FOR'] ? $_SERVER['X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR']; if(!filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP)) { die('0: Su ip no se pudo validar.'); } if(mysql_query('INSERT INTO `p_posts` (post_user, post_category, post_title, post_portada, post_body, post_date, post_tags, post_ip, post_private, post_block_comments, post_sponsored, post_sticky, post_smileys, post_visitantes, post_status) VALUES (\''.$tsUser->uid.'\', \''.(int)$postData['category'].'\', \''.$postData['title'].'\', \''.$postData['portada'].'\', \''.$postData['body'].'\', \''.$postData['date'].'\', \''.$postData['tags'].'\', \''.$_SERVER['REMOTE_ADDR'].'\', \''.(int)$postData['private'].'\', \''.(int)$postData['block_comments'].'\', \''.(int)$postData['sponsored'].'\', \''.(int)$postData['sticky'].'\', \''.(int)$postData['smileys'].'\', \''.(int)$postData['visitantes'].'\', '.(!$tsUser->is_admod && ($tsCore->settings['c_desapprove_post'] == 1 || $tsUser->permisos['gorpap'] == true) ? '\'3\'' : '\'0\'').')')) { $postID = mysql_insert_id(); 5) Ahora un poco mas abajo buscamos 'title' => $tsCore->parseBadWords($_POST['titulo'], true), Agregamos debajo: 'portada' => $tsCore->setSecure($_POST['imagen'], true), 6) Mas abajo buscamos: // ACTUALIZAMOS if($tsUser->uid == $data['post_user'] || !empty($tsUser->is_admod) || !empty($tsUser->permisos['moedpo'])){ if(mysql_query('UPDATE p_posts SET post_title = \''.$postData['title'].'\', post_body = \''.$postData['body'].'\', post_tags = \''.$tsCore->setSecure($postData['tags']).'\', post_category = \''.(int)$postData['category'].'\', post_private = \''.$postData['private'].'\', post_block_comments = \''.$postData['block_comments'].'\', post_sponsored = \''.$postData['sponsored'].'\', post_smileys = \''.$postData['smileys'].'\', post_visitantes = \''.$postData['visitantes'].'\', post_sticky = \''.$postData['sticky'].'\' WHERE post_id = \''.(int)$post_id.'\'') or die(mysql_error())) { Lo reemplazamos por: // ACTUALIZAMOS if($tsUser->uid == $data['post_user'] || !empty($tsUser->is_admod) || !empty($tsUser->permisos['moedpo'])){ if(mysql_query('UPDATE p_posts SET post_title = \''.$postData['title'].'\', post_portada = \''.$postData['portada'].'\', post_body = \''.$postData['body'].'\', post_tags = \''.$tsCore->setSecure($postData['tags']).'\', post_category = \''.(int)$postData['category'].'\', post_private = \''.$postData['private'].'\', post_block_comments = \''.$postData['block_comments'].'\', post_sponsored = \''.$postData['sponsored'].'\', post_smileys = \''.$postData['smileys'].'\', post_visitantes = \''.$postData['visitantes'].'\', post_sticky = \''.$postData['sticky'].'\' WHERE post_id = \''.(int)$post_id.'\'') or die(mysql_error())) { 7) Mas abajo buscamos: // ES SU POST EL Q INTENTA BORRAR? $query = mysql_query('SELECT post_id, post_title, post_user, post_body, post_category FROM p_posts WHERE post_id = \''.(int)$post_id.'\' AND post_user = \''.$tsUser->uid.'\''); $data = mysql_fetch_assoc($query); mysql_query('UPDATE `w_stats` SET `stats_posts` = stats_posts - \'1\' WHERE `stats_no` = \'1\''); mysql_query('UPDATE `u_miembros` SET `user_posts` = user_posts - \'1\' WHERE `user_id` = \''.$data['post_user'].'\''); // ES MIO O SOY MODERADOR/ADMINISTRADOR... if(!empty($data['post_id']) || !empty($tsUser->is_admod)){ // SI ES MIS POST LO BORRAMOS Y MANDAMOS A BORRADORES if(mysql_query('DELETE FROM p_posts WHERE post_id = \''.(int)$post_id.'\'')) { if(mysql_query('DELETE FROM p_comentarios WHERE c_post_id = \''.(int)$post_id.'\'')) { if(mysql_query('INSERT INTO `p_borradores` (b_user, b_date, b_title, b_body, b_tags, b_category, b_status, b_causa) VALUES (\''.$tsUser->uid.'\', \''.time().'\', \''.$tsCore->setSecure($data['post_title']).'\', \''.$tsCore->setSecure($data['post_body']).'\', \'\', \''.$data['post_category'].'\', \'2\', \'\')')) return "1: El post fue eliminado satisfactoriamente."; } Lo reemplazamos por: // ES SU POST EL Q INTENTA BORRAR? $query = mysql_query('SELECT post_id, post_title, post_portada, post_user, post_body, post_category FROM p_posts WHERE post_id = \''.(int)$post_id.'\' AND post_user = \''.$tsUser->uid.'\''); $data = mysql_fetch_assoc($query); mysql_query('UPDATE `w_stats` SET `stats_posts` = stats_posts - \'1\' WHERE `stats_no` = \'1\''); mysql_query('UPDATE `u_miembros` SET `user_posts` = user_posts - \'1\' WHERE `user_id` = \''.$data['post_user'].'\''); // ES MIO O SOY MODERADOR/ADMINISTRADOR... if(!empty($data['post_id']) || !empty($tsUser->is_admod)){ // SI ES MIS POST LO BORRAMOS Y MANDAMOS A BORRADORES if(mysql_query('DELETE FROM p_posts WHERE post_id = \''.(int)$post_id.'\'')) { if(mysql_query('DELETE FROM p_comentarios WHERE c_post_id = \''.(int)$post_id.'\'')) { if(mysql_query('INSERT INTO `p_borradores` (b_user, b_date, b_title, b_portada, b_body, b_tags, b_category, b_status, b_causa) VALUES (\''.$tsUser->uid.'\', \''.time().'\', \''.$tsCore->setSecure($data['post_title']).'\', \''.$tsCore->setSecure($data['post_portada']).'\', \''.$tsCore->setSecure($data['post_body']).'\', \'\', \''.$data['post_category'].'\', \'2\', \'\')')) return "1: El post fue eliminado satisfactoriamente."; } 8) Más abajo buscamos: /*********/ $query = mysql_query('SELECT p.post_id, p.post_user, p.post_category, p.post_title, p.post_date, p.post_comments, p.post_puntos, p.post_private, p.post_sponsored, p.post_status, p.post_sticky, u.user_id, u.user_name, u.user_activo, u.user_baneado, c.c_nombre, c.c_seo, c.c_img FROM p_posts AS p LEFT JOIN u_miembros AS u ON p.post_user = u.user_id '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? '' : ' && u.user_activo = \'1\' && u.user_baneado = \'0\'').' LEFT JOIN p_categorias AS c ON c.cid = p.post_category WHERE '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? 'p.post_id > 0' : 'p.post_status = \'0\' && u.user_activo = \'1\' && u.user_baneado = \'0\'').' '.$c_where.' '.$s_where.' GROUP BY p.post_id ORDER BY '.$s_order.' DESC LIMIT '.$start); $lastPosts['data'] = result_array($query); Lo reemplazamos por: /*********/ $query = mysql_query('SELECT p.post_id, p.post_user, p.post_category, p.post_title, p.post_portada, p.post_date, p.post_comments, p.post_puntos, p.post_hits, p.post_private, p.post_sponsored, p.post_status, p.post_sticky, u.user_id, u.user_name, u.user_activo, u.user_baneado, c.c_nombre, c.c_seo, c.c_img FROM p_posts AS p LEFT JOIN u_miembros AS u ON p.post_user = u.user_id '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? '' : ' && u.user_activo = \'1\' && u.user_baneado = \'0\'').' LEFT JOIN p_categorias AS c ON c.cid = p.post_category WHERE '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? 'p.post_id > 0' : 'p.post_status = \'0\' && u.user_activo = \'1\' && u.user_baneado = \'0\'').' '.$c_where.' '.$s_where.' GROUP BY p.post_id ORDER BY '.$s_order.' DESC LIMIT '.$start); $lastPosts['data'] = result_array($query); 9) Casi al final buscamos: $query = mysql_query('SELECT p.post_id, p.post_user, p.post_category, p.post_title, p.post_date, p.post_comments, p.post_favoritos, p.post_puntos, u.user_name, c.c_seo, c.c_nombre, c.c_img FROM p_posts AS p LEFT JOIN u_miembros AS u ON u.user_id = p.post_user LEFT JOIN p_categorias AS c ON c.cid = p.post_category WHERE p.post_status = \'0\' '.$where_cat.' '.$w_autor.' '.$w_search.' ORDER BY p.post_date DESC LIMIT '.$data['pages']['limit']); $data['data'] = result_array($query); Lo reemplazamos por: $query = mysql_query('SELECT p.post_id, p.post_user, p.post_category, p.post_title, p.post_portada, p.post_date, p.post_comments, p.post_favoritos, p.post_puntos, u.user_name, c.c_seo, c.c_nombre, c.c_img FROM p_posts AS p LEFT JOIN u_miembros AS u ON u.user_id = p.post_user LEFT JOIN p_categorias AS c ON c.cid = p.post_category WHERE p.post_status = \'0\' '.$where_cat.' '.$w_autor.' '.$w_search.' ORDER BY p.post_date DESC LIMIT '.$data['pages']['limit']); $data['data'] = result_array($query); 10) Ahora abrimos c.borradores.php y buscamos: 'title' => $tsCore->setSecure($tsCore->parseBadWords($_POST['titulo']), true), Agregamos debajo: 'portada' => $tsCore->setSecure($_POST['imagen'], true), 11) Más abajito buscamos: // INSERT if(mysql_query('INSERT INTO `p_borradores` (`b_user`, `b_date`, `b_title`, `b_body`, `b_tags`, `b_category`, `b_private`, `b_block_comments`, `b_sponsored`, `b_sticky`, `b_smileys`, `b_visitantes`, `b_status`, `b_causa`) VALUES (\''.$tsUser->info['user_id'].'\', \''.$draftData['date'].'\', \''.$draftData['title'].'\', \''.$draftData['body'].'\', \''.$draftData['tags'].'\', \''.$draftData['category'].'\', \''.$draftData['private'].'\', \''.$draftData['block_comments'].'\', \''.$draftData['sponsored'].'\', \''.$draftData['sticky'].'\', \''.$draftData['smileys'].'\', \''.$draftData['visitantes'].'\', \'1\', \'\')')) return '1: '.mysql_insert_id(); else return '0: '.mysql_error(); Lo reemplazamos por // INSERT if(mysql_query('INSERT INTO `p_borradores` (`b_user`, `b_date`, `b_title`, `b_portada`, `b_body`, `b_tags`, `b_category`, `b_private`, `b_block_comments`, `b_sponsored`, `b_sticky`, `b_smileys`, `b_visitantes`, `b_status`, `b_causa`) VALUES (\''.$tsUser->info['user_id'].'\', \''.$draftData['date'].'\', \''.$draftData['title'].'\', \''.$draftData['portada'].'\', \''.$draftData['body'].'\', \''.$draftData['tags'].'\', \''.$draftData['category'].'\', \''.$draftData['private'].'\', \''.$draftData['block_comments'].'\', \''.$draftData['sponsored'].'\', \''.$draftData['sticky'].'\', \''.$draftData['smileys'].'\', \''.$draftData['visitantes'].'\', \'1\', \'\')')) return '1: '.mysql_insert_id(); else return '0: '.mysql_error(); 12) Más abajo buscamos: $bid = intval($_GET['action']); $query = mysql_query('SELECT bid, b_user, b_date, b_title, b_body, b_tags, b_category, b_private, b_block_comments, b_sponsored, b_sticky, b_smileys, b_post_id, b_status, b_causa FROM `p_borradores` WHERE `bid` = \''.(int)$bid.'\' AND `b_user` = \''.$tsUser->info['user_id'].'\' AND b_status = \''.$status.'\' LIMIT 1'); // Lo reeemplazamos por: $bid = intval($_GET['action']); $query = mysql_query('SELECT bid, b_user, b_date, b_title, b_portada, b_body, b_tags, b_category, b_private, b_block_comments, b_sponsored, b_sticky, b_smileys, b_post_id, b_status, b_causa FROM `p_borradores` WHERE `bid` = \''.(int)$bid.'\' AND `b_user` = \''.$tsUser->info['user_id'].'\' AND b_status = \''.$status.'\' LIMIT 1'); // Guardamos y ahora nos vamos con elde diseño: 13) abrimos m.agregar_from.tpl que esta en templates/modules y buscamos <li> <label>T&iacute;tulo</label> <span style="display: none;" class="errormsg"></span> <input type="text" tabindex="1" name="titulo" maxlength="60" size="60" class="text-inp required" value="{$tsDraft.b_title}" style="width:760px"/> <div id="repost"></div> </li> Agregamos debajo: <li> <label>Portada</label> <span style="display: none;" class="errormsg"></span> <input type="text" tabindex="2" name="imagen" maxlength="180" size="60" class="text-inp required" value="{$tsDraft.b_portada}" /> <p style="color:#999;font-size: 11px;margin: 2px 0 5px 2px;">URL de la imagen como caratula para la home</p> </li> Y un poco más abajo donde dice "Contenido del post" buscamos tabindex y ese "2" lo cambiamos a "3" 14) Abrimos t.buscador.tpl y buscamos: <td title="{$r.c_nombre}" style="background:url({$tsConfig.tema.t_url}/images/icons/cat/{$r.c_img}) no-repeat center center;">&nbsp;</td> Lo reemplazamos por: <td title="{$r.c_nombre}"><a href="{$tsConfig.url}/posts/{$r.c_seo}/{$r.post_id}/{$r.post_title|seo}.html"><img height="47" width="47" style="border: solid 1px gray;" src="{$r.post_portada}"/></a></td> 15) Al final de estilo.css agregamos #ppostc { padding: 5px; float: left; } #listpost { width: 200px; height: 150px; display: inline-block; position: relative; margin: 5px; box-shadow: 0 1px 4px #BBB; border-radius: 4px; float: left; } #listpost a { display: block; position: relative; text-decoration: none; } #listpost .ptitle { display: table-cell; vertical-align: middle; text-align: center; position: relative; max-width: 170px; color: #FFF; background-color: rgba(0,0,0,0.57); padding: 3px 5px; border-radius: 5px; opacity: 1; z-index: 10; top: 4px; text-shadow: 0 1px 0 black; font-size: 10px; font-family: Helvetica,Arial,sans-serif; font-weight: bold; font-style: italic; } #listpost .pimagen { position: absolute; top: 0; left: 0; display: block; border-radius: 4px; width: 200px; height: 150px; background-color: #f7f7f7; background-image: url('images/load-img.gif'); background-position: center center; background-repeat: no-repeat; } #listpost .pimagen:hover { opacity: 0.7; } #listpost .pimagen img { width: 200px; height: 150px; border: 0; border-radius: 4px; -webkit-filter: grayscale(0%); image-rendering: optimizespeed; image-rendering: -moz-crisp-edges; image-rendering: -o-crisp-edges; image-rendering: -webkit-optimize-contrast; -ms-interpolation-mode: nearest-neighbor; } #listpost .pinfo { position: absolute; right: 7px; top: 129px; color: white; background-color: rgba(0,0,0,0.57); font-size: 10px; padding: 3px 5px; border-radius: 5px; z-index: 9; text-shadow: 0 1px 0 black; line-height: 9px; } #listpost .pavatar { top: 114px; left: 5px; border-radius: 4px; position: absolute; } #listpost .pavatar img { width: 30px; border-radius: 4px; box-shadow: 0 0 3px black; } #listpost .pbloq { background-position: -220px -120px!important; background: url(images/p-icons.png) no-repeat; display: block; top: 129px; left: 179px; opacity: 0.5; padding: 0px 18px 16px 0; position: absolute; } #listpost .pstar{ display: block; background: url(images/pstar.png) no-repeat; top: 5px; left: 182px; padding: 0px 24px 24px 0; position: absolute; z-index: 10; } #listpost .pinfo span { background: url(images/p-icons.png) no-repeat; display: inline-block; margin: -1px 2px; width: 14px; height: 9px; text-indent: 17px; } #listpost .pinfo .puntos{ background-position: -160px -217px; } #listpost .pinfo .visitas { background-position: -254px -199px; } #listpost .pinfo .comentarios { background-position: -237px -218px; } Descargan este rar → http://puu.sh/2FezU.zip 16) Ahora guardamos y reemplazamos los siguientes archivos de la carpeta modules m.home_last_posts.tpl m.agregar_javascript.tpl 17) subimos las imágenes a la carpeta images load-img.gif p-icons.png pstar.png Y con eso queda terminado el mod, los borradores funcionan perfectamente y le agregue el titulo y la portada al previsualizar el post: He desactivado la opción de "nuevo" o "popular" Si ven en m.home_last_posts.tpl que he modificado, está la linea: <!--{if $p.post_hits > 5} <span class="pstar qtip" title="Popular"></span> {/if}--> Que, si quieren activarlo para que muestre, si tiene más de 5 visitas, una estrella como titulo de "popular", se lo pueden editar a su gusto para cuantas visitas quieran donde dice $p.post_hits > 5 y simplemente eliminan el bloqueo: <!-- y --> Para que quede normalmente así y activo: {if $p.post_hits > 5} <span class="pstar qtip" title="Popular"></span> {/if} Y como extra se podrá ver también en el buscador de post: Y listo, eso es todo, espero les haya gustado el mod ya que muchos me lo habían pedido hace ya un rato pero no lo había publicado para la V4... el diseño pueden cambiárselo a su gusto o editar simplemente m.home_last_posts.tpl donde se ve las portadas en la home y adapten a otros temas. Nos vemos en otro mod, adios.
  19. Top Fotos en la Home

    Top Fotos en la Home Aqui les dejo ese mini-mod que muestra las top fotos en la home. Es algo simple pero me lo pidieron, asi que se los comparto con Uds. En c.posts.php al final antes de la ultima } Agregamos arriba: /* getTopFotos() */ function getTopFotos(){ global $tsCore; // $query = mysql_query('SELECT f.foto_id, f.f_title, f.f_date, f.f_description, f.f_url, f.f_user, f.f_votos_pos, f.f_votos_neg, f.f_status, u.user_id, u.user_name, u.user_rango, u.user_baneado, r.rango_id, r.r_name, r.r_color FROM f_fotos AS f LEFT JOIN u_miembros AS u ON u.user_id = f.f_user LEFT JOIN u_rangos AS r ON r.rango_id = u.user_rango WHERE u.user_baneado = 0 ORDER BY f.f_votos_pos DESC LIMIT 5'); if(!$query) die(mysql_error()); $data = result_array($query); // return $data; } En posts.php buscmos: // DO <= PARA EL MENU $smarty->assign("tsDo",$_GET['do']); Y agregamos abajo: // TOP FOTOS $smarty->assign("tsTopFotos",$tsPosts->getTopFotos()); En t.home.tpl buscamos: {include file='modules/m.home_stats.tpl'} Y agregamos abajo: {include file='modules/m.home_top_fotos.tpl'} Al final de extras.css agregamos: ul.topf li { display:block; border-bottom:1px solid #CCC; height:62px!Important; color:#666; } ul.topf li:hover { background:#EEE; } ul.topf li img { width:52px; height:52px; padding:1px; margin:5px; border:1px solid #CCC; } ul.topf li img:hover { background:#FFF; opacity:0.70; border:1px solid #00CCFF; } .titf { font-weight:600; position:absolute; float:left; margin:5px; } .autfot { position:absolute; float:left; margin: -45px 0 0 72px; } Subimos el archivo m.home_top_fotos.tpl a la carpeta modules. Descarga Esto fue realizado para el theme default, pero funciona para cualquier theme, el diseño se lo pueden modificar a gusto ya que la mayoria ya saben del tema.. Espero que les sea de utilidad.. Hasta la Proxima..
  20. [MOD] Confirmar cerrar sesión

    Hola, traigo esta pequeña modificación, es un dialogo de confirmación para cerrar sesión. Utilizo el plugin "mydialog" que trae por default el script por lo que no hará falta nada más. Este MOD lo vi hace años, lo publicó un usuario llamado mega-lucas ((o algo así (aún mantengo su V5 )) Instrucciones. 1. Abrir el archivo acciones.js y al ultimo del archivo colocar: /* Logout confirm by Altffenser */ function open_logout_box() { mydialog.show(); mydialog.title('Cerrar sesión'); mydialog.body('Estas a punto de salir de tu cuenta. <b>¿Seguro que deseas continuar?</b>'); mydialog.buttons(true, true, 'Cerrar sesión', 'logout_by_now()', true, false, true, 'No, permanecer aquí', 'close', true, true); mydialog.center(); } function logout_by_now(){ $(function (){ window.location.href = global_data.url + "/login-salir.php"; }); } 2. Abrir el archivo head_menu.tpl y buscar: <li class="logout"> <a href="{$tsConfig.url}/login-salir.php" style="vertical-align: middle" title="Salir"> <span class="systemicons logout"></span> </a> </li> a) Reemplazar por: <li class="logout"> <a href="#" onclick="open_logout_box();" style="vertical-align: middle" title="Salir"> <span class="systemicons logout"></span> </a> </li> ¡Has terminado! Con eso lo tendrán, ahora cada que den clic en "salir"; primero aparecerá un dialogo como este: Es muy sencillo el MOD pero a mi parecer, se ve bien Saludos
  21. Top Posts Favorito y Top Visitado Aqui les dejo por pedido de este topic. El cual pedia un bloque de top posts visitados, y tambien pidieron un top posts favoritos, asi que les dejo estos dos mini-mod para que lo pueda usar y lo que lo quieran tambien.. En c.posts.php buscamos: /* lalala */ Y agregamos arriba: /* Top Posts Favoritos por Vellenger ._.*/ function topfav(){ global $tsCore, $tsUser; $query = mysql_query('SELECT c.cid, c.c_nombre, c.c_seo, c.c_img, p.post_favoritos, p.post_id, p.post_title, p.post_category, p.post_status FROM p_categorias AS c LEFT JOIN p_posts AS p ON p.post_category = c.cid WHERE p.post_status = 0 AND p.post_favoritos >0 GROUP BY p.post_id ORDER BY p.post_favoritos DESC LIMIT 15'); $data = result_array($query); // return $data; } /* Top Posts Visitados por Vellenger ._.*/ function topvis(){ global $tsCore, $tsUser; $query = mysql_query('SELECT c.cid, c.c_nombre, c.c_seo, c.c_img, p.post_hits, p.post_id, p.post_title, p.post_category, p.post_status FROM p_categorias AS c LEFT JOIN p_posts AS p ON p.post_category = c.cid WHERE p.post_status = 0 AND p.post_hits >0 GROUP BY p.post_id ORDER BY p.post_hits DESC LIMIT 15'); $data = result_array($query); // return $data; } En posts.php buscamos: $smarty->assign("tsDo",$_GET['do']); Y agregamos abajo: $smarty->assign("tsTopfav",$tsPosts->topfav()); $smarty->assign("tsTopvis",$tsPosts->topvis()); En t.home.tpl buscamos: {include file='modules/m.home_stats.tpl'} Y agregamos abajo: {include file='modules/m.home_top_posts_fav.tpl'} {include file='modules/m.home_top_posts_vis.tpl'} Subimos el archivo m.home_top_posts_fav.tpl y m.home_top_posts_vis.tpl a la carpeta Modules. http://www.mediafire.com/download/7d3uv560buxxh03/Top-Posts.zip Les dejo los archivos con la instalacion en un txt Se realizo sobre la default, asi que Uds. le dan el estilo deacorde al theme que usen... Hasta la Proxima..
  22. [MOD] Sitemap y rss v1.2

    Bueno primero antes que nada he visto que este mod es importante para muchos y otro tenerlo actualizado también es importante para los nuevos que quieran tener este grandioso mod, bueno este mod esta para la 1.1 así que créditos al creador por dejarlo aquí La instalación es la misma solo que sube este archivos que dejo yo para la versión 1.2 de PHPost: Mega o sino tenes Mediafire como mas guste: 1- descarguen el archivo y suban a la carpeta inc/php/ 2 - abrán su .htaccess y pongan esto : # sitemap RewriteRule ^sitemap.xml$ inc/php/sitemap.php [L,NC,QSA] # rss RewriteRule ^rss$ inc/php/rss.posts.php [L,NC,QSA] Yo tengo arriba de #NO PERMITIR LA DESCARGA DE ARCHIVOS .TPL Bueno cualquier problema hazme de saber, aunque yo los tengo y no tengo ningún problema y lo uso también para que se auto publique en facebook y todo eso bueno nos vemos amigos. Saludos.-
  23. [Mini-Mod] Usuarios Online

    Hola a todos/as hoy cuando continuando con mi V5 basada en "FullPost" se me ocurrio la idea de crear el mini-mod de Usuarios Online nada mas que este no es envivo pero esta muy bueno Bueno primero le doy creditos a ouch01 me ayudo bastante con algunas cosas, bueno en casi todo les dejo unas caps del mini-mod : Y Cuando no hay nadie conectado Así se ve en la v4 Bueno basta de caps y empecemos con la instalacion (RECOMIENDO HACER BACKUP DE LOS ARCHIVOS A EDITAR) 1) Vamos al C.user.php que esta en (inc/class) y buscamos ... getUsuarios() */ function getUsuarios(){ global $tsCore; // FILTROS || $is_online = (time() - ($tsCore->settings['c_last_active'] * 60)); $is_inactive = (time() - (($tsCore->settings['c_last_active'] * 60) * 2)); // DOBLE DEL ONLINE // ONLINE? if($_GET['online'] == 'true'){ $w_online = 'AND u.user_lastactive > '.$is_online.''; } // CON FOTO if($_GET['avatar'] == 'true'){ $w_avatar = 'AND p.p_avatar = 1'; } Y lo reemplazamos por ... getUsuarios() */ function getUsuarios(){ global $tsCore; // FILTROS || $is_online = (time() - ($tsCore->settings['c_last_active'] * 60)); $is_inactive = (time() - (($tsCore->settings['c_last_active'] * 60) * 2)); // DOBLE DEL ONLINE // ONLINE? if($_GET['online'] == 'true'){ $w_online = 'AND u.user_lastactive > '.$is_online.''; } // CON FOTO if($_GET['avatar'] == 'true'){ $w_avatar = 'AND p.p_avatar = 1'; } 2) Luego Vamos al Posts.php que esta en (inc/php) Y buscamos ... // AFILIADOS $smarty->assign("tsAfiliados",$tsAfiliado->getAfiliados()); // DO <= PARA EL MENU $smarty->assign("tsDo",$_GET['do']); } y lo reemplazamos por ... // AFILIADOS $smarty->assign("tsAfiliados",$tsAfiliado->getAfiliados()); // DO <= PARA EL MENU $smarty->assign("tsDo",$_GET['do']); $_GET['online'] = true; $tsUsers = $tsUser->getUsuarios(); $smarty->assign("tsUsers",$tsUsers['data']); } 3) Vamos a \themes\default\templates\modules y agregamos este archivo m.home_usuarios_on.tpl 4) despues vamos a \themes\default\templates\ y abrimos el archivo t.home.tpl Buscamos... <div id="derecha"> Abajo Agregamos ... {include file='modules/m.home_usuarios_on.tpl'} Bueno eso seria todo, hasta la proxima. Comenten o envien un mensaje si tienen problemas y le doy nuevamente los creditos a ouch01
  24. Estadisticas Usuarios Por Paises y Rangos + MP Masivos Aqui les dejo este complemento por pedido, en si habia una verion para enviar MP internamente, pero solo para rangos, esta vercion tiene la opcion de enviar a rangos por paises, ademas de mostrar una estadistica de todos los usuarios registrados en cada pais, y la cantidad de usuarios por rangos. En .htaccess buscamos: RewriteRule ^admin/news/nueva inc/php/admin.php?action=news&act=nuevo [QSA,L] Y agregamos abajo: RewriteRule ^admin/mp/new inc/php/admin.php?action=mp&act=new [QSA,L] En admin.php buscamos: /** NOTICIAS **/ } elseif($action == 'news'){ Y agregamos arriba: }elseif($action == 'mp'){ if($act == 'new' && !empty($_POST['mpvell']) && !empty($_POST['tipvell'])){ if($tsAdmin->newMp()) $tsCore->redirectTo($tsCore->settings['url'].'/admin/mp?save=true'); } En c.core.php buscamos: $this->settings['categorias'] = $this->getCategorias(); Y agregamos abajo: $this->settings['rangos'] = $this->getRangos(); $this->settings['paises'] = $this->getPaises(); Buscamos: /* getCategorias() */ function getCategorias() { // CONSULTA $query = mysql_query('SELECT cid, c_orden, c_nombre, c_seo, c_img FROM p_categorias ORDER BY c_orden'); // GUARDAMOS $categorias = result_array($query); // return $categorias; } Y agregamos abajo: /* getRangos() */ function getRangos() { // CONSULTA $query = mysql_query('SELECT COUNT(r.rango_id) AS total, u.user_rango, u.user_baneado, r.rango_id, r.r_name, r.r_color, r.r_image FROM u_miembros AS u LEFT JOIN u_rangos AS r ON u.user_rango = r.rango_id WHERE u.user_baneado = 0 GROUP BY r.rango_id ORDER BY r.rango_id ASC'); // GUARDAMOS $rangos = result_array($query); // return $rangos; } /* getPaises() */ function getPaises() { // CONSULTA $query = mysql_query('SELECT COUNT(p.pid) AS total, p.pid, p.p_opcion, p.p_prefijo, p.p_img, v.user_pais FROM u_paises AS p LEFT JOIN u_perfil AS v ON v.user_pais = p.p_prefijo GROUP BY v.user_pais ORDER BY p.pid ASC'); // GUARDAMOS $paises = result_array($query); // return $paises; } En c.admin.php buscamos al final: /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ } Y agregamos arriba: /* newMp() */ function newMp() { global $tsCore, $tsUser; // $mran=(int)$_POST['mran']; $mpais=$tsCore->setSecure($_POST['mpais']); $tipvell=$tsCore->setSecure($_POST['tipvell']); $mpvell=$tsCore->setSecure($_POST['mpvell']); $fecha= time(); if($tsUser->is_admod==1){ if($mran==0 && $mpais=='0'){ $where='WHERE p.user_id != \''.$tsUser->uid.'\''; }elseif($mran!=0 && $mpais!='0'){ $where='WHERE p.user_pais = \''.$mpais.'\' && u.user_rango = \''.$mran.'\' && p.user_id != \''.$tsUser->uid.'\''; }elseif($mran!=0 && $mpais =='0'){ $where='WHERE u.user_rango = \''.$mran.'\' && p.user_id != \''.$tsUser->uid.'\''; }elseif($mran==0 && $mpais !='0'){ $where='WHERE p.user_pais = \''.$mpais.'\' && p.user_id != \''.$tsUser->uid.'\''; } $query = mysql_query('SELECT u.user_id, u.user_rango, p.user_id, p.user_pais FROM u_miembros AS u LEFT JOIN u_perfil AS p ON p.user_id = u.user_id '.$where.''); if(!$query) die(mysql_error()); $data = result_array($query); foreach($data as $dato){ $sql = 'INSERT INTO u_mensajes (mp_to,mp_from,mp_subject,mp_preview,mp_date) VALUES (\''.$dato['user_id'].'\', \''.$tsUser->uid.'\', \''.$tipvell.'\', \''.$mpvell.'\', \''.$fecha.'\')'; $result = mysql_query($sql); $mp_id = mysql_insert_id(); mysql_query('INSERT INTO `u_respuestas` (mp_id, mr_from, mr_body, mr_ip, mr_date) VALUES (\''.(int)$mp_id.'\', \'1\', \''.$mpvell.'\', \''.$_SERVER['REMOTE_ADDR'].'\', \''.time().'\')'); } } if($result) return true; else return false; } En t.admin.tpl buscamos: {/if} Y agregamos arriba: {elseif $tsAction == 'mp'} {include file='admin_mods/m.admin_mp.tpl'} 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_users"><span class="cat-title"><a href="{$tsConfig.url}/admin/mp">Mensajes Masivos</a></span></li> Al final de extras.css agregamos: .mensajesvell { 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; padding: 10px 20px; width: 500px; min-height:150px!important; } .mensajesvell: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; } .mensajesvell: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; } .titlv { 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; padding: 2px 5px; width: 300px; min-height:20px!important; text-align:center; } .titlv: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; } .titlv: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; color:#666; } .mp-vell { padding:10px; height:auto; } div.mp-vell ul { background:#EEE; padding:10px; } div.mp-vell ul li { border-bottom:1px dashed #CCC; margin-top:5px; } div.mp-vell ul li a { float:right; margin-right:20px; } Importamos el archivo u_paises a la BD. Subimos los archivos a sus respectivas carpetas.... Descarga Dentro de los archivos les deje la Instalacion en un txt. Tambien encontraran la carpeta flags que contiene todas las banderas faltantes al script.. solo reemplazar las que ya tienen asi tendran todas las banderitas.. Importante subir la tabla u_paises a su BD. Si ya aplicaron los complementos anteriores que deje con los mismos archivos de la carpete /flags/ y la tabla u_paises salteen el paso xq son los mismos archivos. Espero que les sea de Utilidad.. Cualquier problema me avisan.. Hasta la Proxima..
  25. Publicidad ADSENSE en las fotos

    Primero que nada quiero aclarar que esto funciona igual para cualquier tipo de publicidad, ya sea adsense, o no , inclusive si se quiere usar para otra cosa funciona perfecto, como por ejemplo ponerle un contador enlugar de la publicidad, Esto nos dara talvez mejores resultados / ganancias en nuestra cuenta de adsense. (Tambien hasta donde se, adsense permite el uso de esto) Para colocarlo en nuestros sitio nos dirigimos a la hoja de estilo .css (/themes/default/estilo.css) y pegamos este codigo: #superponer div.adsense {margin: 0; padding: 0; position: absolute;left:52px; bottom:19px;} Buscamos el siguiente codigo en : m.fotos_ver_content.tpl (themes/default/templates/modules/m.fotos_ver_content.tpl) <img class="img" src="{$tsFoto.f_url}" /> y entonces agregamos antes de ese codigo, el siguiente: <div id="superponer"> denuevo otra vez buscamos : <img class="img" src="{$tsFoto.f_url}" /> y colocamos despues de el, este otro codigo: <div class="adsense"> Colocar aqui el codigo de publicidad 468x 60 </div> </div> Solo hay que editar donde dice... Colocar aqui el codigo de publicidad 468x 60 (Esa medida es la mejor para poner en las fotos.) Colocamos ahi el codigo generado por Adsense. Lo probe con usar la variable pero no lo supe hacer funcionar ya que soy nuevo .-. asi que si alguien lo quiere hacer mas automatico haber si encuentra la forma de hacerlo funcionar con esto.. {$tsConfig.ads_160} Perdon yo lo usaba solo con imagenes .-. Resultado... les dejo +Bonus El siguiente codigo puedes ponerlo en lugar del anterior que estaba en la hoja de estilos .css Lo que hace este es agregarle una sombra a la publicidad. #superponer div.adsense {-webkit-box-shadow: 1px 5px 8px 2px black; -moz-box-shadow: 1px 5px 8px 2px black; box-shadow: 1px 5px 8px 2px black;margin: 0; padding: 0; position: absolute;left:52px; bottom:19px;} Resultado final con sombra. Se puede editar todo solo es algo que quize compartir con ustedes. Espero sus opiniones o respuestas sobre la variable,...
×