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. Hola a todos, este mod lo hice para mi versión mobile pero a pedido de Jonvaor96 lo publico para que puedan usarlo en su versión de escritorio. Funcion: Obtiene la segunda (2) imagen (si existe) que tenga el cuerpo del post, lo hice así porque generalmente en un post colocan primero una imagen de bienvenida y luego un cover, imagen demo, etc que sería lo mejor para mostrar en la portada. Bueno, para instalarlo hacemos lo siguiente, en el archivo c.core.php antes de la ultima llave } agregamos: /* * Sacar imagen del post * si hay mas de una imagen, tomamos la 2 (casi siempre la 1 es de "bienvenido") */ function extraer_img($texto) { // del tipo [img=imagen] o [img]imagen[/img] preg_match_all('/(\[img(\=|\]))((http|https)?(\:\/\/)?([^\<\>[:space:]]+)\.(jpg|jpeg|png|gif))(\]|\[\/img\])/i', $texto, $imgs); $total = count($imgs[3]); // Sacamos la mejor imagen posible ._. $img = (count($imgs[3]) > 1) ? $imgs[3][1] : $imgs[3][0]; if(empty($img)) $img = false; // return $img; } Con esto tendremos la función en el núcleo del script para poderla globalizar tanto en posts como en otros lugares, por ejemplo crear eventos en el calendario. Vamos a c.posts.php y debajo de: $lastPosts['data'] = result_array($query); agregamos: foreach($lastPosts['data'] as $id => $row){ $lastPosts['data'][$id]['post_cover'] = $tsCore->extraer_img($lastPosts['data'][$id]['post_body']); } Y con esto obtenemos la imagen extraida del post. Ahora la variable obtenida para la url de la imagen sería {$p.post_cover} como muchos usan temas diferentes dependerá de su plantilla donde tengan que editar lo siguiente, generalmente será el archivo m.home_last_posts.tpl y la imagen sería: <img src="{if $p.post_cover}{$p.post_cover}{else}{$tsConfig.images}/no-cover.jpg{/if}" width="80" heiht="80" /> Como pueden notar hay una condición que, si existe la imagen la muestra, de lo contrario mostrara una imagen predeterminada llamada no-cover.jpg pero esto es opcional si la quieren mostrar porque también puede ser una imagen dependiendo de su categoría como se muestra en Taringa. Ya la mayoria conoce como funciona de mi mod mobile, de todas formas dejo cap: Espero les guste el mod, cualquier duda comenten Fixes - 09 de agosto de 2014: Para quienes no les funcione me hizo falta un paso. Solución:
  2. PHPost 2016 :3 Hola gente de PHPost aca les dejo un nuevo mod de preview a los posts de la home: INSTALACIÓN: ABREN EL ARCHIVO C.POSTS.PHP DE SU CARPETA CLASS EN INC/CLASS DE LA RAIZ ("ATENCION ESTO LO HAGO PARA GENTE QUE COMIENZA") BUSCAN: /* validTags($tags) */ ARRIBA DE ESO AGREGAN: /* getPreviewHome() By::Oficialphp */ function getPreviewHome(){ global $tsCore; $postid = $tsCore->setSecure($_GET['postid']); // $query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT p.post_id, p.post_title, p.post_body, p.post_category, c.c_seo, c.c_nombre, u.user_id, u.user_name FROM p_posts AS p LEFT JOIN p_categorias as c ON c.cid = p.post_category LEFT JOIN u_miembros as u ON u.user_id = p.post_user WHERE p.post_id = \''.$postid.'\' && u.user_baneado = \'0\' '); $data = result_array($query); // foreach($data as $l1 => $l2) { //DATA $l2['post_body'] = $tsCore->parseBBCode($l2['post_body']); // return $l2; } } GUARDAR EL ARCHIVO Y LUEGO ABRIR EL ARCHIVO AJAX.POSTS.PHP Y BUSCAN: 'posts-preview' => array('n' => 2, 'p' => 'preview'), Y DEBAJO AGREGAN: 'posts-preview-home' => array('n' => 2, 'p' => 'preview_home'), EN EL MISMO ARCHIVO BUSCAN ESTO OTRO: case 'posts-preview': //<-- $smarty->assign("tsPreview",$tsPosts->getPreview()); //--> break; Y ABAJO DE ESO AGREGAN: case 'posts-preview-home': //<-- $smarty->assign("tsPreviewHome",$tsPosts->getPreviewHome()); //--> break; ABRIR EL ARCHIVO FUNCIONES.JS DE SU CARPETA JS DE SU TEMA Y AL FINAL DE TODO AGREGAR ESTE CODE: //preview_posts() function preview_posts(postid){ $('#loading').fadeIn(250); $.ajax({ url: global_data.url + '/posts-preview-home.php', type: 'GET', data: 'postid=' + postid, success: function(res){ var view_posts = $('#view_posts'); view_posts.html(res); $('#loading').fadeOut(250); } }); return true; } LUEGO DE TODO ESTO AGREGAR ESTE CODE A SU EXTRAS.CSS DE LA CARPETA DE SU TEMA: TEMA DEFAULT: /* Preview By Oficialphp */ .preview_post{ width: 400px; max-width: 400px; overflow: hidden; background: whitesmoke; border: 1px solid #CCCCCC; position: fixed; z-index: 999; top: 6em; left: 40em; } .preview_post .p_title{ font-size: 16px; background: #EEEEEE; border-bottom: 1px solid #CCCCCC; padding: 10px; } .preview_post .p_title span{ font-weight: 600; cursor: pointer; } .preview_post .p_user_i{ display: block; position: relative; padding: 6px; margin-bottom: 8px; } .preview_post .p_user_i img{ display: block; border-radius: 30px; } .preview_post .p_body{ word-wrap: break-word; text-align: left; max-height: 300px; margin-left: 12px; padding: 0 12px; overflow: hidden; } .preview_post .finish{ display: block; text-align: center; padding: 12px; background: #eee; border-top: 1px solid #ccc; } YA CASI FINALIZAMOS ABREN EL ARCHIVO MAIN_HEADER.TLP Y BUSCAN: <div id="mask"></div> ARRIBA DE ESTO AGREGAMOS: <div id="view_posts"></div> Luego abren el archivo m.home_last_posts.tpl que esta en la carpeta modules de su tema. y buscan 2 veces en el mismo archivo: href="{$tsConfig.url}/posts/{$p.c_seo}/{$p.post_id}/{$p.post_title|seo}.html" Y Al Lado agregan onmouseover="preview_posts({$p.post_id})" onmouseout="$('#view_posts').empty();" EL FINAL SUBE EL ARCHIVO p.posts.preview_home.tpl A SU CARPETA t.php_files DE SU TEMA DESCARGA DEL ARCHIVO: https://mega.nz/#!SYNnBRzJ!o3eqGr9V_871PVld1oXBV20Y48YRISN89dwGoeY78Vc CREDITOS: A MI POR CREAR EL MOD (OFICIALPHP) Y A multitecnologias POR HABERMELO PEDIDO :3 + OTRO USER QUE NO ME ACUERDO Capturas: Default: V5: Ustedes elegirian el diseño que quieran ya que no tuve tiempo para imaginar. -yao
  3. Zona Vip para Theme KM-Tronos A pedido de este topic Creditos para: betto1992 Aqui les comparto esta adaptacion al theme de Theme KM-Tronos, ya que vi que varios lo usan y tienen problema con el diseño, en si solo se utilizaron los box del mismo theme, y se corrigieron los problemitas que tenian.. Lo recomendado es que apliquen esta instalacion desde cero, asi no hay problemas.. Les dejo la instalacion en un txt detallado. Descarga Hay varios que usan el theme, asi que creo que les vendra bien, recordar que esta zona es mas para compartir informacion entre usuarios designados por el/los Admin, asi que puede de ser de utilidad para sus web. En esta se corrigieron lo bugs que tenia. Es recomendable no tener la instalacon anterior xq modifique algunas lineas para mejorarlo. Hasta la Proxima..
  4. Hola hoy les comparto mi primer aporte a la comunidad y como primer MOD aprovecho para tomar y adaptarlo al risus. (Según mis conocimientos ) Características del slider: Usa el BBcode [img.] [/img.] Compatible con dispositivos touch 100% Responsive Paginación automática Aceleración 3D - css3 Compatible con todos los navegadores Características editables: Altura automática, Reproducción automática, Velocidad de diapositivas, Velocidad de la paginación, Mostrar / Ocultar botones de navegación, Mostrar / Ocultar paginación y editar el texto de los botones de navegacion. En t.post.tpl buscar: {include file='sections/main_header.tpl'} Agregar abajo: <!--Slider en post by Basdower--> <link rel="stylesheet" href="{$tsConfig.tema.t_url}/css/slider-post.css"> <script src="{$tsConfig.js}/slider-post.js"></script> <script type="text/javascript"> // {literal} $(document).ready(function() { $("#slider-by-basdower").owlCarousel({ // Edita a tu preferencia singleItem : true, // Mostrar solo un elemento (No cambiar) autoHeight : true, // Altura automatica autoPlay : false, // Reproduccion automatica slideSpeed : 300, // Velocidad de diapositivas en milisegundos paginationSpeed : 400, // Velocidad de la paginacion en milisegundos navigation : true, // Mostrar botones "anterior", "siguiente" pagination : true, // Mostrar paginacion ._. navigationText : ["Anterior", "Siguiente"] // Texto de los botones de navigation, acepta HTML }); }); // {/literal} </script> <!--FIN Slider en post by Basdower--> Modifica las propiedades a tu gusto!. En el archivo bbcode.inc.php busca: public $restriction = Array("url", "code", "quote", "quotePHPost", "font", "size", "color", "img", "b", "i", "u", "align", "spoiler", "swf", "goear", "hr", "li" Y después de "li" agrega: , "slider" Mas abajo busca: array("name" => "spoiler","pre" => "<div class=\"spoiler\"><div class=\"title\"><a href=\"#\" onclick=\"spoiler($(this)); return false;\">Spoiler:</a></div><div class=\"body\">","suf" => "</div></div>") Agregas Arriba: array("name" => "slider","pre" => "<div id=\"slider-by-basdower\" class=\"slider-kg bas-kg\">","suf" => "</div>"), En c.core.php buscar: // RESTRICTIONS $parser->restriction = array('url', 'code', 'quote', 'quotePHPost', 'font', 'size', 'color', 'img', 'b', 'i', 'u', 'align', 'spoiler', 'swf', 'goear', 'hr', 'li' y despues de 'li' agrega: , 'slider' - Ahora agregaremos el boton al editor. Para el editor wysiwyg de Rhuan En wysibb.js buscan: //END img upload config buttons: "bold,italic,underline,strike,sup,sub,|, Al lado de la coma ( , ) agregar slider, sin espacios. Mas abajo buscan: img : { Y agregan arriba: slider : { title: 'Slider', buttonHTML: '<img src="http://i.imgur.com/Oy8xjVl.png" style="padding: 5px;">', <!--aqui tu boton para el editor--> transform : { '<div id="slider-by-basdower" class="slider-kg bas-kg">{SELTEXT}</div>':"[slider]{SELTEXT}[/slider]" } }, En el archivo wysibb.css agregan: .wysibb-body .slider-kg.bas-kg{ background-color: #F8F8F8; padding: 10px; border: 1px solid #dedede; border-radius: 3px; } buscar: .i-fullscreen { background-position: center -108px; } Agregar abajo: .i-slider { background-position: center -126px; } Para el editor default En Acciones.js Buscar: lang['Upload'] = "Subir Im&aacute;genes"; Agregar abajo: lang['Insertar Slider'] = "Insertar Slider"; Un poco mas abajo busca: /*{name:lang['Tu'], openWith:'[tu]', closeWith:'' },*/ y Agregas Arriba: {name:lang['Insertar Slider'], openWith:'[slider]', closeWith:'[/slider]' }, Busca: for(var i = 1; i <= 17; ++i) Y cambiamos el 17 x 18 En estilo.css busca: .markItUp .markItUpButton17 a { background:transparent url('images/bbcodes.png') no-repeat scroll left top; background-position: left -256px; height: 10px; } Y agrega abajo: .markItUp .markItUpButton18 a { background:transparent url('images/icons/cat/photo.png') no-repeat scroll left top; height: 10px; } Ahora para usar el slider en los post basta con agrupar tantas imágenes como quieras ([img.] [/img.]) dentro del bbcode: [slider] [/slider]. Un ejemplo: [slider][img=imagen1][img=imagen2][img=imagen3][img=imagen4][img]imagen5[/img.][img=imagen6][/slider] Notas: No dejar espacios ni saltos de linea o se verán diapositivas en blanco Al previsualizar el post no se verán el slider solo cuando el post este publicado, (espero solucionarlo pronto) No usar el bbcode [.img=url] ya que se genera un error al ponerlo juntos en la misma linea. Para los que usen el editor por defefecto tendrán que hacer lo siguiente: Para cambiar [.img=url] por [img.] [/img.] En el archivo acciones.js buscamos la función: function markit_img(h){ if(h.selection!='' && h.selection.substring(0,7)=='http://'){ h.replaceWith = ''; h.openWith = '[img='; h.closeWith = ']'; }else{ var msg = prompt(lang['ingrese la url de img'], 'http://'); if(msg != null){ h.replaceWith = '[img=' + msg + ']'; h.openWith = ''; h.closeWith = ''; }else{ h.replaceWith = ''; h.openWith = ''; h.closeWith = ''; } } } y la remplazamos por: function markit_img(h){ if(h.selection!='' && h.selection.substring(0,7)=='http://'){ h.replaceWith = ''; h.openWith = '[img]'; h.closeWith = '[/img]'; }else{ var msg = prompt(lang['ingrese la url de img'], 'http://'); if(msg != null){ h.replaceWith = '[img]' + msg + '[/img]'; h.openWith = ''; h.closeWith = ''; }else{ h.replaceWith = ''; h.openWith = ''; h.closeWith = ''; } } } Finalmente suben los archivos a sus respectivas carpetas Slider en post by Basdower.zip Capturas: Les dejo un post como DEMO Espero les guste hasta el próximo aporte... Slider en post by Basdower.zip
  5. A pedido de @sdlgdevelopers que publico este tema: Yo se los traigo 100% Free, is Free... El cual consiste en crear un login igual al que tiene GoogleTM en la index (home) el cual es totalmente independiente a cualquier theme "puedes instalarlo en el theme que quieras sin ningún problema" Que trae este Mod? Un diseño login tipo Google Un diseño de registro externo del modal un poco más llamativo. Un Gif de carga al iniciar sesión. donde dice Bienvenido a Amigos de... <----- es el nombre de su web donde dice todos están invitados.... <--- es el lema de su web Comencemos con la instalación: 1. Copian los archivos que les dejare al final del tema y los pegan en sus carpetas especificas 1.1 en el caso que tengan alguna modificación en t.home.tpl (casi cualquier theme distinto a la v4) buscan en el mismo archivo: {include file='sections/main_header.tpl'} y pegan antes: {if $tsUser->is_member} buscan en el mismo archivo: {include file='sections/main_footer.tpl'} y pegan despues: {else} {$tsInstall} {include file='sections/main_login.tpl'} {/if} 2. a disfrutar Captura General: Captura demo GIF: Bueno eso fue todo, espero que les guste... Descargar: MEDIAFIRE
  6. Hola amigos, estuve recibiendo unos cuantos MP's si tenia las comunidades de Kmario19 porque las del foro están caídas y en algunos links no confían. Bueno las resubo yo. Comentarios de Kmario19: Vídeo Tutorial: https://www.youtube.com/watch?v=xoUYObhi7oI ACTUALIZACIONES: 02/01/2014 Diseño sub-menu en tema to-up Tops en los dos temas, instalación y modulos m.top_comunidades.tpl y m.top_temas.tpl añadidos a la descara de su respectivo tema Links de Descarga: DESCARGA DEFAULT-V5 DESCARGA V5 TO-UP Aclaración: Algunos fixs están aplicados pero no en su totalidad, ustedes deberán aplicar los restantes. Créditos: Kmario19 Qué disfruten las comunidades Saludos
  7. Hola amigos de PHPost!, en este caso les traigo un MOD a pedido de Zastin que consiste en asignar un rango a un usuario por X tiempo. Empecemos: 1) Hacen esta SQL en su BD: ALTER TABLE `u_miembros` ADD `u_rango_temp` INT( 1 ) NOT NULL DEFAULT '0', ADD `user_rango_ant` INT( 2 ) NOT NULL DEFAULT '0', ADD `u_rango_fin` INT( 10 ) NOT NULL DEFAULT '0'; 2) Abren el admin.php de inc/php y buscan: } elseif($act == 'borrar'){ if(empty($_POST['save'])){ $smarty->assign("tsRangos",$tsAdmin->getAllRangos()); }else{ if($tsAdmin->delRango()) $tsCore->redirectTo($tsCore->settings['url'].'/admin/rangos?save=true'); } Abajo agregan: } elseif($act == 'temp'){ if(empty($_POST['save'])){ $smarty->assign("tsRangos",$tsAdmin->getAllRangos()); }else{ if($tsAdmin->assignTemp()) $tsCore->redirectTo($tsCore->settings['url'].'/admin/rangos?save=true'); } 3) Abren el c.admin.php de inc/class y buscan: /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ } Arriba agregan: function assignTemp(){ global $tsUser, $tsCore; $query = mysql_query('SELECT user_id FROM u_miembros WHERE user_name = \''.$tsCore->setSecure($_POST['user']).'\''); $query2 = mysql_query('SELECT rango_id FROM u_rangos WHERE rango_id = \''.(int)$_POST['temp_rango'].'\''); if((int)$_POST['temp_type'] == 1) $fin = time()+(int)$_POST['tiempo']*60*60; elseif((int)$_POST['temp_type'] == 2) $fin = time()+(int)$_POST['tiempo']*60*60*24; elseif((int)$_POST['temp_type'] == 3) $fin = time()+(int)$_POST['tiempo']*60*60*24*30; if(mysql_num_rows($query) == 1 && mysql_num_rows($query2) == 1){ if(mysql_query('UPDATE u_miembros SET user_rango_ant = user_rango, user_rango = \''.(int)$_POST['temp_rango'].'\', u_rango_temp = \'1\', u_rango_fin = \''.(int)$fin.'\' WHERE user_name = \''.$tsCore->setSecure($_POST['user']).'\'')) return true; else die(mysql_error()); }else{ die('EL usuario/rango no existe'); } } 4) Abren el m.admin_rangos.tpl de themes/TUTEMA/templates/admin_mods y buscan: </tr> {/foreach} </tbody> <tfoot> <td colspan="7" style="text-align:right"><a href="?act=nuevo">Agregar nuevo rango &raquo;</a></td> </tfoot> </table> </div> Abajo añaden: <p align="center"><a href="{$tsConfig.url}/admin/rangos/?act=temp"><input type="button" class="" value="Asginar rango temporal"/></a></p> En ese archivo buscan: {elseif $tsAct == 'borrar'} <form action="" method="post" id="admin_form"> <div class="mensajes error">Si borras este rango todos los usuarios que est&eacute;n en &eacute;l, ser&aacute;n asignados al rango <select name="new_rango">{foreach from=$tsRangos item=r}<option value="{$r.rango_id}" style="color:#{$r.r_color}; padding:2px 20px 0;" {if $r.rango_id == 3}selected{/if}>{$r.r_name}</option>{/foreach}</select> <br /> &iquest;Realmente deseas borrar este rango?</div> <label>&nbsp;</label> <input type="submit" name="save" value="S&iacute;, Continuar &raquo;" class="mBtn btnCancel"> </form> Abajo añaden: {elseif $tsAct == 'temp'} <form action="" method="post" id="admin_form"> <fieldset> <dl> <dt><label for="temp">Asignar rango:</label></dt> <dd><select id="temp" name="temp_rango">{foreach from=$tsRangos item=r}<option value="{$r.rango_id}" style="color:#{$r.r_color}; padding:2px 20px 0;">{$r.r_name}</option>{/foreach}</select> </dd> </dl> <dl> <dt><label for="user">Al usuario:</label></dt> <dd><input type="text" name="user" id="user"/></dd> </dl> <dl> <dt><label for="tiempo">Durante:</label></dt> <dd><input type="num" name="tiempo" id="tiempo"/> <select id="tiempo" name="temp_type"> <option value="1">Horas</option> <option value="2">Días</option> <option value="3">Meses (30 días)</option> </select> </dd> </dl> </fieldset> <input type="submit" name="save" value="Continuar &raquo;" class="mBtn btnCancel"> </form> 5) Para acabar abren el c.user.php de inc/class y buscan: function loadUser($login = FALSE) { // Cargar datos $sql = 'SELECT u.*, s.* FROM u_sessions s, u_miembros u WHERE s.session_id = \''.$this->session->ID.'\' AND u.user_id = s.session_user_id'; $query = mysql_query($sql); $this->info = mysql_fetch_assoc($query); // Existe el usuario? if(!isset($this->info['user_id'])) { return FALSE; } // PERMISOS SEGUN RANGO $query = mysql_query('SELECT r_name, r_color, r_image, r_special, r_allows FROM u_rangos WHERE rango_id = '.$this->info['user_id'].' LIMIT 1'); $this->info['rango'] = mysql_fetch_assoc($query); // PERMISOS SEGUN RANGO $datis = mysql_fetch_assoc(mysql_query('SELECT r_allows FROM u_rangos WHERE rango_id = \''.$this->info['user_rango'].'\' LIMIT 1')); $this->permisos = unserialize($datis['r_allows']); Abajo agregan: if($this->info['u_rango_temp']){ if($this->info['u_rango_fin'] < time()){ global $tsCore; mysql_query('UPDATE u_miembros SET u_rango_temp = \'0\', user_rango = user_rango_ant WHERE user_id = \''.$this->info['user_id'].'\'') or die('Hubo un error al retornar a su rango anterior.'); $tsCore->redirectTo($tsCore->CurrentUrl()); } } Y listo! Caps: Proximamente les trairé un producto para la tienda v2 con esta funcionalidad Saludos
  8. Ordenar posts como foro en la home THEME Life Funciona tambien en el theme default Hola amigos, en este caso les traigo un MOD de Aperpen actualizado a la Risus 1.2 que ordena los posts en la home como un foro, segun las categorías. Por lo que se incluye un pequeño sistema de subcategorías ¿Que tiene? - Administrar categorias "padre" desde la admin. - Seleccionar a que categoría "padre" pertenecerá cada categoría (foro). - Ultimo post de cada foro en la home - Estadisticas de cada categoría en la home - Ver categorías individualmente Empecemos: 1) Hacen esta SQL en su BD: 1º Consulta CREATE TABLE IF NOT EXISTS `p_hcats` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(30) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 2º Consulta ALTER TABLE `p_categorias` ADD `c_hcat` INT(11) NOT NULL ; 2) Abren el c.admin.php de inc/class y buscan: 1º Modificación /* saveCat() : EDITA LOS DATOS DE LA CAT O SUBCAT */ function saveCat() { global $tsCore; // //$db = $this->getDBtypes(); $cid = $tsCore->setSecure($_GET['cid']); // $c_nombre = $tsCore->setSecure($tsCore->parseBadWords($_POST['c_nombre'])); $cimg = $tsCore->setSecure($tsCore->parseBadWords($_POST['c_img'])); if (db_exec(array(__FILE__, __LINE__), 'query', 'UPDATE `p_categorias` SET c_nombre = \'' . $tsCore->setSecure($c_nombre) . '\', c_seo = \'' . $tsCore->setSecure($tsCore->setSEO($c_nombre, true)) . '\', c_img = \'' . $tsCore->setSecure($cimg) . '\' WHERE cid = \'' . (int)$cid . '\'')) return true; } Y lo reemplazan por: /* saveCat() : EDITA LOS DATOS DE LA CAT O SUBCAT */ function saveCat() { global $tsCore; // //$db = $this->getDBtypes(); $cid = $tsCore->setSecure($_GET['cid']); // $c_nombre = $tsCore->setSecure($tsCore->parseBadWords($_POST['c_nombre'])); $cimg = $tsCore->setSecure($tsCore->parseBadWords($_POST['c_img'])); if (db_exec(array(__FILE__, __LINE__), 'query', 'UPDATE `p_categorias` SET c_nombre = \'' . $tsCore->setSecure($c_nombre) . '\', c_hcat = \'' . $tsCore->setSecure($_POST['hcat']) . '\', c_seo = \'' . $tsCore->setSecure($tsCore->setSEO($c_nombre, true)) . '\', c_img = \'' . $tsCore->setSecure($cimg) . '\' WHERE cid = \'' . (int)$cid . '\'')) return true; } Luego buscan: 2º Modificación /* getCat() : OBTIENE LOS DATOS DE LA CAT O SUBCATEGORIA */ function getCat() { global $tsCore; // //$db = $this->getDBtypes(); $cid = intval($_GET['cid']); // $query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT cid, c_orden, c_nombre, c_seo, c_img FROM p_categorias WHERE cid = \'' . (int)$cid . '\' LIMIT 1'); $data = db_exec('fetch_assoc', $query); // return $data; } Y lo reamplazan por: /* getCat() : OBTIENE LOS DATOS DE LA CAT O SUBCATEGORIA */ function getCat() { global $tsCore; // //$db = $this->getDBtypes(); $cid = intval($_GET['cid']); // $query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT cid, c_orden, c_nombre, c_seo, c_img, c_hcat FROM p_categorias WHERE cid = \'' . (int)$cid . '\' LIMIT 1'); $data = db_exec('fetch_assoc', $query); // return $data; } Luego buscan: (Esta al final del archivo c.admin.php) 3º Y ultima modificación en este archivo. /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ } Y arriba añaden: /* gethCats() */ function gethCats() { // $query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT * FROM p_hcats ORDER BY id DESC'); $data = result_array($query); // return $data; } function newhCat() { global $tsCore; // //$db = $this->getDBtypes(); // VALORES $name = $tsCore->setSecure($tsCore->parseBadWords($_POST['h_nombre'])); // INSERTS if (db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `p_hcats` (name) VALUES (\'' . $name . '\')')) return true; else exit( show_error('Error al ejecutar la consulta de la l&iacute;nea '.__LINE__.' de '.__FILE__.'.', 'db') ); } function gethCat($id) { // //$db = $this->getDBtypes(); // $query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT * FROM p_hcats WHERE id = \'' . (int)$id . '\' LIMIT 1'); $data = db_exec('fetch_assoc', $query); // return $data; } function savehCat($id) { global $tsCore; // // VALORES $name = $tsCore->setSecure($tsCore->parseBadWords($_POST['h_nombre'])); // INSERTS if (db_exec(array(__FILE__, __LINE__), 'query', 'UPDATE `p_hcats` SET name = \'' . $name . '\' WHERE id = \''.(int)$id.'\'')) return true; else exit( show_error('Error al ejecutar la consulta de la l&iacute;nea '.__LINE__.' de '.__FILE__.'.', 'db') ); } function deletehCat($id) { // // INSERTS if (db_exec(array(__FILE__, __LINE__), 'query', 'DELETE FROM `p_hcats` WHERE id = \''.(int)$id.'\'')) return true; else exit( show_error('Error al ejecutar la consulta de la l&iacute;nea '.__LINE__.' de '.__FILE__.'.', 'db') ); } Con eso hemos terminado en el archivo c.admin.php 3) Abren el c.posts.php de inc/class y buscan: 1º Y unica modificación en este archivo. /* getLastPosts($category, $sticky) */ Y arriba añaden: function getLastPostsForo(){ //SELECCIONAMOS DE TODAS LAS CATEGORIAS $sql = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT * FROM p_hcats'); $hcats = result_array($sql); //CATEGORIAS foreach($hcats as $h => $n){ $hcats[$h]['cats'] = result_array(db_exec(array(__FILE__, __LINE__), 'query', 'SELECT cid, c_nombre, c_seo, c_img FROM p_categorias WHERE c_hcat = \''.$n['id'].'\'')); //DATOS foreach($hcats[$h]['cats'] as $c => $id){ //ULTIMO POST $sql = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT p.post_title, p.post_id, p.post_user, p.post_date, u.user_id, u.user_name, u.user_rango, r.r_color FROM p_posts AS p LEFT JOIN u_miembros AS u ON p.post_user = u.user_id LEFT JOIN u_rangos AS r ON r.rango_id = u.user_rango WHERE p.post_category = \''.$id['cid'].'\' ORDER BY p.post_id DESC LIMIT 1') or exit( show_error('Error al ejecutar la consulta de la l&iacute;nea '.__LINE__.' de '.__FILE__.'.', 'db') ); $hcats[$h]['cats'][$c]['ultimo'] = db_exec('fetch_assoc', $sql); //ESTADISTICAS $posts = db_exec('fetch_row', db_exec(array(__FILE__, __LINE__), 'query', 'SELECT COUNT(post_id) AS posts FROM p_posts WHERE post_category = \''.$id['cid'].'\'')); $sql = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT COUNT(post_id) AS posts, SUM(post_comments) AS comments FROM p_posts WHERE post_category = \''.$id['cid'].'\''); $posts = db_exec('fetch_assoc', $sql); $hcats[$h]['cats'][$c]['posts'] = $posts['posts']; $hcats[$h]['cats'][$c]['comments'] = empty($posts['comments']) ? 0 : $posts['comments']; } } return $hcats; } 4) Abren el posts.php de inc/php y buscan: 1º Y unica modificación en este archivo $smarty->assign("tsPosts",$tsLastPosts['data']); Y abajo añaden: $smarty->assign("tsHCats", $tsPosts->getLastPostsForo()); 5) Abren el admin.php de inc/php y buscan: 1º Modificación } elseif($action == 'pconfigs'){ if(!empty($_POST['save'])){ if($tsAdmin->savePConfigs()) $tsCore->redirectTo($tsCore->settings['url'].'/admin/pconfigs?save=true'); } Abajo añaden: } elseif($action == 'hcats'){ $id = (int)$_GET['id']; if($act == 'editar'){ if($_POST['save']){ if($tsAdmin->savehCat($id)) $tsCore->redirectTo($tsCore->settings['url'].'/admin/hcats?save=true'); } else { $smarty->assign("tsCat",$tsAdmin->gethCat($id)); } } elseif($act == 'nueva'){ if(!empty($_POST['h_nombre'])){ if($tsAdmin->newhCat()) $tsCore->redirectTo($tsCore->settings['url'].'/admin/hcats?save=true'); } } elseif($act == 'borrar'){ if($tsAdmin->deletehCat($id)) $tsCore->redirectTo($tsCore->settings['url'].'/admin/hcats?save=true'); }else{ $smarty->assign("tsCats",$tsAdmin->gethCats()); Luego buscan que les saldra 2 veces: 2º Y ultima modificación en este archivo. $smarty->assign("tsIcons",$tsAdmin->getExtraIcons()); Y abajo añaden: $smarty->assign("tshCats",$tsAdmin->gethCats()); 6) Abren el t.home.tpl de themes/TUTEMA/templates y buscan: 1º Y ultima modificación en este archivo. {include file='modules/m.home_last_posts.tpl'} Y abajo agregan: {if !$tsCat} <br> {include file='modules/m.home_foro.tpl'} {/if} NOTA: Si quieren que se elimine el bloque de ultimos posts que aparecerá arriba, en vez de el paso anterior, hagan esto: {if !$tsCat} <br> {include file='modules/m.home_foro.tpl'} {else} <br> {include file='modules/m.home_last_posts.tpl'} {/if} 7) Abren el t.admin.tpl de themes/TUTEMA/templates y buscan: 1º Y unica modificación en este archivo. {elseif $tsAction == 'rangos'} {include file='admin_mods/m.admin_rangos.tpl'} Y abajo añaden: {elseif $tsAction == 'hcats'} {include file='admin_mods/m.admin_hcats.tpl'} 8) Abren el m.admin_sidemenu.tpl de themes/TUTEMA/templates/admin_mods y buscan: 1º Y unica modificación en este archivo. <li id="a_cats"><span class="cat-title"><a href="{$tsConfig.url}/admin/cats">Categor&iacute;as</a></span></li> Abajo añaden: <li id="a_cats"><span class="cat-title"><a href="{$tsConfig.url}/admin/hcats">Categor&iacute;as "padre"</a></span></li> 9) Abren el m.admin_cats.tpl de themes/TUTEMA/templates/admin_mods y buscan: 1º Y unica modificación en este archivo. <dl> <dt><label for="cat_name">Nombre de la categor&iacute;a:</label></dt> <dd><input type="text" id="cat_name"name="c_nombre" value="{$tsCat.c_nombre}" /></dd> </dl> Abajo añaden: <dl> <dt><label for="hcat">Categoría padre:</label></dt> <dd> <select name="hcat" id="hcat" style="width:164px"> {foreach from=$tshCats item=h} <option value="{$h.id}" {if $tsCat.c_hcat == $h.id}selected="selected"{/if}>{$h.name}</option> {/foreach} </select> </dd> </dl> 10) Para acabar extraen y suben los archivos de este Zip como se indica: http://www.mediafire.com/download/l48tm3rv519l3f6/Mod_Foro_Risus_1.2.zip m.admin_hcats.tpl -> themes/TUTEMA/templates/admin_mods m.home_foro.tpl -> themes/TUTEMA/templates/modules 11) Espero que les sirva, y para adaptaciones para otros themes pedir soporte por este post. Creditos Autor: vellenger Creditos Actualizacion: ReModWrite P.D Un Saludo P.D Creditos Mod: Aperpen
  9. (Actualizacion) Paginación 100% Automatica de Posts en PHP Este post ni su actualización es de mi autoria (Se me adelanto K-Mario) simplemente le hice una pequeña modificación los botones Ant. y Sig. en vez de << y >>. Post Original ==>> Autor Original mdulises ==>> http://www.phpost.net/user/2460-mdulises/ Autor Actualización ==>> http://www.phpost.net/user/6266-kmario19/ Autor Pequeña Modificaciòn ==>> IO Simplemente permitanme darles un consejo donde el autor original dice: 3-Abrimos el archivo "m.home_last_post.tpl" que se encuentra en "themes/TU_PLANTILLA/templates/modules/" y buscamos el siguiente código: <div class="footer size13"> {if $tsPages.prev > 0 && $tsPages.max == false}<a href="pagina{$tsPages.prev}" class="floatL boton large blue">&laquo; Anterior</a>{/if} {if $tsPages.next <= $tsPages.pages}<a href="pagina{$tsPages.next}" class="floatR boton large blue">Siguiente &raquo;</a> {elseif $tsPages.max == true}<a href="pagina2" class="boton large blue">Siguiente &raquo;</a>{/if} </div> Y Remplazamos con esto: {if $smarty.get.cat} <div class="footer size13"> {if $tsPages.prev > 0 && $tsPages.max == false}<a href="pagina{$tsPages.prev}" class="floatL boton large blue">&laquo; Anterior</a>{/if} {if $tsPages.next <= $tsPages.pages}<a href="pagina{$tsPages.next}" class="floatR boton large blue">Siguiente &raquo;</a> {elseif $tsPages.max == true}<a href="pagina2" class="boton large blue">Siguiente &raquo;</a>{/if} </div> {else} <div class="mpaginacion"> {include file='modules/m.home_paginacion.tpl'} </div> {/if} Lo que deben tener en cuenta y no modificar es el diseño de paginaciòn que venga con su tema por lo tanto antes de lo que seria el inicio de la paginacion deben poner {if $smarty.get.cat} y despues del </div> de su paginacion poner {else} <div class="mpaginacion"> {include file='modules/m.home_paginacion.tpl'} </div> {/if} Bueno al tema que ocupa aqui esta el archivo modificado para instalar sigan los pasos del post original teniendo en cuenta mi consejo. http://www.mediafire.com/view/f9w0640szykyi2n/m.home_paginacion.tpl y aqui su codigo {* Complemento: "ACTUALIZACION Paginación 100% automatica de post"; Autor: "mdulises"; Actualizacion: "KMario"; Pequeña Modificacion: "ReModWrite"; Plataforma: "http://www.phpost.net"; Perfil del Autor: "http://www.phpost.net/user/2460-mdulises/"; Perfil del Autor Actualizacion: "http://www.phpost.net/user/6266-kmario19/"; Perfil del Autor Pequeña Modificacion: "http://www.phpost.net/user/526172-remodwrite/"; *} {php} function mpaginacion(){ //Variables principales $c_max_posts = db_exec('fetch_assoc', db_exec(array(__FILE__, __LINE__), 'query', 'SELECT c_max_posts FROM w_configuracion')); $datos = db_exec('fetch_assoc', db_exec(array(__FILE__, __LINE__), 'query', 'SELECT stats_posts FROM w_stats')); $num_rows = $datos['stats_posts'];//Consultamos cuantos post hay $post_pp = $c_max_posts['c_max_posts'];//Consultamos cuantos post hay $lastpage = ceil($num_rows / $post_pp);//Calculamos cuantos ennlaces habra //Obtenemos el valor de la pagina actual if(!$_GET["page"]){ $page=1; }else{ $page = $_GET["page"]; } //Creamos el array de la paginación for($i=0;$i<=$lastpage;$i++){ $mpag[$i]=$i; } //Calculamos cuantas pestañas mostrar $v = $page + 9; for($c=9;$v>$lastpage; $c--){ $v=$page+$c; } //Enlace a pagina anterior if($page>1){ $anterior = $page - 1; echo "<a href=\"pagina".$anterior."\" title=\"Página anterior\">Ant.</a>"; } //Mostramos los enlaces de la paginación for($i=$page; $i<=$v; $i++){ echo "<a href=\"pagina".$mpag[$i]."\">".$mpag[$i]."</a>"; } //Enlace a pagina siguiente if($page< $lastpage){ $siguiente = $page + 1; echo "<a href=\"pagina".$siguiente."\" title=\"Página siguiente\">Sig.</a>"; } } //Mostramos la paginacion if(!$_GET["cat"]){ mpaginacion(); } {/php}
  10. Algo linda, rapido, y barato xD. Les dejo este Mini-Mod que esta muy simple pero habra a quienes les guste :3, yo lo ocupo para mi prox. web. Entramos a b.cabecera.tpl con su ubicación en /templates/b_toup y buscamos <div id="g_toup"> Y los remplazamos por: <div style="background: url({$tsConfig.url}/themes/default/images/heads/head_{php} echo rand(1,5); {/php}.gif) repeat-x top center #006595;" id="g_toup" Ahora entramos en to-up.css y buscamos #g_toup { height: 65px; border-bottom: 1px solid #034260; background: url(to-up/head_concurso.png) repeat-x top center #006595; } Y lo remplazamos por: #g_toup { height: 65px; border-bottom: 1px solid #034260; } Ahora descargamos el archivo que dejo y lo subimos a /themes/default/images https://mega.co.nz/#!wB5FkRRT!63DjQssCHSB-NyGjfY0DcFAxQcZ8DohL67X3XO_dyhc Capturas(Son 6 yo te muestro 3 xD):
  11. Hola amigos, en este caso les traigo un MOD que me solicitaron, el de soporte por tickets. Antes de nada quiero acalarar (no para presumir) que este MOD me ofrecieron comprarlo por 4$ pero decidí liberarlo gratis. ¿Que trae? - Enviar tickets - Responder tickets - Marcar ticket como solucionado - Eliminar tickets - Administracion - Control de si el ticket está leído o no Empecemos: 1) Realizan estas SQL en su BD: CREATE TABLE IF NOT EXISTS `s_respuestas` ( `rid` int(11) NOT NULL AUTO_INCREMENT, `tid` int(11) NOT NULL, `respuesta` text NOT NULL, `user` int(11) NOT NULL, `solucionado` int(1) NOT NULL DEFAULT '0', `fecha` int(16) NOT NULL, PRIMARY KEY (`rid`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; CREATE TABLE IF NOT EXISTS `s_tickets` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user` int(11) NOT NULL, `asunto` varchar(50) NOT NULL DEFAULT 'Soporte', `problema` text NOT NULL, `estado` int(1) NOT NULL DEFAULT '1', `leido` int(1) NOT NULL DEFAULT '0', `fecha` int(16) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 2) Abren el admin.php de inc/php y buscan: // TIPO $smarty->assign("tsType",$_GET['t']); $smarty->assign("tsUserID",$user_id); $smarty->assign("tsUsername",$tsUser->getUserName($user_id)); } Y abajo agregan: } elseif($action == 'soporte'){ // CLASE SOPORTE include("../class/c.soporte.php"); $tsSoporte =& tsSoporte::getInstance(); $smarty->assign("tsDelete",$_GET['d']); // AGREGAR EL TITULO DE LA PAGINA ACTUAL if($act == ''){ $smarty->assign('tsTickets', $tsSoporte->getTicketss()); }elseif($act == 'nuevo'){ if(!empty($_POST['asunto']) && !empty($_POST['problema'])){ $envio = $tsSoporte->newTicket(); if($envio) $tsCore->redirectTo($tsCore->settings['url'].'/admin/soporte/?save=true'); } }elseif($act == 'delete'){ $borrar = $tsSoporte->deleteTicket(); if($borrar) $tsCore->redirectTo($tsCore->settings['url'].'/admin/soporte/?d=true'); }elseif($act == 'solucionado'){ $sol = $tsSoporte->solucionarTicket(); if($sol) $tsCore->redirectTo($tsCore->settings['url'].'/admin/soporte?act=ver&id='.(int)$_GET['id']); }elseif($act == 'ver'){ if(!empty($_POST['respuesta'])){ $tsSoporte->responderTicket(); $tsCore->redirectTo($tsCore->settings['url'].'/admin/soporte?act=ver&id='.(int)$_GET['id']); }else{ $smarty->assign('tsTicket', $tsSoporte->getTicket((int)$_GET['id'])); } } 3) Abren el t.admin.tpl de themes/TUTEMA/templates y buscan: {elseif $tsAction == 'rangos'} {include file='admin_mods/m.admin_rangos.tpl'} Abajo agregan: {elseif $tsAction == 'soporte'} {include file='admin_mods/m.admin_soporte.tpl'} 4) Abren el m.admin_sidemenu.tpl de themes/TUTEMA/templates/admin_mods y buscan: <li id="a_users"><span class="cat-title"><a href="{$tsConfig.url}/admin/users">Todos los Usuarios</a></span></li> Y abajo añaden: <li id="a_configs"><span class="cat-title"><a href="{$tsConfig.url}/admin/soporte">Soporte </a></span></li> 5) Suben estos archivos: https://www.mediafire.com/?wvax8lvk0x247jj como se indica: m.admin_soporte.tpl -> themes/TUTEMA/templates/admin_mods t.soporte.tpl -> themes/TUTEMA/templates soporte.php -> inc/php c.soporte.php -> inc/class Luego realizan este pequeño fix: Y listo!! Cap de la admin: Demo: http://programu.net/soporte/ Usuario demo: demo Pass: demo1234 Como dije al principio del post este MOD me ofrecieron comprarlo por 4$ pero decidí liberarlo gratis. Entonces, si quereis colaborar conmigo denle click a "Skip this ad" en este link tantas veces como puedan: http://www.linkbucks.com/P6bX Se agrecede Saludos
  12. Saludos [email protected] de PHPost!!! Con este complemento podrás tener una paginación 100% automática con números en tu web para la sección "Last Posts". Los estilos los hice de acuerdo a mis gustos, por lo que quizás no convine con tu plantilla, deberás adaptarlos a tu plantilla y cambiar los colores a tu gusto, es muy fácil si sabes algo de CSS. Capturas: Cuando se ha seleccionado una categoría la paginación es la default. 1-Descargamos este archivo y lo descomprimimos: http://www.mediafire.com/download/4mcuj725u2nzt16/Mod_Paginacion_Automatica_de_Post_By_mdulises.rar Subimos el archivo "m.home_paginacion.tpl" a la carpeta "themes/TU_PLANTILLA/templates/modules/" 2-Abrimos el archivo "extras.css" que se encuentra en "themes/TU_PLANTILLA/" Al final de ese archivo pegamos este código: /*---------- Estilos para paginación de post por mdulises ----------*/ .mpaginacion { padding-bottom: 5px; text-align: center; margin-top: 25px; } .mpaginacion a { background:#ffffff; border: 1px solid #E0E0E0; border-radius: 3px 3px 3px 3px; box-shadow: 1px 1px 0 #DDDDDD, 0 0.3em 0.3em rgba(255, 254, 255, 0.6) inset; color: #00A9EC; font-size: 12px; font-weight: bold; margin-right: 3px; padding: 5px 6px; text-decoration: none; } .mpaginacion a:hover { background:#00A9EC; border-radius: 3px 3px 3px 3px; color:#ffffff; } 3-Abrimos el archivo "m.home_last_post.tpl" que se encuentra en "themes/TU_PLANTILLA/templates/modules/" y buscamos el siguiente código: <div class="footer size13"> {if $tsPages.prev > 0 && $tsPages.max == false}<a href="pagina{$tsPages.prev}" class="floatL boton large blue">&laquo; Anterior</a>{/if} {if $tsPages.next <= $tsPages.pages}<a href="pagina{$tsPages.next}" class="floatR boton large blue">Siguiente &raquo;</a> {elseif $tsPages.max == true}<a href="pagina2" class="boton large blue">Siguiente &raquo;</a>{/if} </div> Y Remplazamos con esto: {if $smarty.get.cat} <div class="footer size13"> {if $tsPages.prev > 0 && $tsPages.max == false}<a href="pagina{$tsPages.prev}" class="floatL boton large blue">&laquo; Anterior</a>{/if} {if $tsPages.next <= $tsPages.pages}<a href="pagina{$tsPages.next}" class="floatR boton large blue">Siguiente &raquo;</a> {elseif $tsPages.max == true}<a href="pagina2" class="boton large blue">Siguiente &raquo;</a>{/if} </div> {else} <div class="mpaginacion"> {include file='modules/m.home_paginacion.tpl'} </div> {/if} Terminamos la instalación. Hice este complemento principalmente porque alguien lo había pedido en un tema, Trate de hacer un paginador muy simple y rápido como solución temporal pero no era 100% automático y a algunos no les funciono correctamente. Eso es todo, espero que te haya gustado y que te sirva. Hasta la próxima!!!
  13. Bueno Amigos Hoy Desarrolle unas Pequeñas lineas Que no es la gran Cosa pero da un Toque Muy Bueno y llamativo!! Esto consiste en Mostrar el Nivel de la Pagina en la que se Encuentra por ejemplo si esta a la mitad de la pagina muestra un Mensaje Progress (50%) Bueno les dejo una Captura.. En main_header.tpl Buscan <div id="loading" style="display:none"><img src="{$tsConfig.tema.t_url}/images/ajax-loader.gif" alt="Cargando"> Procesando...</div> Abajo Agregan <div id="scrollbubble"></div> Luego en extras.css Al Final Agregan #scrollbubble { display: none; position: fixed; top: 0; right: 20px; z-index: 500; padding: 3px 8px; background-color: #000; color: #FFF; border-radius: 3px; } #scrollbubble:after { content: " "; position: absolute; top: 50%; right: -8px; height: 0; width: 0; margin-top: -4px; border: 4px solid transparent; border-left-color: #000; } Luego en acciones.js Al final Agregan var scrollTimer = null; $(window).scroll(function() { var viewportHeight = $(this).height(), scrollbarHeight = viewportHeight / $(document).height() * viewportHeight, progress = $(this).scrollTop() / ($(document).height() - viewportHeight), distance = progress * (viewportHeight - scrollbarHeight) + scrollbarHeight / 2 - $('#scrollbubble').height() / 2 ; $('#scrollbubble') .css('top', distance) .text('Progress (' + Math.round(progress * 100) + '%)') .fadeIn(100) ; // Fade out the annotation after 1 second of no scrolling. if (scrollTimer !== null) { clearTimeout(scrollTimer); } scrollTimer = setTimeout(function() { $('#scrollbubble').fadeOut(); }, 500); }); Bueno esto Fue Todo Espero y Les Sea Util y les Guste Esta pequeña (MINI-MOD) Estoy Preparando algo Grande y Bueno para el Script Cuando lo termine Lo Comparto y espero y les gusten mis pequeños aportes!!
  14. Temas Destacados del Día + Validador de Imagenes Live Aqui les comparto este complemento que muestra los temas destacados del día, (24 hs). Esta se le agrega la opcion de ingresar imagen para su visualización. Tiene incluido un validador de imagenes que cargara en tiempo real la imagen, y si no detecta la imagen como válida no dejara agregar el posts, asi como tampoco dejar un campo vacio o algun valor que no se mas que una imagen. Y muestra informacion del problema si se diera. Hacemos esta consulta SQL ALTER TABLE p_posts ADD post_imagen VARCHAR( 300 ) NOT NULL; En c.posts.php buscamos: 'category' => intval($_POST['categoria']), Y agregamos abajo: 'imagen' => $tsCore->setSecure($_POST['imagen']), Buscamos: 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(); Y en esas lineas despues de , post_status Agregamos: , post_imagen Buscamos en la misma linea ? '\'3\'' : '\'0\'').')')) { Y lo cambiamos por: ? '\'3\'' : '\'0\'').', \''.$postData['imagen'].'\')')) { Buscamos: 'category' => $_POST['categoria'], Y agregamos abajo: 'imagen' => $tsCore->setSecure($_POST['imagen']), Despues buscamos: post_sticky = \''.$postData['sticky'].'\' Y agregamos al lado , post_imagen = \''.$postData['imagen'].'\' agregamos al final antes la ultima } Agregamos arriba: function lasDestacados(){ $limit = 5; $time = time() - 60*1440; $query = mysql_query('SELECT p.post_id, p.post_user, p.post_category, p.post_title, p.post_date, p.post_puntos, p.post_comments, p.post_private, p.post_status, p.post_imagen, c.c_nombre, c.c_seo, c.c_img FROM p_posts AS p LEFT JOIN p_categorias AS c ON c.cid = p.post_category WHERE p.post_status = 0 AND p.post_date > \''.$time.'\' ORDER BY p.post_puntos DESC LIMIT '.$limit); $data = result_array($query); return $data; } En posts.php buscamos: // DO <= PARA EL MENU $smarty->assign("tsDo",$_GET['do']); Y agregamos abajo: $smarty->assign("tsDestacados",$tsPosts->lasDestacados()); Al final de funciones.js agregamos: $(document).ready(function () { $('#thumb_url').keyup(function () { var t = this; clearTimeout(this.timer); this.timer = setTimeout(function () { if (t.value == t.current) { return true; } var preview = $('#thumb_preview').html('<div class="thumbnail-img" style="color:green"><img src="' + global_data.url + '/themes/default/images/loading.gif" height="16" width="16" /> Cargando la imagen. Por favor espere...</div>'); var i = new Image(); clearTimeout(t.timeout); if (t.value == '') { preview.html(''); } else { i.src = t.value; i.className = 'thumbnail-img'; t.timeout = setTimeout(function () { if (document.getElementById('thumbnail').checked == true) { document.getElementById('thumbnail').click(); } preview.html('<div class="thumbnail-img" style="color:red">La imagen no se pudo cargar o no existe. Por favor reintentalo.</div>') & document.getElementById('thumbnail').click(); i = null; }, 1000); i.onload = function () { clearTimeout(t.timeout); preview.empty().append(i); i = null; if (document.getElementById('thumbnail').checked == true) { document.getElementById('thumbnail').click(); } }; } t.current = t.value; }, 250); }).change(function () { $(this).keyup(); }); }); En m.agregar_form.tpl buscamos: {if ($tsUser->is_admod > 0 || $tsUser->permisos.moedpo) && $tsDraft.b_title && $tsDraft.b_user != $tsUser->uid} <li style="clear:both;"> <label>Raz&oacute;n</label> <span style="display: none;" class="errormsg"></span> <input type="text" tabindex="8" name="razon" maxlength="150" size="60" class="text-inp" value="" style="width:578px"/> Si has modificado el contenido de este post ingresa la raz&oacute;n por la cual lo modificaste. </li> {/if} Y agregamos arriba: <li class="tumv"> <label>Thumbnail</label> <span style="display: none;" class="errormsg ervh"></span> <input type="text" id="thumb_url" tabindex="16" name="imagen" maxlength="190" style="width:250px" placeholder="URL de la imagen en miniatura" size="60" class="text-inp required" value="{$tsDraft.b_imagen}"/> <input type="checkbox" name="valid_thumbnail" id="thumbnail" style="display:none" disable /> <p style="color:#999;font-size: 11px;margin: 2px 0 5px 2px;">Actuara como Imagen identificatoria del Post.</p> <div id="thumb_preview" class="thumbnail-preview"><div class="thumbnail-img"></div></div> </li> En m.agregar_javascript.tpl buscamos: if ($('textarea[name=cuerpo]').val().length > 63206) { showError($('textarea[name=cuerpo]').get(0), 'El post es demasiado largo. No debe exceder los 65000 caracteres.'); return false; } Y agregamos abajo: if (document.getElementById('thumbnail').checked == true) { showError($('input[name=imagen]').get(0), 'La imagen no es válida'); return false; } Al final de extras.css agregamos: .thumbnail-preview { width: 155px; height: 120px; background: url('images/camera-big.png') #EEE no-repeat center; margin: 13px auto 10px; display: block; border: solid 4px white; outline: solid 1px #CCC; } .thumbnail-img{ width: 155px; height: 120px; } .tumv { background:#DDD; float:left; padding:15px; margin:10px 10px 20px 0px; } .last-dest { height:auto; background:#FFF; border:1px solid #CCC; border-radius:5px; -moz-border-radius:5px; -webkit-border-radius:5px; -o-border-radius:5px; padding-bottom:10px; color:#999; } ul.list-data li { display:block; border-bottom:1px solid #CCC; padding:3px 3px 1px 2px; } ul.list-data li:hover { background:#EEE; } ul.list-data li a img { width:70px; height:70px; padding:1px; border:1px solid #CCC; } ul.list-data li a img:hover { background:#FFF; opacity:0.70; padding:1px; border:1px solid #0CF; } .updesc { position:absolute; color:#999; margin:0 0 5px 5px; } .updesp { position:absolute; width:200px; margin:-50px 0 0 80px; } .t-des { font-size:14px; text-align:left; color:#666; padding:5px 0 5px 15px; font-weight:bold; border-bottom:1px solid #CCC; background:#EEE url('images/box_titlebg2.gif'); 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; } En t.home.tpl buscamos: {include file='modules/m.home_stats.tpl'} Y agregamos abajo: {include file='modules/m.home_posts_destacados.tpl'} Subimos los archvos a sus respectivas carpetas: Archivos Si ya tienen portadas aplicadas, no apliquen los pasos en c.posts.php, salvo lo ultimo que se agrega. Espero que les sea de útilidad. Hasta la próxima.
  15. Hola amigos! Hoy les traigo la versión móvil v3, ya estable. ¿Que tiene? - Botón en footer para alternar versiones. - Mantiene tu elección durante 1 año (365 días naturales) - Cambio automático(Sin necesidad de refrescar) al clickar en el botón. - Arreglo del elevado consumo de recursos. - Plantilla móvil automática al acceder desde una versión móvil. - Mas de 28 marcas de dispositivos detectados. - Mantener tu plantilla principal para cuando se acceda desde PC 1) Instalan la v2: 2) Abren el c.core.php de inc/class y buscan: public function isMobile($userAgent) { $userAgent = strtolower($userAgent); foreach($this->_mobileClients as $mobileClient) { if (strstr($userAgent, $mobileClient)) { return true; } } return false; } Y lo reemplazamos por: public function isMobile($userAgent) { if($_COOKIE['m'] == 1) return true; elseif(isset($_COOKIE['m']) && $_COOKIE['m'] == 0) return false; $userAgent = strtolower($userAgent); foreach($this->_mobileClients as $mobileClient) { if (strstr($userAgent, $mobileClient)) { return true; } } return false; } 3) Abren el main_footer.tpl de themes/TUTEMA/templates/sections y buscan: <!--end-cuerpo--> </div> <div id="pie"> <a href="{$tsConfig.url}/pages/ayuda/">Ayuda</a> - Y lo reemplazan por: {literal} <script type='text/javascript'> function sCookie(n, v, t){ var fecha = new Date(); fecha.setTime(fecha.getTime() + t); document.cookie = n + ' = ' + escape(v) + ((t == null) ? '' : '; expires = ' + fecha.toGMTString()) + '; path=/'; window.location.reload(); } </script> {/literal} <!--end-cuerpo--> </div> <div id="pie"> <a href="{$tsConfig.url}/pages/ayuda/">Ayuda</a> - <a href="#" onClick="sCookie('m', '1', 365*24*60*60*1000);">Versión Móvil</a> - NOTA: El código anterior puede variar dependiendo el theme que usen. 4) Abren el main_footer.tpl de themes/Risunsive V1/templates/sections y buscan: {* El siguiente contenedor sirve para validar el Copyright *} {* El ID del div NO debe ser alterado de lo contrario nuestro validador *} {* tomará al sitio como una web sin copyright *} <footer id="pie" class="footer"> <ul> <li><a href="{$tsConfig.url}/pages/ayuda/">Ayuda</a></li> Y lo reemplazan por: {literal} <script type='text/javascript'> function sCookie(n, v, t){ var fecha = new Date(); fecha.setTime(fecha.getTime() + t); document.cookie = n + ' = ' + escape(v) + ((t == null) ? '' : '; expires = ' + fecha.toGMTString()) + '; path=/'; window.location.reload(); } </script> {/literal} {* El siguiente contenedor sirve para validar el Copyright *} {* El ID del div NO debe ser alterado de lo contrario nuestro validador *} {* tomará al sitio como una web sin copyright *} <footer id="pie" class="footer"> <ul> <li><a href="{$tsConfig.url}/pages/ayuda/">Ayuda</a></li> <li><a href="#" onClick="sCookie('m', '0', 365*24*60*60*1000)">Versión completa</a></li> Y listo!! Caps: Desde PC : Desde móvil: Demo: http://programu.net/#main_footer Saludos
  16. Buenas amigos por aca les dejare esto.. Gracias a Dressli Que me ayudo a adaptar esto. Vas a extras.css y al final agregas @import url("http://nvcnr.web44.net/stylesheet/reset.css"); @import url("http://fonts.googleapis.com/css?family=Roboto:100"); .window-body { font-family: 'Roboto', sans-serif; color: #FFF; font-weight: bold; text-shadow: 0 0 1px rgba(0,0,0,0.5); margin: 20px; overflow: hidden; box-shadow: 4px 6px 10px 0 rgba(0,0,0,0.5); } .window-body dt { font-size: 18pt; padding: 8px 12px; margin-bottom: 8px; background-color: rgba(0,0,0,0.1); box-shadow: 0 1px 3px 0 rgba(0,0,0,0.2); } .window-body dd { font-size: 8pt; line-height: 1.8em; padding: 0 15px 15px; } .window-body.red { background-color: #E74C3C; } .window-body.green { background-color: #519E2A; } .window-body.blue { background-color: #0072C6; } .window-body.orange { background-color: #FF3D0D; } .window-body.purple { background-color: #800080; } .window-body.code { background-color: #10618F; } .window-body.code dt { font-size: 12pt; } .window-body.code dd { overflow: auto; } .window-body.code pre { font-weight: normal; } Vas bbcode.inc.php y buscas array("name" => "b","pre" => "<b>","suf" => "</b>"), Y abajo agregas array("name" => "ventanared","pre" => "<dl class=\"window-body red\"><dt>Ventana</dt><dd>","suf" => "</dd></dl>"), array("name" => "ventanagreen","pre" => "<dl class=\"window-body green\"><dt>Ventana</dt><dd>","suf" => "</dd></dl>"), array("name" => "ventanablue","pre" => "<dl class=\"window-body blue\"><dt>Ventana</dt><dd>","suf" => "</dd></dl>"), array("name" => "ventanaorange","pre" => "<dl class=\"window-body orange\"><dt>Ventana</dt><dd>","suf" => "</dd></dl>"), array("name" => "ventanapurple","pre" => "<dl class=\"window-body purple\"><dt>Ventana</dt><dd>","suf" => "</dd></dl>"), array("name" => "ventanacode","pre" => "<dl class=\"window-body code\"><dt>Ventana</dt><dd class=\"nano\">","suf" => "</dd></dl>"), Más arriba buscas " font", "size" Y al lado agregas , "ventanared", "ventanagreen", "ventanablue", "ventanaorange", "ventanapurple", "ventanacode" Despues vas a c.core.php y buscas , 'font', 'size' Y al lado agregas , 'ventanared', 'ventanagreen', 'ventanablue', 'ventanaorange', 'ventanapurple', 'ventanacode' Y se usa a si ._. [ventanared] [ventanagreen] [ventanablue] [ventanaorange] [ventanapurple] [ventanacode] Despues hare un topic.... Cap
  17. Bueno les comparto el mini-mod que hizo vel yo lo cambie a mi gusto, consiste en que los post nuevos en la Home aparescan con una imagen de "nuevo" y deja de mostrarse esa imagen cuando tenga el numero de visitas que se le asiste al mod! En c.posts.php buscas: $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); Y en esas lineas al lado de: p.post_puntos, agregas: p.post_hits, En m.home_last_posts.tpl buscas: <span class="floatR"><a href="{$tsConfig.url}/posts/{$p.c_seo}/">{$p.c_nombre}</a></span> Y agregas abajo: {if $p.post_hits==0}<img style="position:absolute;float:left;left:425px;margin-top:-17px;" alt="Nuevo" src="{$tsConfig.tema.t_url}/images/icons/cat/new.png">{/if} Donde ven $p.post_hits==0 , cambian el valor de 0 por el que conisideren para que sea nuevo. Bueno eso es todo espero que les sirva y slds!!
  18. Hola amigos, este es el mod de fondo de perfil y cabecera, pero adaptado a la nueva versión de phpost risus 1.2... almenos lo adapte de acuerdo a los cambios que vi en los archivos php , todos los créditos son para tutan creador del mod. Dejo una captura: Comencemos con la instalación: Primero hacemos estas 2 consultas: ALTER TABLE `u_perfil` ADD `p_fondo` VARCHAR(120) NOT NULL ALTER TABLE `u_perfil` ADD `p_fondoper` VARCHAR(120) NOT NULL Abren c.cuenta y buscan: 'sitio' => $tsCore->setSecure($tsCore->parseBadWords($sitio), true), dejabo añaden: 'fondo' => $tsCore->setSecure($tsCore->parseBadWords($_POST['fondo'])), 'fondoper' => $tsCore->setSecure($tsCore->parseBadWords($_POST['fondoper'])), En el mismo archivo dentro de la funcion "function loadHeadInfo($user_id)" buscan: db_exec(array(__FILE__, __LINE__), 'query', 'SELECT u.user_id, u.user_name, u.user_registro, u.user_lastactive, u.user_activo, u.user_baneado, p.user_sexo, Adelante de p.user_sexo agregan: p.p_fondo, En esa misma linea buscan: p.p_socials, Al lado agregan: p.p_fondoper, Ahora en t.perfil.tpl que esta en tutheme/default/templates/ Buscan: {include file='sections/main_header.tpl'} Abajo agregan: {if $tsInfo.p_fondoper != ''} <body style="background-image:url('{$tsInfo.p_fondo}');background-attachment: fixed; background-position: center; background-size:100%;"> {/if} En el mismo archivo buscan: <script type="text/javascript" src="{$tsConfig.default}/js/perfil.js"></script> Y abajo agregan: {if $tsInfo.p_fondoper != ''} <div class="cover" style="margin-top: 0px;" data-collapse="97" id="u3yiwu_4"><div class="coverImage"> <div id="zoom-fondo" onClick="zoom('ocultar','zoom')"></div> <div id="zoom"> <center><b id='zoom_contenido'></b></center> </div> <a class="coverWrap" style="{if $tsInfo.p_fondoper}position: relative!important;{/if}" rel="theater" id="fbCoverImageContainer"> <img class="photo img" src="{$tsInfo.p_fondoper}" id="{$tsInfo.p_fondoper}" text="Foto de {$tsInfo.nick}" style="top:-13px;height:300px;width:100%;" data-fbid="2738175107697" onclick="zoom('mostrar','zoom','{$tsInfo.p_fondoper}')"> </a> </div> </div> {/if} luego abrimos m.cuenta_perfil_me.tpl y buscan: <div class="field"> <label for="sitio">Sitio Web</label> <input type="text" value="{$tsPerfil.p_sitio}" maxlength="60" name="sitio" id="sitio" class="text cuenta-save-2" style="width:230px"> </div> debajo agregan: <div class="field"> <label for="sitio">Cabecera de Perfil:<br /><font color="red"><span>url de una imagen mayor a 1000 x 230</span></font></label><br /> <input type="text" value="{$tsPerfil.p_fondoper}" maxlength="120" name="fondoper" id="sitio" class="text cuenta-save-2" style="width:230px"> </div> <div class="field"> <label for="sitio">Fondo del perfil:<br /><span><font color="red">url de una imagen mayor a 800 x 600</span></font></label><br /> <input type="text" value="{$tsPerfil.p_fondo}" maxlength="120" name="fondo" id="sitio" class="text cuenta-save-2" style="width:230px"> </div> luego abren su estilo.css y al final ponen: /*-----Cabecera de Perfil-------*/ .coverWrap { display: block; position: absolute; height: 300px; overflow: hidden; margin: 0 auto; text-decoration: none; min-height: 0px; max-height: 300px; } /****** Timeline by tutan ******/ .perfil-avatar2 { float:left; border:6px solid #fff;-webkit-border-radius:2px; margin: -80px 10px 10px 0; } .perfil-avatar2 img { background-color: #FFF; border:1px solid #CCCCCC; height:120px; width:120px; } #zoom-fondo { display:none;/*ocultar el fondo*/ position: fixed; /*posicionamos el fondo movible*/ cursor: pointer;/*colocamos el cursor de mano al fondo*/ top: 0; left: 0; width: 100%; /*fondo al total de la pantalla*/ height: 100%; background:#000; /*color de fondo*/ z-index:101;/*posicion de primer plano*/ /*opacidad del fondo*/ filter:alpha(opacity=75); -moz-opacity:0.6; -khtml-opacity: 0.6; opacity: 0.6; } .cerrar-fondo { display:none;/*ocultar el fondo*/ position: fixed; /*posicionamos el fondo movible*/ cursor: pointer;/*colocamos el cursor de mano al fondo*/ top: 1; left: 1; background:#000 url(images/icons/close.png) no-repeat;/*color de fondo*/ z-index:101;/*posicion de primer plano*/ /*opacidad del fondo*/ } #zoom{ height: auto; margin: 0 auto; width: 50%; display:none;/*ocultar el contenedor*/ position: fixed; margin-top:-5%; text-shadow: 0 1px 1px rgba(0,0,0,.3);/*sombra del texto*/ color: #FFF; font: 14px arial,sans-serif;text-align:left; background:#000;/*color de fondo*/ z-index:101;/*pocicionamiento de segundo plano*/ border : 5px solid #000;/*ancho y color de borde*/ -moz-border-radius:6px;-webkit-border-radius:6px;border-radius:6px/*redondes del marco*/ } .maxin { max-width: 620px; max-height: 430px; } .a { color: #00BFFF; padding:3px; margin:2px; background:#78899; } Abren su m.perfil_headinfo y buscan: <div class="perfil-avatar"> <a href="{$tsConfig.url}/perfil/{$tsInfo.nick}"><img alt="" src="{$tsConfig.url}/files/avatar/{if $tsInfo.p_avatar}{$tsInfo.uid}_120{else}avatar{/if}.jpg"/></a> </div> reemplazan por: {if $tsInfo.p_fondoper != ''} <div class="perfil-avatar2"> <a href="{$tsConfig.url}/perfil/{$tsInfo.nick}"><img alt="" src="{$tsConfig.url}/files/avatar/{if $tsInfo.p_avatar}{$tsInfo.uid}_120{else}avatar{/if}.jpg"/></a> </div> {else} <div class="perfil-avatar"> <a href="{$tsConfig.url}/perfil/{$tsInfo.nick}"><img alt="" src="{$tsConfig.url}/files/avatar/{if $tsInfo.p_avatar}{$tsInfo.uid}_120{else}avatar{/if}.jpg"/></a> </div> {/if} para terminar abren su acciones.js y al final agregan: function zoom(estado,elemento,img_id) { //alert(img_id); if(estado == "mostrar") { zoom_estado = document.getElementById(elemento); zoom_fondo = document.getElementById('zoom-fondo'); imagen_id = document.getElementById(img_id); ruta = imagen_id.getAttribute("src"); document.getElementById('zoom_contenido').innerHTML = "<img style='max-width:90%; max-height:450px;' src='"+ruta+"'><br>"; zoom_estado.style.display = 'block'; zoom_fondo.style.display = 'block'; } else { zoom_estado = document.getElementById(elemento); zoom_fondo = document.getElementById('zoom-fondo'); zoom_estado.style.display = 'none'; zoom_fondo.style.display = 'none'; } } Y eso es todo... como vi esta zona muy vacia quise compartir esto jeje
  19. Aqui les comparto este generador de posts, este va integrado al script a diferencia de los que habian visto, que se hacian desde un enlace externo.. Se le agrega un boton para acceder al generador, ya que vi que algunos tienen problemas con el bbcode para agregarlo les deje asi con un boton.. En m.agregar_form.tpl 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> Y agregamos abajo: <li>{include file='modules/m.generador_posts.tpl'}</li> Agregamos al final de extras.css .spacev { padding-bottom:10px; } #contenido { width:775px; } #contenido .caja { border: 1px dashed #979797; width:375px; margin:5px; -moz-border-radius:2px; float:left; background:#EEE; } .big { width:762px!important; } .completo { width:670px!important; } .caja h2 { background-color: #FAFCFD; color:#FFF; margin-top:0; font-size:14px; text-shadow:1px 1px 0 #7E7E7E; clear: left; background: #979797; height: 20px; line-height: 1.5; box-shadow: 0 2px 20px #858D93; } .caja h2 { padding: 3px 0 2px 8px !important; } .caja .caja-cont { overflow: hidden; white-space: nowrap; } .caja .caja-cont p { font-size:13px; font-family:Arial, Helvetica, sans-serif; color:#757575; text-align:justify; padding-left:7px; } .caja .caja-cont input,textarea { color:#388418; padding:2px; margin:6px; } .caja .caja-cont img {display: block; margin: auto; float:left} .icono_bien { background: url(images/bien.png) no-repeat left center; list-style-type: none; padding-left: 18px; } .icono_mal { background: url(images/mal.png) no-repeat left center; list-style-type: none; padding-left: 18px; } .PostText { color: #black; font-size: 17px; } .caja2 { font-size: 17px; font-family: Arial, Helvetica, sans-serif; color: #757575; text-align: justify; padding-left: 7px; } .btn { display: inline-block; padding: 5px 10px; margin: 3px; border: 1px solid; border-radius: 4px; font-weight: bold; font-size: 12px; font-family: Helvetica Neue, Helvetica, Arial; cursor: pointer; box-shadow: 0 1px 0 0 #DDD; } .btn.a { border-color: #4081AF #2E69A3 #20559A; color: #ffffff; text-shadow: 0 -1px 1px #3275BC; background: #52a8e8; background: -moz-linear-gradient(top, #52a8e8 0%, #377ad0 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#52a8e8), color-stop(100%,#377ad0)); background: -webkit-linear-gradient(top, #52a8e8 0%,#377ad0 100%); background: -o-linear-gradient(top, #52a8e8 0%,#377ad0 100%); background: -ms-linear-gradient(top, #52a8e8 0%,#377ad0 100%); background: linear-gradient(top, #52a8e8 0%,#377ad0 100%); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#52a8e8', endColorstr='#377ad0',GradientType=0 ); } .btn.a:hover { border-color: #2A73A6 #165899 #07428F !important; border-style: solid !important; border-width: 1px !important; box-shadow: 0 1px 0 0 #62B1E9 inset !important; text-shadow: 0 -1px 1px #1D62AB !important; background: #3e9ee5; background: -moz-linear-gradient(top, #3e9ee5 0%, #206bcb 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#3e9ee5), color-stop(100%,#206bcb)); background: -webkit-linear-gradient(top, #3e9ee5 0%,#206bcb 100%); background: -o-linear-gradient(top, #3e9ee5 0%,#206bcb 100%); background: -ms-linear-gradient(top, #3e9ee5 0%,#206bcb 100%); background: linear-gradient(top, #3e9ee5 0%,#206bcb 100%); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#3e9ee5', endColorstr='#206bcb',GradientType=0 ); } .btn.a:hover { text-decoration: none !important; } .btn.a:active, .btn.a.active { -moz-border-bottom-colors: none !important; -moz-border-image: none !important; -moz-border-left-colors: none !important; -moz-border-right-colors: none !important; -moz-border-top-colors: none !important; background: none repeat scroll 0 0 #3282D3 !important; border-color: #154C8C #154C8C #0E408E !important; border-style: solid !important; border-width: 1px !important; box-shadow: 0 0 6px 3px #1657B5 inset, 0 1px 0 0 #FFFFFF !important; text-shadow: 0 -1px 1px #2361A4 !important; } Al final de funciones.js agregamos: function hxywg() { var txt = ""; document.getElementById("markItUp").value = ""; if (document.getElementById("titulo").value != ""){ txt = "[align=center][b][color=#244061][size=18]"; txt += document.getElementById("titulo").value; txt += "[/size][/color][/b][/align]\n"; document.getElementById("markItUp").value += txt;} if (document.getElementById("portada").value != ""){ txt = ""; txt += "[hr]\n"; txt += "\[align=center][img="; txt += document.getElementById("portada").value; txt += "][/align]\n\n"; document.getElementById("markItUp").value += txt;} if (document.getElementById("swf1").value != ""){ txt = ""; txt += "[align=center][img=http://i.i.imgur.com/s1ksJ1i.png][/align]\n"; txt += "\[align=center][swf="; txt += document.getElementById("swf1").value; txt += "][/align]\n\n"; document.getElementById("markItUp").value += txt;} if (document.getElementById("youtube").value != ""){ txt = ""; txt += "[align=center][img=http://i.i.imgur.com/Xq7tYkD.png][/align]\n"; txt += "\[align=center][swf=http://www.youtube.com/watch?v="; txt += document.getElementById("youtube").value; txt += "][/align]\n\n"; document.getElementById("markItUp").value += txt;} if (document.getElementById("info").value != ""){ txt = ""; txt += "[align=center][img=http://i.i.imgur.com/jfSMpc5.png][/align]\n"; txt += "[align=center][color=#3F3F3F][size=13]\n"; txt += document.getElementById("info").value; txt += "[/size][/color][/align]\n\n\n"; document.getElementById("markItUp").value += txt;} if (document.getElementById("ss1").value != ""){ txt = ""; txt += "[align=center][img=http://i.i.imgur.com/mDoGVtc.png][/align]\n"; txt += "[align=center][img="; txt += document.getElementById("ss1").value; txt += "][/align]\n\n"; document.getElementById("markItUp").value += txt;} if (document.getElementById("ss2").value != ""){ txt = ""; txt += "\n"; txt += "[align=center][img="; txt += document.getElementById("ss2").value; txt += "][/align]\n\n"; document.getElementById("markItUp").value += txt;} if (document.getElementById("ss3").value != ""){ txt = ""; txt += "\n"; txt += "[align=center][img="; txt += document.getElementById("ss3").value; txt += "][/align]\n\n"; document.getElementById("markItUp").value += txt;} if (document.getElementById("downlinks").value != ""){ txt = ""; txt += "[align=center][img=http://i.i.imgur.com/tutl0G8.png][/align]\n"; txt += "[align=center]"; txt += document.getElementById("downlinks").value; txt += "[/align]"; document.getElementById("markItUp").value += txt;} if (document.getElementById("pass").value != ""){ txt = ""; txt += "[align=center][img=http://i.i.imgur.com/9N5kSJl.png]\n"; txt += document.getElementById("pass").value; txt += "[/align]\n\n"; document.getElementById("markItUp").value += txt;} } Subimos los archivos a sus respectivas carpetas... Descargar archivos En la descarga les deje la Instalacion en un txt por si no se ve bien en el topic. Por ahora este editor solo tiene lo basico del bbcode.. En la segunda le agregare todas las opciones que se puedan agregar. Hay que mencionar que use el generador que le dieron un estilo, no recuero bien el user que lo hizo.. si alguien lo recuerda asi me lo dice ya que en parte del diseño es de el.. aunque funciona con el que estaba primero solo que este tiene otro color y un poco de diseño añadido. Espero que les sea de utilidad.. Hasta la Proxima..
  20. Hola amigos mi primer aporte a la comunidad espero que os guste el diseño esta basado en este pedido ==>> Bueno aqui una captura: Para empezar creo que funciona con cualquier theme que tengais pero no puedo asegurarlo asi que lo primero es ir al tema que tengais y dentro de la carpeta templates buscar el archivo t.home.tpl y buscar esta linea {include file='sections/main_header.tpl'} y antes de esa poner {if $tsUser->is_member} ( Esto es una condicion de que si el usuario es miembro y esta logueado la pagina se muestre normal) despues buscar en el mismo archivo {include file='sections/main_footer.tpl'} y despues de esa linea poner {else} {$tsInstall} {include file='sections/main_login.tpl'} {/if} ( Esto es una condicion de que si el usuario no es miembro y no esta logueado la pagina se muestre el index personal de la captura) Luego ir a la carpeta sections y copiar el archivo main_login.tpl incluido en la descarga y luego ir a la carpeta css y copiar el archivo index.css que esta en la descarga y luego ir a la carpeta images y copiar la imagen fondo.jpg que esta tambien el la descarga y con esto tendreis vuesta index personalizada como la de arriba P.D Cualquier modificacion o soporte se dara respuesta por aqui en este post. Una aclaracion para que funcione el login con Facebook debereis tener intalado este complento ==>> www.phpost.net/topic/23348-mod-facebook-connect-10/ Muchas Gracias
  21. Buenas Amigos hoy les traigo una pequeña mini mod que hice ya que ya dias queria hacer que las categorias le mostraran en una lista en la Home algo que es un tanto simple pero que por ahora no lo he visto en el foro, Espero y les Guste mi pequeño aporte y me Den sus Oponiones y Sugerencias.. Aca una Captura.. Bueno Para empesar deveran agregar este codigo al final de todo en stilo.css /*=======Categorias en Lista By Montiel========*/ .cate li{ padding-right:10px; padding-left:10px; margin:0px; text-align:center; height:20px; background:#eee; width:100%; border-top:1px solid #e3e3e3; padding-top:2px; border-left:3px solid #feba01; } .cate a{ width:100%; } .cate a:hover{ text-decoration:none; color:#fff; } .cate li:hover{ background:#c5c5c5; color:#fff; } /*=======END Categorias en Lista By Montiel========*/ Bueno Ahora deveran Subir el archivo m.h.c.tpl a la carpeta modules en su sitio m.h.c.tpl Y en t.home.tpl deveran buscar {include file='modules/m.home_afiliados.tpl'} y Abajo agregar. {include file='modules/m.h.c.tpl'} Y bueno eso es todo espero y les Guste aca pueden ver una demo . http://witpost.com Gracias por Visitar el Topic
  22. Hola esta es un agregado del mod de alan: Esta versión agrega el compartir publicaciones del muro y al crear posts. Hagan respaldo de los siguientes archivos: - perfil.js - c.muro.php - header.php - c.user.php - c.posts.php Empezamos instalando el mod de alan ( ) excepto la parte de la cuenta. Si ya lo tienen instalado ,saltense este paso. 2- Abrimos perfil.js y buscamos: (linea 288) data: 'adj=' + muro.stream.adjunto +'&data=' + encodeURIComponent(data) + '&pid=' + $('#info').attr('pid'), Reemplazamos por: data: 'adj=' + muro.stream.adjunto +'&data=' + encodeURIComponent(data) + '&pid=' + $('#info').attr('pid')+ '&fbu=' + $('#fb').attr('fbu'), 3- Abrimos c.user.php y buscamos: (linea 176) // NOMBRE $this->nick = $this->info['user_name']; Reemplazamos por: // NOMBRE $this->fb = $this->info['user_fb']; $this->nick = $this->info['user_name']; 3-Abrimos c.posts.php y buscamos: (linea 115) // ESTOS PUEDEN IR VACIOS $postData['visitantes'] = empty($_POST['visitantes']) ? 0 : 1; Agregamos debajo: $postData['fbu'] = empty($_POST['fb']) ? 0 : 1; Mas abajo buscamos: (linea 149) // SUBIR DE RANGO? $this->subirRango($tsUser->uid); Debajo agregamos: $this->sendfb($postData['fbu'], $postID); Mas Abajo buscamos: /* savePost() */ Antes agregamos: //Facebook Connect 2.0 by Tutan-Kabron function sendfb($fbu, $postID){ global $tsCore, $tsUser, $fb; $query = mysql_query('SELECT p.post_id, p.post_category, p.post_title, c.c_nombre, c.c_seo, c.cid FROM p_posts AS p LEFT JOIN p_categorias AS c ON c.cid = p.post_category WHERE p.post_id = '.$postID.' LIMIT 1'); $ca = mysql_fetch_assoc($query); $url = $tsCore->settings['url']; $cat = $ca['c_seo']; $tit = $tsCore->setSEO($ca['post_title']); $html = '.html'; if($tsUser->fb){ if($fbu == 1){ $fac = $url."/posts/".$cat."/".$postID."/".$tit.".html"; if(!is_null($fb)) $fb->api('/me/feed', 'post', array('message' => 'Cree un nuevo post en '.$tsCore->settings['titulo'],'link' => $fac,'name' => utf8_encode(strip_tags($ca['post_title'])), 'description' => $tsUser->nick, 'caption' => utf8_encode($ca['post_title']) )); }} } 4-Abrimos c.muro.php y buscamos: (linea 170) public function streamPost(){ global $tsCore, $tsUser, $tsMonitor, $tsActividad; // $pid = intval($_POST['pid']); Reemplazamos por: public function streamPost(){ global $tsCore, $tsUser, $tsMonitor, $tsActividad, $fb; // $pid = intval($_POST['pid']); $fbu = intval($_POST['fbu']); Mas abajo buscamos: // $type = ($pid == $tsUser->uid) ? 'status' : 'mpub'; Antes agregamos: //Facebook Connect if($pid == $tsUser->uid){ if($fbu == '1'){ if(!empty($tsUser->fb)){ if(!is_null($fb)) $fb->api('/me/feed', 'post', array('message' => strip_tags($data))); }} } Mas abajo buscamos: $type = 'mfoto'; Agregamos antes: //Facebook Connect if($pid == $tsUser->uid){ if($fbu == '1'){ if(!empty($tsUser->fb)){ if(!is_null($fb)) if(!preg_match('/fbcdn/',$foto,$menciones)){ $fb->api('/me/feed', 'post', array('message' => strip_tags($data),'picture' => $foto,'name' => 'Publique una nueva imagen en '.$tsCore->settings['titulo'], 'description' => $tsUser->getUserName($pid), 'caption' => strip_tags($foto) ));}}}} Mas abajo buscamos: $type = 'mlink'; antes agregamos: //Facebook Connect if($pid == $tsUser->uid){ if($fbu == '1'){ if(!empty($tsUser->fb)){ if(!is_null($fb)) $fb->api('/me/feed', 'post', array('message' => strip_tags($data),'link' => ($enlace['url']),'name' => strip_tags($data), 'description' => $tsUser->getUserName($pid), 'caption' => 'Publique un nuevo enlace en '.$tsCore->settings['titulo'] )); }}} Mas abajo buscamos: $type = 'mvideo'; Antes agregamos: //Facebook Connect if($pid == $tsUser->uid){ if($fbu == '1'){ if(!empty($tsUser->fb)){ if(!is_null($fb)) $fb->api('/me/feed', 'post', array('message' => strip_tags($data), 'link' => "http://www.youtube.com/watch?v={$video['ID']}", 'name' => ($video['title']), 'description' => ($video['desc']), 'caption' => 'Publique un nuevo video en '.$tsCore->settings['titulo'] ));}}} 5-Abrimos header.php y buscamos: /* * ------------------------------------------------------------------- * Asignación de variables * ------------------------------------------------------------------- */ Agregamos antes: $webconf = array( 'fbAppId' => 'APPID', 'fbAppSecret' => 'APPSECRET', ); $fb = new Facebook(array( 'appId' => $webconf['fbAppId'], 'secret' => $webconf['fbAppSecret'], 'fileUpload' => true, 'cookie' => true )); $fb->setFileUploadSupport(true); $user = $fb->getUser(); if( $user ){ try { $user_profile = $fb->api('/me'); } catch (FacebookApiException $e) { error_log($e); $user = null; } } En la siguiente linea reemplazamos APPID,APPSECRET x sus respectivos appid y appsecret $webconf = array( 'fbAppId' => 'APPID', 'fbAppSecret' => 'APPSECRET', ); 6-Abrimos m.agregar_form.tpl y buscamos: <div class="option clearbeta"> <li> <input type="checkbox" tabindex="6" name="privado" id="privado" class="floatL" {if $tsDraft.b_private == 1}checked="checked"{/if} /> <a class="chk-select round" href="#">No</a> <a class="chk-deselect round" href="#">Si</a> </li> <p class="floatL"> <label for="privado">S&oacute;lo usuarios registrados</label> Tu post ser&aacute; visto s&oacute;lo por los usuarios que tengan cuenta en {$tsConfig.titulo} </p> </div> Debajo agregamos: {if $tsUser->fb} <div class="option clearbeta"> <li> <input type="checkbox" tabindex="6" name="fb" id="fb" class="floatL" checked="checked" /> <a class="chk-select round" href="#">No</a> <a class="chk-deselect round" href="#">Si</a> </li> <p class="floatL"> <label for="fb">Compartir en Facebook</label> El post ser&aacute; compartido en tu facebook para que todos tus amigos puedan conocerlo. </p> </div> {/if} 7-Abrimos m.perfil_muro.tpl y al principio agregamos: (BASADO EN EL TEMA V5 DE TO-UP) dejo backup del codigo siguiente: http://tny.cz/e3142124 <script> {literal} //Js boton compartir facebook Tutan-Kabron 2013 function check() { $('#fb').attr('fbu','1'); document.getElementById('fb').value='1'; $('#c').show(); $('#u').hide(); setCookie("ch",1,365); } function uncheck() { document.getElementById('fb').value='0'; $('#fb').attr('fbu','0'); $('#u').show(); $('#c').hide(); setCookie("ch",0,365); } function setCookie(c_name,value,exdays) { var exdate=new Date(); exdate.setDate(exdate.getDate() + exdays); var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString()); document.cookie=c_name + "=" + c_value; } function leer(nombre) { var lista = document.cookie.split(";"); for (i in lista) { var busca = lista[i].search(nombre); if (busca > -1) {micookie=lista[i]} } var igual = micookie.indexOf("="); var valor = micookie.substring(igual+1); return valor; } function getCookie(c_name) { var c_value = document.cookie; var c_start = c_value.indexOf(" " + c_name + "="); if (c_start == -1) { c_start = c_value.indexOf(c_name + "="); } if (c_start == -1) { c_value = null; } else { c_start = c_value.indexOf("=", c_start) + 1; var c_end = c_value.indexOf(";", c_start); if (c_end == -1) { c_end = c_value.length; } c_value = unescape(c_value.substring(c_start,c_end)); } return c_value; } function doSomething() { var myCookie = getCookie("ch"); if (myCookie == null) { //setCookie("ch",1,365); check(); } else { ver(); } } function ver() { var t=getCookie("ch"); if (t='1'){ document.getElementById('fb').value='1'; $('#fb').attr('fbu','1'); $('#c').show(); $('#u').hide(); //setCookie("ch",1,365); } //else { if (t='0'){ document.getElementById('fb').value='0'; $('#fb').attr('fbu','0'); $('#u').show(); $('#c').hide(); //setCookie("ch",0,365); } } {/literal} </script> Buscamos: <a href="{$tsConfig.url}/cuenta/#Privacidad" style="display: inline-block;float: left;margin: 0 10px 0 0;" class="qtip" title="Opciones de Privacidad"><span class="candado-toup"></span></a> Debajo agregamos: {if $tsInfo.uid == $tsUser->uid} {if $tsUser->fb} <input type="hidden" id="fb" class="face-shout qtip" title="Compartir en Facebook" checked="checked" value="" fbu=""> <a onclick="uncheck()" id="c" class="face-shout qtip" title="Compartir en Facebook" style="opacity: 1;"></a> <a onclick="check()" id="u" class="face-shout qtip" title="Compartir en Facebook" ></a> {/if}{/if} 8-Agregamos lo siguiente al estilos.css (si tienen tema toup al to-up.css: a.face-shout { display: block; float: left; width: 16px; height: 16px; } a.face-shout { background: url(to-up/facebook_16.png) no-repeat!important; opacity:0.35; } a.face-shout:active { opacity:1; } Subimos esta imagen a la carpeta themes/v5/to-up/: 9-Abrimos m.cuenta_sidebar.tpl y al principio agregamos: <style> {literal} div.facebook-box-out { padding: 8px; border: 1px solid #284470; position: relative; background: url("http://o1.t26.net/img/facebook-box.gif") no-repeat scroll 60px 3px #005AA2; } .facebook-vinc { display: block; width: 161px; height: 22px; text-indent: -99999px; background: url('http://o1.t26.net/img/vincular-face.png') no-repeat transparent; } {/literal} </style> Mas abajo buscamos: </div> <div id="prueba"></div> Antes agregamos: {if $tsUser->info.user_fb} <br> <div class="facebook-box-out"> <img src="http://graph.facebook.com/{$tsUser->info.user_fb}/picture" style="margin-right: 175px;"> </div> {else}<br> <a class="facebook-vinc" href="/facebook-connect/">Vincular con Facebook</a> {/if} Caps: Creditos: - Shackur por el diseño. Nota: el diseño del perfil y posts esta basado en la version v5 , el diseño de cuenta es compatible con todos los temas Demo: http://www.mytech.com.mx Edit: 12/11/13 Abran main_header.tpl y busquen: <body id="cielo"> Reemplazen por: <body id="cielo" onload="doSomething()"> esto es para que funcione el boton de facebook saludos
  23. Hola a todos. Con algo de dificultad vuelvo a compartir en el foro, esta ves les traigo la V2 de la sección de archivos, ahora con multiples fix y nuevas funciones, que son: FIXES Borra los archivos del servidor (anteriormente no lo hacia). Nombres con puntos incluidos (si el nombre tenia puntos, excluía el resto del nombre después del punto. Ej: mi.nuevo.cel.jpg lo guardaba como mi.jpg). Ahora se pueden subir y descargar archivos php, html (anteriormente se descargaba el archivo y en su contenido el código fuente de la web). Porcentaje de subida de archivos (anteriormente solo mostraba 0% y 100% al terminar la subida). Entre otros fix menores para mejorar la sección. NOVEDADES Borrar múltiples archivos. Mover múltiples archivos. Ordenar archivos según nombre, fecha, tipo y descargas. Tamaño máximo de archivos y extensiones permitidas o no desde la administración. Ultimos archivos subidos por otros usuarios. Aportado por Nico Para instalar o actualizar el mod hacemos lo siguiente: Ir al topic de la V1.2 realizar los pasos 1 al 4, luego seguir con lo siguiente: inc/class/c.admin.php Debajo de: 'max_com' => $tsCore->setSecure($_POST['max_com']), Agregar: 'max_upload' => $tsCore->setSecure($_POST['max_upload']), 'files_type' => $tsCore->setSecure($_POST['files_type']), 'files_ext' => $tsCore->setSecure($_POST['files_ext']), Debajo de: $c['portal'] . '\', `c_allow_live` = \'' . $c['live'] . '\', `offline` = \'' . $c['offline'] . Agregar: '\', `c_max_upload` = \'' . $c['max_upload'] . '\', `c_files_type` = \'' . $c['files_type'] . '\', `c_files_ext` = \'' . $c['files_ext'] . themes/tutema/admin_mods/m.admin_configs.tpl Arriba de: <p><input type="submit" name="save" value="Guardar Cambios" class="btn_g"/></p> Agregar: <hr /> <dl> <dt><label for="c_max_upload">Tama&ntilde;o m&aacute;ximo de archivos:</label><br /><span>Peso m&aacute;ximo de archivos en MB. <strong>Nota:</strong> Si deja el campo en 0 no habr&aacute; l&iacute;mite de subida.</span></dt> <dd><input type="text" id="c_max_upload" name="max_upload" style="width:10%" maxlength="3" value="{$tsConfig.c_max_upload}" />Mb</dd> </dl> <dl> <dt><label for="c_files_type">Permisos de archivos:</label><br /><span>Si va a permitir o excluir extensiones de archivos, separelos por comas y sin espacios. Ej: <strong>sql,php,bd</strong></span></dt> <dd> <select id="c_files_type" name="files_type" style="width: 266px;" class="select"> <option value="0" {if $tsConfig.c_files_type == 0}selected{/if} >Permitir subir cualquier tipo de archivos</option> <option value="1" {if $tsConfig.c_files_type == 1}selected{/if} >Permitir archivos con extensi&oacute;n</option> <option value="2" {if $tsConfig.c_files_type == 2}selected{/if} >Excluir archivos con extensi&oacute;n</option> <option value="3" {if $tsConfig.c_files_type == 3}selected{/if} >No permitir la subida de archivos</option> </select> <br /> <input type="text" id="c_files_ext" name="files_ext" value="{$tsConfig.c_files_ext}" /> </dd> </dl> Por último subir los archivos a sus respectivas carpetas y el archivo .sql subirlo a su base de datos de la siguiente descarga: [MOD] Archivos V2 [Kmario19] 65Kb Si tienes el mod de archivos V1.2 entonces solo sube los archivos a sus respectivas carpetas reemplazando los anteriores y genera esta nueva consulta: ALTER TABLE `a_files` CHANGE `f_tipo` `f_tipo` VARCHAR( 150 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL ; ALTER TABLE `w_configuracion` ADD `c_max_upload` INT NOT NULL , ADD `c_files_type` INT( 1 ) NOT NULL , ADD `c_files_ext` VARCHAR( 150 ) NOT NULL ; CAPTURAS No tengo demo para que prueben pero quienes tengan instalado la 1.2 y actualicen puedan por favor facilitarme su web y esté de acuerdo para dejarla como demo del mod. Nota importante 2: La restricción que le coloqué desde la administración de exclusión de extensiones de archivos no es 100% efectiva puesto que si por ejemplo excluyes archivos .php (o cualquier otro), con solo cambiarle la extensión a tus archivos podrás subirlos igualmente. De igual manera es una restricción de seguridad mínima para usuarios sin este tipo de conocimientos, no todos le sacan la extensión de un archivo solo para poder subirlos a sus webs pero no está de mas el que se cree "hacker" e intente subir archivos que tal vez uds no permitan como los .php o .sql por miedo a ataques o inyecciones sqls en sus webs. Estaré al tanto de todos sus comentarios, si tienen alguna duda intenten pasándose por los comentarios del topic de la V1.2 por si alguien ya pregunto lo mismo; si no dejen aquí su comentario e intentaremos solucionar. Cualquier fix reportenlo para actualizar el mod y será notificado a todos. Que disfruten del mod [mas adelante puede mejorar] y les sea de mucha utilidad, nos vemos en otro aporte, hasta luego.
  24. Hola amigo como prometí aquí les dejo el Mod Social Locket esto consiste en que las Link que estén el los post se Bloquean y para poder desbloquear hay que darle a unos de los botones de las redes sociales, Bueno vamos con el Mod. Prime una explicación: Bueno estos son los Botones disponibles el cual si quieren sacar alguno solo lo borran Primero la cap Segundo el código buttons: { order: [ "facebook-like", "facebook-share", "google-plus", "google-share", "twitter-follow", "twitter-tweet", "linkedin-share" ] }, Para quitar un botón borrar por ejemplo esto "facebook-like", - Bueno los botones en el código están en el mismo orden que la imagen Luego esto es lo que se va a publicar cuando le den a un botón facebook: { // facebook app id (get the one here: https://developers.facebook.com/apps // it's obligatory option, dont forget to set it appId: "ID APP FACEBOOK", like: { title: 'like me', url: "http://codecanyon.net/item/social-locker-for-jquery/3408941?ref=onepress&" + Math.random() }, share: { title: 'share it', url: "http://codecanyon.net/item/social-locker-for-jquery/3408941?ref=onepress&" + Math.random() } }, twitter: { tweet: { title: "tweet me", text: 'Tweet this message', url: "http://codecanyon.net/item/social-locker-for-jquery/3408941?ref=onepress&" + Math.random() }, follow: { title: "follow @onepress", url: "http://twitter.com/onepressmedia" } }, google: { plus: { title: 'plus 1', url: "http://codecanyon.net/item/social-locker-for-jquery/3408941?ref=onepress&" + Math.random() }, share: { title: 'or share', url: "http://codecanyon.net/item/social-locker-for-jquery/3408941?ref=onepress&" + Math.random() } } Bueno Siguiendo el mismo ejemplo de arriba si borramos esto "facebook-like", también tendremos que borran parte del código de abajo por ejemplo like: { title: 'like me', url: "http://codecanyon.net/item/social-locker-for-jquery/3408941?ref=onepress&" + Math.random() }, Otro ejemplo si borramos esto "google-plus", Tambien borran esto plus: { title: 'plus 1', url: "http://codecanyon.net/item/social-locker-for-jquery/3408941?ref=onepress&" + Math.random() }, Bueno después de aclaran algunos puntos para modificar y dejar los botones que uno quiera pasamos a la instalación Primero vamos a main_header.tpl el del theme que estas usando Buscas esto </head> Arriba pegamos esto <script> {literal} jQuery(document).ready(function ($) { $(".to-lock").sociallocker({ theme: "secrets", text: { header: "Link Bloqueados!", message: "Comparte este contenido para que otros disfruten - MundoComparte!" }, buttons: { order: [ "facebook-like", "facebook-share", "google-plus", "google-share", "twitter-follow", "twitter-tweet", "linkedin-share" ] }, facebook: { // INGRESA A ESTA URL https://developers.facebook.com/apps // CREA UNA APP Y PEGA EL ID DE LA APP ABAJO DONDE DICE ID APP FACEBOOK appId: "ID APP FACEBOOK", //REEMPLAZA TODOS LOS (URL DE TU WEB) like: { title: 'like me', url: "URL DE TU WEB" + Math.random() }, share: { title: 'share it', url: "URL DE TU WEB" + Math.random() } }, twitter: { tweet: { title: "tweet me", text: 'Tweet this message', url: "URL DE TU WEB" + Math.random() }, follow: { title: "follow @onepress", url: "PERFIL DE TWITTER" } }, google: { plus: { title: 'plus 1', url: "URL DE tU WEB" + Math.random() }, share: { title: 'or share', url: "URL DE TU WEB" + Math.random() } } }); }); {/literal} </script> Luego buscamos esto en el mismo archivo <link href="{$tsConfig.tema.t_url}/extras.css" rel="stylesheet" type="text/css" /> Debajo pegamos <link type="text/css" rel="stylesheet" href="{$tsConfig.tema.t_url}/css/jquery.op.sociallocker.min.css" /> Luego buscamos esto <script src="{$tsConfig.js}/funciones.js" type="text/javascript"></script> debajo pegamos esto <script src="{$tsConfig.js}/jquery.op.sociallocker.min.js"></script> Luego nos vamos a la carpeta inc/ext y abrimos el archivo bbcode.inc.php y buscamos esto 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 reemplazamos por esto array("url", "/(?i)(\[url\])(http|https|ftp|irc|ed2k|gopher|telnet)(\:\/\/)([^\<\>[:space:]]+?)(\[\/url\])/i", "<div class='to-lock'><a href=\"\\2\\3\\4\" target=\"_blank\">\\2\\3\\4</a></div>"), array("url", "/(?i)\[url\=(http|https|ftp|irc|ed2k|gopher|telnet|gopher|telnet)(\:\/\/)([^\<\>[:space:]]+?)\](.+?)(\[\/url\])/i", "<div class='to-lock'><a href=\"\\1\\2\\3\" target=\"_blank\">\\4</a></div>"), Bueno ahora subimos los archivos jquery.op.sociallocker.min.js a la carpeta js de tu theme jquery.op.sociallocker.min.css a la carpeta css de tu theme la carpeta de imágenes llamada img la subimos a la raiz del theme donde esta la carpeta css (recuerda sube todas las imágenes con carpeta y todo) Link por Mega: https://mega.co.nz/#!sE8GSRia!K8zvUXewHripepCXDdO6NEeR9XEttdUT4MmQ02cKUlk Extra les dejo los themes disponibles del Mod el cual son 4 para usar los themes se hace de la siguiente manera Bueno vamos hacer cuenta que el mod esta instalado y funcionando buscamos esto en main_header.tpl theme: "secrets", y lo que esta dentro de las comillas en este caso la palabra secrets la reemplazamos por es una de estas 4 las dejare en orden según la imagen de abajo 1.- Bueno para usar el theme starter solo deben borran esto theme: "secrets", 2.-secrets 3.-dandyish 4.-glass Demo : http://www.mundocomparte.com/posts/arte/2/Prueba-Link-Con-Mod-de-TheMoronixz-Vellenger.html Bueno esto seria todo
  25. Primero deberan tener instalado este mod obviamente. Vamos a la instalacion En wysibb.js buscar: downloads: "Descargas", Agregar debajo: agregar_enlaces_jd: "Agregar enlaces para Jdownloader", ingresar_jd: "Inserta los enlaces separados por coma (,)", buscar: / /END img upload config buttons: agregar jd, donde se quiera el boton. Más abajo buscar: link : { title: CURLANG.link, buttonHTML: '<span class="fonticon ve-tlb-link1">\uE007</span>', modal: { title: CURLANG.modal_link_title, width: "500px", tabs: [ { input: [ {param: "SELTEXT",title:CURLANG.modal_link_text, type: "div"}, {param: "URL",title:CURLANG.modal_link_url,validation: '^http(s)?://'} ] } ] }, transform : { '<a href="{URL}">{SELTEXT}</a>':"[url={URL}]{SELTEXT}[/url]", '<a href="{URL}">{URL}</a>':"[url]{URL}[/url]" } }, Debajo añadir: jd : { title: CURLANG.agregar_enlaces_jd, buttonHTML: '<span class="newicon i-jdownloader"></span>', modal: { title: CURLANG.agregar_enlaces_jd, width: "500px", tabs: [ { input: [ {param: "SELTEXT",title:CURLANG.ingresar_jd, type: "div"} ] } ] }, transform : { '<div class="bbcmsg jd">{SELTEXT}</div>':"[jd]{SELTEXT}[/jd]" } }, añadir en wysbb.css : .bbcmsg.jd { background-repeat: no-repeat; background-position: 11px center; padding:10px 0 10px 35px; border: 1px solid; border-radius:3px; background-color: #F8F8F8; background-image: url('../images/jd.png'); border-color: #DEDEDE; color: #666666; } Buscar: .i-fullscreen { background-position: center -108px; } Debajo: .i-jdownloader { background-position: center -126px; } Subir la imagen spring a la carpeta imges/wsibb. Y listo! caps: DEMO: www.groted.com Salu2
×