Posteador
aperpen
Vip



[MOD] Sitemaps administrables v1




Hola amigos, pues les traigo, mi MOD para el concurso de PHPost, después de bastantes horas de programación, aqui se lo traigo.

¿Que tiene?
- Administración completa
- Inserción en robots.txt, para google detecte tu sitemap
- Configuraciones:
- Opción de inserción automática de los posts que se crean
- Opción de inserción automática de las fotos que se crean
- Opción de actualizar la última modificación de una URL al editar un post
- Opción de actualizar la última modificación de una URL al editar una imagen
- Ver URLs incluídas en el sitemap
- Agregar URLs
- Editar URLs
- Borrar URLs
- Los cambios que realices de URLs no se verán reflejados en el sitemap no se verán reflejados hasta que tu lo desees.
- Sitemap completo (Url, frecuencia, ultima modificación, prioridad)
- URLs principales de tu web, incluídas por defecto.
- Restaurar URLs que vienen por defecto en cualquier momento.


Espero que les guste, y empezamos con la instalación.

1) Primero hacen estas SQL en su BD:
CREATE TABLE IF NOT EXISTS `w_sitemap` (
`id` int(3) NOT NULL AUTO_INCREMENT,
`url` varchar(80) NOT NULL,
`frecuencia` varchar(15) NOT NULL,
`fecha` int(16) NOT NULL,
`prioridad` int(5) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
ALTER TABLE `w_configuracion` ADD `sm_posts` INT( 1 ) NULL DEFAULT '1',
ADD `sm_fotos` INT( 1 ) NOT NULL DEFAULT '1',
ADD `sm_update_p` INT( 1 ) NOT NULL DEFAULT '1',
ADD `sm_update_f` INT( 1 ) NOT NULL DEFAULT '1';

2) Abren el c.admin.php de inc/class y buscan:
       $num = mysql_fetch_assoc(mysql_query('SELECT 
(SELECT count(foto_id) FROM f_fotos WHERE f_status = \'2\') as fotos_eliminadas,
(SELECT count(foto_id) FROM f_fotos WHERE f_status = \'1\') as fotos_ocultas,
(SELECT count(foto_id) FROM f_fotos WHERE f_status = \'0\') as fotos_visibles,
(SELECT count(post_id) FROM p_posts WHERE post_status = \'0\') as posts_visibles,
(SELECT count(post_id) FROM p_posts WHERE post_status = \'1\') as posts_ocultos,
(SELECT count(post_id) FROM p_posts WHERE post_status = \'2\') as posts_eliminados,
(SELECT count(post_id) FROM p_posts WHERE post_status = \'3\') as posts_revision,
(SELECT count(cid) FROM p_comentarios WHERE c_status = \'0\') as comentarios_posts_visibles,
(SELECT count(cid) FROM p_comentarios WHERE c_status = \'1\') as comentarios_posts_ocultos,
(SELECT count(user_id) FROM u_miembros WHERE user_activo = \'1\') as usuarios_activos,
(SELECT count(user_id) FROM u_miembros WHERE user_activo = \'0\' ) as usuarios_inactivos,
(SELECT count(user_id) FROM u_miembros WHERE user_baneado = \'1\' ) as usuarios_baneados,
(SELECT count(cid) FROM f_comentarios) as comentarios_fotos_total,
(SELECT count(follow_id) FROM u_follows WHERE f_type = \'1\' ) AS usuarios_follows,
(SELECT count(follow_id) FROM u_follows WHERE f_type = \'2\' ) AS posts_follows,
(SELECT count(follow_id) FROM u_follows WHERE f_type = \'3\' ) AS posts_compartidos,
(SELECT count(fav_id) FROM p_favoritos) AS posts_favoritos,
(SELECT count(mr_id) FROM u_respuestas) AS usuarios_respuestas,
(SELECT count(mp_id) FROM u_mensajes) AS mensajes_total,
(SELECT count(mp_id) FROM u_mensajes WHERE mp_del_to = \'1\') AS mensajes_de_eliminados,
(SELECT count(mp_id) FROM u_mensajes WHERE mp_del_from = \'1\') AS mensajes_para_eliminados,
(SELECT count(bid) FROM p_borradores) AS posts_borradores,
(SELECT count(bid) FROM u_bloqueos) AS usuarios_bloqueados,
(SELECT count(bid) FROM u_bloqueos) AS usuarios_bloqueados,
(SELECT count(medal_id) FROM w_medallas WHERE m_type = \'1\') AS medallas_usuarios,
(SELECT count(medal_id) FROM w_medallas WHERE m_type = \'2\') AS medallas_posts,
(SELECT count(medal_id) FROM w_medallas WHERE m_type = \'3\') AS medallas_fotos,
(SELECT count(id) FROM w_medallas_assign) AS medallas_asignadas,
(SELECT count(aid) FROM w_afiliados WHERE a_active = \'1\') AS afiliados_activos,
(SELECT count(aid) FROM w_afiliados WHERE a_active = \'0\') AS afiliados_inactivos,
(SELECT count(pub_id) FROM u_muro) AS muro_estados,
(SELECT count(cid) FROM u_muro_comentarios) AS muro_comentarios
'));

$num['usuarios_total'] = $num['usuarios_activos'] + $num['usuarios_inactivos'] +
$num['usuarios_baneados'];
$num['seguidos_total'] = $num['posts_follows'] + $num['usuarios_follows'];
$num['muro_total'] = $num['muro_estados'] + $num['muro_comentarios'];
$num['afiliados_total'] = $num['afiliados_activos'] + $num['afiliados_inactivos'];
$num['posts_total'] = $num['posts_visibles'] + $num['posts_ocultos'] + $num['posts_eliminados'];
$num['comentarios_posts_total'] = $num['comentarios_posts_visibles'] + $num['comentarios_posts_ocultos'];
$num['medallas_total'] = $num['medallas_usuarios'] + $num['medallas_posts'] + $num['medallas_fotos'];
$num['fotos_total'] = $num['fotos_visibles'] + $num['fotos_ocultas'] + $num['fotos_eliminadas'];

return $num;
}

Y justo debajo añaden:
	/*
Sitemap y SEO administrables
*/
//GET URLs SITEMAP
function smUrls(){
global $tsSiteMap;
return $tsSiteMap->getSitemap();
}

//Generar sitemap
function generateSitemap(){
global $tsSiteMap;
return $tsSiteMap->generateSiteMap();
}

//Generar sitemap
function addUrl(){
global $tsSiteMap, $tsCore;
return $tsSiteMap->addURL(filter_var($_POST['url'], FILTER_VALIDATE_URL), $tsCore->setSecure($_POST['prioridad']), $tsCore->setSecure($_POST['frecuencia']));
}

//Obtener URls de la BD
function smUrlsBD(){
global $tsSiteMap;
return $tsSiteMap->getURLsBD();
}

//Restaurar SiteMap
function restaurarSitemap(){
global $tsSiteMap;
return $tsSiteMap->CreateSiteMap();
}

//Borrar URL
function deleteUrl(){
global $tsSiteMap;
return $tsSiteMap->removeUrlBD((int)$_GET['id']);
}

//Borrar URL
function getUrl(){
global $tsSiteMap;
return $tsSiteMap->getUrl((int)$_GET['id']);
}

function editUrl(){
global $tsSiteMap, $tsCore;
return $tsSiteMap->editUrl((int)$_GET['id'], filter_var($tsCore->setSecure($_POST['url']), FILTER_VALIDATE_URL), $tsCore->setSecure($_POST['frecuencia']), $tsCore->setSecure($_POST['prioridad']));
}

//Guardar Configuración
function save_conf(){
global $tsCore;
//
$c = array(
'sm_posts' => empty($_POST['sm_posts']) ? 0 : 1,
'sm_fotos' => empty($_POST['sm_fotos']) ? 0 : 1,
'sm_update_p' => empty($_POST['sm_update_p']) ? 0 : 1,
'sm_update_f' => empty($_POST['sm_update_f']) ? 0 : 1,
);
// UPDATE
if (mysql_query('UPDATE `w_configuracion` SET `sm_posts` = \'' . $c['sm_posts'] . '\', `sm_fotos` = \'' .
$c['sm_fotos'] . '\', `sm_update_p` = \'' . $c['sm_update_p'] . '\', sm_update_f = \''.$c['sm_update_f'].'\' WHERE `tscript_id` = \'1\''))
return true;
else
die(mysql_error());

}

3) Abren el admin.php de inc/php y buscan:
// CONECTADOS A LA COMUNIDAD
} elseif($action == 'sesiones'){
if(!$act) {
$smarty->assign("tsAdminSessions",$tsAdmin->GetSessions());
}


Abajo añaden:
//SITEMAP BY APERPEN
} elseif($action == 'sitemap'){
if(empty($act)){
$smarty->assign("tsURLs",$tsAdmin->smUrlsBD());
}elseif($act == 'restaurar'){
$smarty->assign("tsRest",$tsAdmin->restaurarSitemap());
} elseif($act == 'generar'){
$smarty->assign("tsGen",$tsAdmin->generateSitemap());
}elseif($act == 'actual'){
$smarty->assign("tsURLa",$tsAdmin->smUrls());
}elseif($act == 'borrar'){
$smarty->assign("tsDel",$tsAdmin->deleteURL());
}elseif($act == 'editar'){
if(!empty($_POST['url'])){
if($tsAdmin->editUrl()) $tsCore->redirectTo($tsCore->settings['url'].'/admin/sitemap?save=true');
}
else $smarty->assign("tsURL",$tsAdmin->getUrl((int)$_GET['id']));
}elseif($act == 'nueva'){
if(!empty($_POST['url'])){
if($tsAdmin->addUrl()) $tsCore->redirectTo($tsCore->settings['url'].'/admin/sitemap?save=true');
}
}elseif($act == 'config'){
if(isset($_POST['sm_posts'])) {
if($tsAdmin->save_conf()) $tsCore->redirectTo($tsCore->settings['url'].'/admin/sitemap?save=true');
}
}

4) Abren el header.php que está en la raíz de su web y buscan:
 // Crean requests
include TS_EXTRA.'QueryString.php';

Abajo agregan:
 // Clase Sitemap by Aperpen
include TS_CLASS.'c.sitemap.php';

En ese archivo buscan:
    // Smarty
$smarty =& tsSmarty::getInstance();

Abajo agregan:
 // Sitemap by aperpen
$tsSiteMap =& tsSiteMap::getInstance();

5) Abren el admin.css de themes/TUTEMA/css y buscan:
[css].admin_table {border:1px solid #ddd; border-width:1px 0 0 1px;}[/css]
Y lo remplazan por:
[css].admin_table {
border: 1px solid #ddd;
border-width: 1px 0 0 1px;
font-size: 11px;
}[/css]
6) Abren el t.admin.tpl de themes/TUTEMA/templates y buscan:
  {elseif $tsAction == 'rangos'}
{include file='admin_mods/m.admin_rangos.tpl'}
Y justo abajo agregan:
{elseif $tsAction == 'sitemap'}
{if $tsAct == ''}
{include file='admin_mods/m.admin_sitemap.tpl'}
{elseif $tsAct == 'restaurar' || $tsAct == 'generar' || $tsAct == 'borrar' || $tsAct == 'editar' || $tsAct == 'nueva'}
{include file='admin_mods/m.admin_restaurar.tpl'}
{elseif $tsAct == 'actual'}
{include file='admin_mods/m.admin_siteactual.tpl'}
{elseif $tsAct == 'config'}
{include file='admin_mods/m.admin_sitemapconf.tpl'}
{/if}

7) Abren el c.posts.php de inc/class y buscan:
     $tsActividad->setActividad(1, $postID);
// SUBIR DE RANGO?
$this->subirRango($tsUser->uid);

Y abajo agregan:
if($tsCore->settings['sm_posts']){
$psql = mysql_query('SELECT c_nombre FROM p_categorias WHERE cid = \''.(int)$postData['category'].'\'');
$q = mysql_fetch_assoc($psql);
$pCat = $q['c_nombre'];
global $tsSiteMap;
$tsSiteMap->addUrlsm($tsCore->settings['url'].'/posts/'.$pCat.'/'.$postID.'/'.$tsCore->setSEO($postData['title']).'.html');
}

En ese archivo buscan:
		// ACTUALIZAMOS
if($tsUser->uid == $data['post_user'] || !empty($tsUser->is_admod) || !empty($tsUser->permisos['moedpo'])){
if(mysql_query('UPDATE p_posts SET post_title = \''.$postData['title'].'\', post_body = \''.$postData['body'].'\', post_tags = \''.$tsCore->setSecure($postData['tags']).'\', post_category = \''.(int)$postData['category'].'\', post_private = \''.$postData['private'].'\', post_block_comments = \''.$postData['block_comments'].'\', post_sponsored = \''.$postData['sponsored'].'\', post_smileys = \''.$postData['smileys'].'\', post_visitantes = \''.$postData['visitantes'].'\', post_sticky = \''.$postData['sticky'].'\' WHERE post_id = \''.(int)$post_id.'\'') or die(mysql_error())) {
Y abajo agregamos:
//SITEMAPS BY APERPEN
if($tsCore->settings['sm_update_p']){
$psql = mysql_query('SELECT c_nombre FROM p_categorias WHERE cid = \''.(int)$postData['category'].'\'');
$q = mysql_fetch_assoc($psql);
$pCat = $q['c_nombre'];
global $tsSiteMap;
$tsSiteMap->updateLM($tsCore->settings['url'].'/posts/'.$pCat.'/'.(int)$post_id.'/'.$tsCore->setSEO($postData['title']).'.html');
}

8) Abren el c.fotos.php de inc/class y buscan:
  // Estadísticas
mysql_query('UPDATE `w_stats` SET `stats_fotos` = stats_fotos + \'1\' WHERE `stats_no` = \'1\'');
mysql_query('UPDATE `u_miembros` SET `user_fotos` = user_fotos + \'1\' WHERE `user_id` = \''.$tsUser->uid.'\'');
// AGREGAR AL MONITOR DE LOS USUARIOS QUE ME SIGUEN
$tsMonitor->setFollowNotificacion(10, 1, $tsUser->uid, $fid);
// ACTIVIDAD
$tsActividad->setActividad(9, $fid);
//

Abajo añaden:
if($tsCore->settings['sm_fotos']){
global $tsSiteMap;
$tsSiteMap->addUrlsm($tsCore->settings['url'].'/fotos/'.$tsUser->nick.'/'.$fid.'/'.$tsCore->setSEO($fData['titulo']).'.html', 0);
}

Por último en este archivo, buscan:
		if($data['f_user'] != $tsUser->uid){
$aviso = 'Hola <b>'.$tsUser->getUserName($data['f_user'])."</b>

Te informo que tu foto <a href=".$tsCore->settings['url'].'/fotos/'.$data['user_name'].'/'.$data['foto_id'].'/'.$tsCore->setSEO($data['f_title']).'.html'."><b>".$data['f_title']."</b></a> ha sido editada por <a href=\"#\" class=\"hovercard\" uid=\"".$tsUser->uid."\">".$tsUser->nick."</a>

Causa: <b>".$fData['razon']."</b>



Te recomendamos leer el <a href=\"".$tsCore->settings['url']."/pages/protocolo/\">protocolo</a> para evitar futuras sanciones.

Muchas gracias por entender!";
$tsMonitor->setAviso($data['f_user'], 'Foto editada', $aviso, 2);
$_SERVER['REMOTE_ADDR'] = $_SERVER['X_FORWARDED_FOR'] ? $_SERVER['X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];
if(!filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP)) { die('Su ip no se pudo validar.'); }
mysql_query('INSERT INTO `w_historial` (`pofid`, `action`, `type`, `mod`, `reason`, `date`, `mod_ip`) VALUES (\''.(int)$data['foto_id'].'\', \'1\', \'2\', \''.$tsUser->uid.'\', \''.$fData['razon'].'\', \''.time().'\', \''.$tsCore->setSecure($_SERVER['REMOTE_ADDR']).'\')');
}

Abajo añaden:
if($tsCore->settings['sm_update_f']){
global $tsSiteMap;
$tsSiteMap->updateLM($tsCore->settings['url'].'/fotos/'.$data['user_name'].'/'.$fid.'/'.$tsCore->setSEO($fData['titulo']).'.html');
}

9) Abren el m.admin_sidemenu.tpl de themes/TUTEMA/templates/admin_mods y buscan:
 <h4>Control de Usuarios</h4>
<ul class="cat-list">
<li id="a_users"><span class="cat-title"><a href="{$tsConfig.url}/admin/users">Todos los Usuarios</a></span></li>
<li id="a_sesiones"><span class="cat-title"><a href="{$tsConfig.url}/admin/sesiones">Sesiones</a></span></li>
<li id="a_nicks"><span class="cat-title"><a href="{$tsConfig.url}/admin/nicks">Cambios de Nicks</a></span></li>
<li id="a_rangos"><span class="cat-title"><a href="{$tsConfig.url}/admin/rangos">Rangos de Usuarios</a></span></li>
</ul>



Abajo añaden:
 <h4>SEO</h4>
<ul class="cat-list">
<li id="a_cats"><span class="cat-title"><a href="{$tsConfig.url}/admin/sitemap">Sitemap</a></span></li>
</ul>

10) Suben este zip como se indica: http://www.mediafire.com/download/05sn1e6k5ce1o1o/sitemapbyaperpen.zip
c.sitemap.php -> inc/class
m.admin_sitemap.tpl -> themes/default/templates/admin_mods
m.admin_restaurar.tpl -> themes/default/templates/admin_mods
m.admin_siteactual.tpl -> themes/default/templates/admin_mods
m.admin_sitemapconf.tpl -> themes/default/templates/admin_mods


11) Para acabar, crean un archivo en la raíz de su web que se llame install.php con este code:
<?php
include('header.php');
echo $tsSiteMap->CreateSiteMap();
?>


Luego entran a: http://suweb.com/install.php/?i=1
Y si obtienen esto:
Sitemap restaurado correctamente

Enhorabuena, ya tienes el MOD instalado
P.D: Luego borra el install.php para que nadie les borre su sitemap


Les dejo caps:







Espero que les guste

Saludos
Quote
[note]P.D: Se aceptan sugerencias para mejorar el MOD
[/note]
P.D.2: Lo he testeado en mi web de pruebas y funciona bien, pero si tienen algún problema diganmelo y les ayudo





13 Comentarios


Cargando comentarios espera un momento...
No tienes permisos para comentar.

Para poder comentar necesitas estar Registrado. O.. ya tienes usuario? Logueate!
Ir al cielo