Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: dinasty0 en 10 de Abril 2013, 14:12
-
Buenas tardes,
Mi duda es la siguiente... tengo un joomla 2.5 instalado en mi servidor... y actualemnte tengo el modulo zoo y me funciona bien...
me muestra 5 articulos de los que son los mas vistos... lo que pasa que yo realmente lo que quiero es que me los ordene por los mas votados...
y no me deja seleccionar por ese criterio... por lo que si alguien sabe como hacer algo de eso... o un modulo que peuda añadir y me permita eso...
ojala que alguien me pueda ayudar ya que me urge muchisimo.
muchas gracias de antemano
-
Hola, joomla no incorpora en la instalación un módulo de los más votados, pero sí un módulo de "los más populares". Si tienes conocimientos de programación medios-avanzados puedes crear un módulo a partir de este para que en vez de los más populares muestre los más votados.
Si no, tienes como alternativa usar alguna extensión existente: yo no la he probado pero parece que esta extensión serviría para hacer lo que pretendes:
http://extensions.joomla.org/extensions/news-display/popular-content/22071
Saludos!
-
Para instalarlo habria que meterlo en la carpeta de modulos no?¿ por que ya lo he metido y no aparece... además de eso tiene alguna otra instalacion?¿
gracias
-
Para instalar una extensión hay que hacerlo a través del backEnd de Joomla.
Mírate aquí el apartado "Instalar o desinstalar una extensión en Joomla": https://www.aprenderaprogramar.com/index.php?option=com_content&view=article&id=151:configuracion-del-sitio-joomla-instalar-o-desinstalar-extensiones-zona-horaria-cu00407a&catid=38:curso-qcreacion-web-con-joomla-nivel-iq&Itemid=152
En tu caso en vez del archivo es-ES_joomla_lang_full_179v1.zip tendrás otro archivo .zip que es el archivo comprimido para la instalación.
Una vez tengas hecha la instalación cuando pulses para crear un nuevo módulo, ya te aparecerá el nuevo tipo de módulo.
-
Muchas gracias por la ayuda prestada.. ya lo tengo istalado... y me aparece en el admin... el problema es que como hago para cofigurarlo... ya que una vez dentro del modulo... no me deja seleccionar la categoria que quiero mostrar ahi... :'(
Gracias
-
Por la imagen que has puesto parece que el módulo no deja elegir la categoría, sino que te muestra los artículos más votados de entre todos los artículos, no por categorías completas. Si tienes conocimientos de programación puedes modificar el módulo, no creo que te lleve más de una hora, para que te permita elegir categoría.
La otra alternativa que se me ocurre es usar la extensión k2, http://extensions.joomla.org/extensions/authoring-a-content/content-construction/8061?qh=YTozOntpOjA7czoyOiJrMiI7aToxO3M6MzoiJ2syIjtpOjI7czo0OiJrMidzIjt9
Esta extensión sirve para tener un sistema de artículos distinto al propio de joomla y trae módulos que permiten visualizar listas de artículos, creo que dentro de los módulos hay opciones para configurar en base a qué criterio se quieren mostrar los artículos y habría que ver si se puede elegir por el más votado y por categoría (en este caso serían categorías de k2, como te digo k2 es un sistema distinto al propio de artículos joomla). k2 te permite mostrar videos y otras funcionalidades, mucha gente lo usa aunque yo le veo el inconveniente de que es una extensión relativamente pesada y que requiere tiempo aprender a usarla.
-
Me centraré en el modulo a ver si tocandolo logro que aparezca eso...
Una pregunta... si no me sale lo de las categorias... es por que el modulo es así... o por uqe esta mal?¿...
gracias
-
El módulo no creo que esté mal, simplemente es que hay módulos o componentes que permiten muchas posibilidades y traen muchas opciones de configuración y otros no.
Ahora mismo está haciendo un select en sql seleccionando por votos de todos los artículos. El cambio que habría que hacer es que haga un select seleccionando por votos y categoría (la que tú elijas). Lo primero que habría es que añadir el que te muestre y permita seleccionar la categoría, y luego modificar el código de la consulta.
Quizás con k2 se pueda, pero te obliga a usar k2 y tampoco estoy 100% seguro.
-
El problema que me ocurre ahora mismo es que en la web donde quiero que me muestre los articulos... no me aparece nada... nose que habra mal ... pero esta vacio... :S por eso decia si podría estar mal... he mirado en la web del autor... y tiene dos con el mismo nombre... http://tuts4you.de/development
Uno que pone modulo y el otro sin lo de modulo los he instalado los 2... por si hubiera un problema... y el que no pone modulo es simplemente para modificar las css... pero no he encontrado ningun otro cambio...
Con respecto a la llamada... esta puede ser la sql?¿
function GetRatedArticlesList(&$params)
{
require_once JPATH_SITE.DS.'components'.DS.'com_content'.DS.'helpers'.DS.'route.php';
$db =& JFactory::getDBO();
$query = "SELECT cc.title AS category, a.id, a.title, DATE_FORMAT(a.created,'%d.%m.%Y') as created,
u.username, a.hits, cc.id as catid, format((r.rating_sum / r.rating_count), 2) as averagerating
FROM #__content AS a
LEFT JOIN #__categories AS cc ON a.catid = cc.id
LEFT JOIN #__users AS u ON u.id = a.created_by
LEFT JOIN #__content_rating as r ON a.id = r.content_id
WHERE r.rating_count is not null";
lo que no se muy bien es si en los left join deben estar #__ o debería de quitarselo... he pobrado a quitarlo y sigue sin funcionar...
Tb me valdría poner directamente la categoria en la llamada, me da igual si en el admin no aparece... ya que eso solo se va a modificar solamente una vez...
Gracias
-
He probado a instalarlo y me ocurría lo mismo, no mostraba nada... Pero revisando me di cuenta de que cuando se crea el módulo aparece con "asignación de módulo ninguna página", al cambiarlo a "en todas las páginas" ya empezó a mostrarse (también hay que comprobar que tenga una posición de plantilla válida y que esté publicado)
¿Qué versión de joomla estás usando?
-
Yo lo tengo puesto para que aparezca en la home solo...mi versión es 2.5 y con lo de que a tu te salen los artículos? Por q yo sólo sale la columna con el titulo y poch más...y he probado el orden entre 1 o más y nada...a que puede ser debido?...
Muchas gracias por la ayuda que me estas prestando...es que necesito q esto funcione cómo sea ya q es lo único que queda para tener lista la web y todo depende de q funcione eso...
-
Para que te aparezcan artículos debes tener activadas las votaciones en los artículos y haber realizado distintas votaciones (para que se puedan ordenar los artículos por votaciones) ¿Tienes activadas las votaciones y has realizado votos?
-
Si está activado puesto q salen los votos...la opción de votar y me permite votar...
-
¿Dices que no te muestra los artículos? A mí sí me los muestra
¿Te sale el título del módulo pero está vacío? ¿Tienes la url para verlo?
-
si me aparece asi... sin nada...
esta es la url... http://bruno.mesonelcoto.com/ el modulo es fotikos...
Un saludo
-
Se me ocurren dos cosas:
lo que no se muy bien es si en los left join deben estar #__ o debería de quitarselo... he pobrado a quitarlo y sigue sin funcionar...
a) Pueda haberse dañado el código si has manipulado. Descomprime los archivos del módulo en local y vuelve a subirlos por ftp (o desinstala y vuelve a instalar) para ver si se dañó algo.
b) ¿Con qué estás gestionando las votaciones? ¿Son artículos joomla o estás usando alguna extensión como sobi pro o alguna otra extensión? Lo digo porque viendo cómo se muestra en pantalla y viendo la url http:// bruno.mesonelcoto.com/index.php?option=com_zoo &task=item&item_id=1274&Itemid=114
esto no parece que sean artículos joomla, ¿las votaciones están dentro de una extensión? (por la url parece que fuera la extensión zoo) Si es así sería normal que el módulo no te funcione, el módulo no conoce la extensión que tú estás usando, sino el core joomla y las votaciones son las de artículos joomla. Para que te capturara votaciones de una extensión habría que modificar código.
-
Si como bien dices... tengo el modulo de zoo...
Entonces para que yo lo comprenda bien... las modificaciones que habría que hacer del código... que e slo que tendría que modificar exactamente si es que me lo puees decir... :D
Muchas gracias....
P.D.: El codigo no lo he modificado.. por lo que está tal cual...
-
Para modificar el código primero tendrías que acceder a la base de datos, buscar las tablas de zoo y ver dónde (en qué tabla y columna) se almacena la puntuación de votaciones (y cómo se relaciona con las categorías, segurament a través de un id).
Por otro lado, habría que mirar en qué tabla y columna se almacenan las puntuaciones de los artículos joomla.
Una vez visto esto, habría que cambiar la consulta para que en vez de mirar las puntuaciones de artículos joomla mire las puntuaciones de los items de zoo.
-
Perfecto... me voy a poner a ello a ver si lo consigo... pero supongo que en teoria no debería ser muy complejo eso...no?¿
Bueno ya tendras noticias mias como para una cosa o la otra...
y muchas gracias por la ayuda prestada... :)
-
Buenas tardes,
Aquí te comento lo que he visto en la base de datos...
En las tablas de joomla creo que son AC_content, AC_content_rating
Y en las de Zoo son las sig.: AC_zoo_application (Que aquí no creo que haya nada de nuestro interes), AC_zoo_category, AC_zoo_category_item, AC_zoo_item, AC_zoo_rating, AC_zoo_search_index, AC_zoo_tag (Esta vacia), AC_zoo_zoofilter_searches.
Aquí adjunto las img de cada tabla... como solo se permiten 4... asi que ahora escribire otro post para las otras dos...
Gracias
-
Pues bien toddas esas son las tablas de joomla y las de zoo que he encontrado... y esta es el select del codigo...
require_once JPATH_SITE.DS.'components'.DS.'com_content'.DS.'helpers'.DS.'route.php';
$db =& JFactory::getDBO();
$query = "SELECT cc.title AS category, a.id, a.title, DATE_FORMAT(a.created,'%d.%m.%Y') as created,
u.username, a.hits, cc.id as catid, format((r.rating_sum / r.rating_count), 2) as averagerating
FROM #__content AS a
LEFT JOIN #__categories AS cc ON a.catid = cc.id
LEFT JOIN #__users AS u ON u.id = a.created_by
LEFT JOIN #__content_rating as r ON a.id = r.content_id
WHERE r.rating_count is not null";
Te pongo esto por que me hago un poco de lio con los alias... y me dificulta saber relaionar las tblas que realmente puedan ser...
Un saludo
-
Tabla prefijo_conteng_rating: contiene 4 campos que son content_id (tipo entero), rating_sum (tipo entero), rating_count (tipo entero) y lastip (tipo varchar de 50 caracteres).
Tabla prefijo_content: contiene numerosos campos como id, introtext, fulltext, etc.
El campo content_id en principio relaciona con el campo id de la tabla content
En zoo en la tabla zoo_rating parece estar almacenado cada voto con su valor en el campo value y relacionado con el item de zoo para el que va el voto que es el item_id. Habría que contar el número de votos que tiene cada item_id y sumar las puntuaciones que tiene para obtener el acumulado, y luego dividir entre el número de votos que tiene para obtener la puntuación. Ahora bien, esa puntuación ya la está mostrando en el frontEnd, entonces supongo que estará almacenada en otra tabla de zoo que habría que buscar (no creo que esté realizando el cálculo a través de código cada vez que se visualiza un item de zoo en el frontEnd).
El campo item_id en principio relaciona con el campo id de la tabla AC_zoo_item
Si quieres realizar ordenaciones eligiendo categoría faltaría por ver en qué tabla de zoo relaciona cada item_id con su categoría. Si no quieres realizar ordenaciones eligiendo categoría no haría falta ver esa relación.
En el código del módulo efectivamente tienes la consulta donde extrae los datos y realiza el cálculo:
$query = "SELECT cc.title AS category, a.id, a.title, DATE_FORMAT(a.created,'%d.%m.%Y') as created,
u.username, a.hits, cc.id as catid, format((r.rating_sum / r.rating_count), 2) as averagerating
...
ORDER BY (r.rating_sum / r.rating_count) desc, rating_count desc";
si te fijas lo que hace es dividir la puntuación acumulada entre el número de votos, por ejemplo si tiene puntuación acumulada 20 y el número de votos es 5 resulta 20/5 = 4 sería su rating y muestra los resultados ordenados en base a la puntuación.
Yo lo primero que miraría sería a ver de dónde extrae la información del rating de zoo en el frontEnd, bien una tabla de la base de datos o bien código si realiza el cálculo (menos probable). Si lo tienes en una tabla, es a partir de ahí de donde puedes extraer la información.
-
1º En la tabla zoo_item en el campo "elements" en la gran mayoria de estos contiene estos datos:
{
"46a4ee50-9d88-4142-9acf-3b5169833a57": {
"votes": "1",
"value": "4.0000"
},
"1cc21c78-250d-482f-aa93-54983d2923ce": {
"value": "1"
},
"f117218a-c831-452e-a8bc-850a6ee9ec0a": {
"option": {
"0": ""
},
"select": "1"
},
"701cb971-8956-4aea-8c19-4bf201f25cdc": {
"0": {
"value": ""
}
},
"008a8be7-365e-4dfd-9a32-691227f1eced": {
"0": {
"value": "EC-JQQ"
}
},
"d4704df9-558c-4beb-9d27-203af1bfc7fa": {
"0": {
"value": "Air Europa"
}
},
"4f65435d-7454-4fdb-9b8f-bdd2816a09fb": {
"0": {
"value": "Espa\u00f1a"
}
},
"64b17c0e-e3d5-41f6-b57c-0a8bb5827b50": {
"0": {
"value": "Madrid - Barajas (MAD\/LEMD)"
}
},
"dfb68bc5-0f33-4fbc-978e-1a8e0b6c62f3": {
"0": {
"value": "<p>Entrando en pista 15R para despegue inmediato v\u00eda LimaAlfa. Impresionantes los 60.30m de envergadura de esta m\u00e1quina.<\/p>"
}
},
"d7455e43-f654-49b0-bd65-d8bb84f61e21": {
"file": "images\/03-spotting\/galeria_spotting\/watermark\/EC-JQQ-A330-203-AIR-EUROPA5.jpg",
"title": "",
"link": "images\/03-spotting\/galeria_spotting\/watermark\/EC-JQQ-A330-203-AIR-EUROPA5.jpg",
"target": "0",
"rel": "",
"lightbox_image": "",
"spotlight_effect": "",
"caption": "",
"width": 1024,
"height": 683
},
"f001e203-1af8-455a-ad2f-a3c3abce2b09": {
},
"fe50247a-0bd5-4620-8798-bb8f7fb90a27": {
"0": {
"value": ""
}
}
}
Supongo que corresponde con lo que tu me decias, que ahi es donde guarda los calculos y demás de el rating...
Tambien por si sirve de algo te enseño lo que hay dentro del sig. campo que es el de params:
{
"metadata.title": "",
"metadata.description": "",
"metadata.keywords": "",
"metadata.robots": "",
"metadata.author": "",
"config.enable_comments": "1",
"config.primary_category": "738"
}
2º La sql que tu me has puesto ahi... es por la que debería sustituir a la anterior?¿ por que creo que esta modificada no?¿
Un saludo y gracias por tu ayuda...
-
He intentado instalar la extensión zoo para mirarlo pero me salta un error. Yo creo que no sea en la tabla zoo_item sino en la tabla zoo_rating donde debas mirar. Puedes hacer una prueba:
Identifica cuál es el item de zoo nº980 (el que me pusiste en la imagen en post anterior). Haz una consulta en mysql para ver cuántas líneas aparecen en la tabla zoo_rating con ese item_id. Imagínate que te aparecen 3 líneas. A continuación, haz un voto por ese item en el frontEnd y dale por ejemplo valor 4. Luego repite la consulta en la tabla: si te aparece una nueva línea con item_id 980 y value 4 eso significa que es en esa tabla donde de forma principal se está almacenando la información de los votos.
-
He echo lo que tu me has dicho y ya confirmado... el 980 tenia 1 voto que era de 5 y la he vuelto a votar y con un 2 y el rating se ha puesto a 3.5 y en la base de datos ha cambiado... a ese resultado... por lo que los datos salen.. de AC_Zoo_rating...
Entonces ahora... cual debería ser la llamada sql para sustituir... en el modulo...
Un saluod y gracias!!!
-
perdon me he equivocado... sería AC_zoo_item...
-
Suponiendo que queremos rescatar el campo "name" de la tabla AC_zoo_item en base al campo "value" de la tabla AC_zoo_rating lo primero sería probar a hacer la consulta en phpMyAdmin para comprobar que funcione. La consulta sería algo así (habría que probar):
SELECT tab1.name AS title, tab2.value AS puntuacion
FROM AC_zoo_item AS tab1 LEFT JOIN AC_zoo_rating as tab2 ON tab1.id = tab2.item_id
ORDER BY tab2.value DESC
Lo que estaríamos intentando es: obtener la lista de name desde la tabla AC_zoo_item en base al valor value que tengan esos items en la tabla AC_zoo_rating y ordenarlos por orden descendente (es decir, de mayor a menor puntuación).
Lo primero es probar que haciendo la consulta en phpMyAdmin te devuelva la lista de nombres ordenados por puntuación y que te salga ordenado correctamente. Si sale bien en phpMyAdmin ya se podría pasar a ver cómo habría que hacerlo en código, si no sale bien hay que corregir la consulta hasta que salga bien.
-
Funciona...el único problema que hay es que hay 2 datos en el rating... que son la puntuación del 1 al 5 y despues el nº de votos... no es lo mismo 1 voto 5 estrellas, que 20 votos de 5...y creo que ahora mismo salen todos los 5 que haya direct<mente independientemente del número de votos que tengan...
-
¿Dónde ves el número de votos? ¿Lo tienes en un campo específico o simplemente sabes que hay varios votos porque hay varias líneas en la tabla AC_zoo_rating donde el item_id es el mismo, lo que significaría varios votos para un item? ¿Puedes ponerme una imagen para verlo?
-
Si hay un campo especifico donde aparecen varias cosas entre ellas el nº de votos y el rating generado... ya te lo comente en post anteriores...pero te pongo la img del 980 que es el que hemos hablado...
Este es el contenido del campo elements:
{
"46a4ee50-9d88-4142-9acf-3b5169833a57": {
"votes": "2",
"value": "3.5000"
},
"1cc21c78-250d-482f-aa93-54983d2923ce": {
"value": "1"
},
"f117218a-c831-452e-a8bc-850a6ee9ec0a": {
"option": {
"0": "boeing"
},
"select": "1"
},
"701cb971-8956-4aea-8c19-4bf201f25cdc": {
"0": {
"value": ""
}
},
"008a8be7-365e-4dfd-9a32-691227f1eced": {
"0": {
"value": "60-0350"
}
},
"d4704df9-558c-4beb-9d27-203af1bfc7fa": {
"0": {
"value": "USAF"
}
},
"4f65435d-7454-4fdb-9b8f-bdd2816a09fb": {
"0": {
"value": "Espa\u00f1a"
}
},
"64b17c0e-e3d5-41f6-b57c-0a8bb5827b50": {
"0": {
"value": "Gran Canaria - Gando (LPA\/GCLP) "
}
},
"dfb68bc5-0f33-4fbc-978e-1a8e0b6c62f3": {
"0": {
"value": ""
}
},
"d7455e43-f654-49b0-bd65-d8bb84f61e21": {
"file": "images\/03-spotting\/galeria_spotting\/watermark\/0350-2.jpg",
"title": "",
"link": "images\/03-spotting\/galeria_spotting\/watermark\/0350-2.jpg",
"target": "0",
"rel": "",
"lightbox_image": "",
"spotlight_effect": "",
"caption": "",
"width": 1024,
"height": 683
},
"f001e203-1af8-455a-ad2f-a3c3abce2b09": {
},
"fe50247a-0bd5-4620-8798-bb8f7fb90a27": {
"0": {
"value": ""
}
}
}
-
Haz esta consulta en phpMyAdmin para ver qué es lo que te sale y ponme la imagen para verlo:
SELECT tab1.name AS title, tab2.value AS puntuacion
FROM AC_zoo_item AS tab1 LEFT JOIN AC_zoo_rating as tab2 ON tab1.id = tab2.item_id
WHERE tab2.item_id = 980
ORDER BY tab2.value DESC
En este caso es solo para el item 980 para comprobar cuántas líneas te aparecen
-
Prueba también a ejecutar esto a ver qué te sale:
SELECT AVG(value) AS rating, COUNT(id) AS votos
FROM AC_zoo_rating
WHERE item_id = 980
GROUP BY item_id
¿Hay una tabla que se llama AC_zoo_element? ¿Qué contiene esa tabla?
-
Aquí adjunto ambas capturas... la 1º consulta con el titulo de img consulta 980 y la segunda consulta con el titulo consultasegunda980
por cierto no hay ninguna tabla con el nombre AC_zoo_elemnts solo es un campo... de la tabla AC_zoo_item
Ahora tb te adjunto la img con todas las tablas que hay de zoo...
-
Yo creo que ya prácticamente lo tienes, si haces la consulta que te pongo más abajo deberían aparecerte todos los titles junto a su rating, que es lo que creo te interesa para que se te muestre dentro del módulo.
La consulta sería algo así (hay que probar por si hubiera algún problema, cuando la hayas hecho dime si crees que ha salido bien y ponme la imagen para verla):
SELECT tab1.name AS titulo, tab2.AVG(value) AS rating
FROM AC_zoo_item AS tab1 LEFT JOIN AC_zoo_rating as tab2 ON tab1.id = tab2.item_id
GROUP BY item_id
ORDER BY rating DESC
LIMIT 0, 20
La cláusula LIMIT sería para que solo te muestre cierto número de resultados, en este caso los 20 primeros títulos con mayor rating, pero en vez de 20 podría ponerse que fueran más o menos según prefirieras.
-
Se ha producido este error...
-
Prueba con esta sintaxis a ver si hay suerte:
SELECT tab1.name AS titulo, AVG(tab2.value) AS rating
FROM AC_zoo_item AS tab1 LEFT JOIN AC_zoo_rating as tab2 ON tab1.id = tab2.item_id
GROUP BY item_id
ORDER BY rating DESC
LIMIT 0, 20
-
He comprobado la consulta y ahora si funciona lo que pasa es que sale como antes...es decir el nombre y el nº de estrellas es decir solo el 5... y he comprobado si el 1º es realmente el primero y no era asi... habría que poner el nombre, el nº de votos y el rating que tiene...
Aqui te adjunto la img...
Muchas gracias...por todo
-
Yo creo que ahora sí está funcionando bien, de todas formas si quieres ver el número de votos prueba a hacer la consulta así para ver si muestra el número de votos:
SELECT tab1.name AS titulo, AVG(tab2.value) AS rating, COUNT(tab2.item_id) AS votos
FROM AC_zoo_item AS tab1 LEFT JOIN AC_zoo_rating as tab2 ON tab1.id = tab2.item_id
GROUP BY item_id
ORDER BY rating DESC
LIMIT 0, 30
-
Ahora funciona perfecto... he modificado el orden del rating por el de votos y si me sale bien...ya lo unico que abria que hacer es sustituir todo el codigo de la otra vez por este que tu me has dado no?¿
Esdecir todo esto lo sustituyo por eltuyo?¿
function GetRatedArticlesList(&$params)
{
require_once JPATH_SITE.DS.'components'.DS.'com_content'.DS.'helpers'.DS.'route.php';
$db =& JFactory::getDBO();
$query = "SELECT cc.title AS category, a.id, a.title, DATE_FORMAT(a.created,'%d.%m.%Y') as created,
u.username, a.hits, cc.id as catid, format((r.rating_sum / r.rating_count), 2) as averagerating
FROM #__content AS a
LEFT JOIN #__categories AS cc ON a.catid = cc.id
LEFT JOIN #__users AS u ON u.id = a.created_by
LEFT JOIN #__content_rating as r ON a.id = r.content_id
WHERE r.rating_count is not null";
-
He estado viendo el codigo donde se supone que hace la llamada sql y demás y este es el código entero por que no se si algunas otras partes del código hay que modificarlas...
Codigo.php
<?php
/**
* @version SVN: $Id$
* @package mod_topratedcontentmodule
* @author Mathias Hortig {@link http://tuts4you.de/}
* @license GNU/GPL
*/
// No direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
jimport( 'joomla.application.component.model' );
jimport( 'joomla.html.parameter' );
class mod_topratedcontentmodulehelper
{
function GetRatedArticlesList(&$params)
{
require_once JPATH_SITE.DS.'components'.DS.'com_content'.DS.'helpers'.DS.'route.php';
$db =& JFactory::getDBO();
$query = "SELECT cc.title AS category, a.id, a.title, DATE_FORMAT(a.created,'%d.%m.%Y') as created,
u.username, a.hits, cc.id as catid, format((r.rating_sum / r.rating_count), 2) as averagerating
FROM #__content AS a
LEFT JOIN #__categories AS cc ON a.catid = cc.id
LEFT JOIN #__users AS u ON u.id = a.created_by
LEFT JOIN #__content_rating as r ON a.id = r.content_id
WHERE r.rating_count is not null";
if($params->get('showOnlyPublicPosts') == 0)
{
$query .= " and a.access = 1 ";
}
$query .= "
ORDER BY (r.rating_sum / r.rating_count) desc, rating_count desc";
if($params->get('articleCount') != 0)
{
$query .= " LIMIT 0, " . $params->get('articleCount');
}
$db->setQuery( $query );
$table = $db->loadObjectList();
$html .= '<ul id="topratedcontentmodule">';
foreach($table as $row)
{
$html .= '<li>';
$html .= '<a title="' . JText::_('MOD_TOPRATEDCONTENTMODULE_AVERAGERATING') . ': ' . $row->averagerating . '" href="' . JRoute::_(ContentHelperRoute::getArticleRoute($row->id, $row->catid)) . '">'.$row->title.'</a>';
$html .= '</li>';
}
$html .= '</ul>';
return $html;
}
}
-
Pero entonces ¿vas a ordenar solo por número de votos sin tener en cuenta la puntuación? ¿Cómo es la consulta que has ejecutado?
Supongamos que tienes un avión con 10 votos de 5 estrellas y otro avión con 12 votos de 2 estrellas ¿Cuál se supone que tendría que salir primero?
Si es por puntuación, el primero tiene 10*5= 50, valor medio 5, y el segundo 12*2=24, valor medio 2.
Si es por número de votos tendrías primero el de 12 y segundo el de 10, pero claro, puedes tener más votos pero los votos ser malos o de peor puntuación que otro que tenga menos votos.
-
Buenas de nuevo...
Te comento tienes razón no me fije... yo realmente lo que quiero es que el 1º sea el que más votos tenga y con mayor rating... ya que no e slo mismo 5 de rating con 1 que 5 con 10 votos...
Y con la consulta tuya, lo que hacia era mostrar los que tiene el rating 5 pero no tiene en cuenta el nº de votos, ya que aparecen algunos en las 1º posiciones con 1 voto y otras con más votos aparecen muy por abajo cuando no debería de ser así...
-
Supón que tienes lo siguiente:
Título Votos Rating (puntuación media)
A320 10 3.5
B737 20 3.0
K878 5 4.75
L373 1 5.0
H292 15 2.50
J383 20 4.50
M655 15 5.0
G221 5 5.0
Tienes varias opciones: si ordenas sólo por rating te sale primero el L373 (ó el M655 ó G221 ya que están empatados)
Si ordenas sólo por votos te sale primero el B737 (ó el J383 ya que están empatados en votos)
Si ordenas primero por votos y luego por rating te sale primero el J383
Si ordenas primero por rating y luego por votos te sale primero el M655
También puedes ordenar estableciendo criterios:
por ejemplo "Sólo aquellos aviones con 10 ó más votos, ordenados por rating." En este caso te sale primero el M655
¿Cómo quieres ordenar?
-
Te comento para que es lo que realmente quiero esto... este código quiero que me muestre el top 10 por ejemplo o top 20 de las imagenes mas valorada con mejor rating... ya que despues el ganador el que este en la 1º tendrá algún premio o algo así... por loq ue es muy importante que la 1º img sea la que mas rating tenga y mayor numero de votos...
Por lo que de las opciones que tu me has dicho creo que la mas fiable para mis necesidades es:
Si ordenas primero por rating y luego por votos te sale primero el M655
O cual crees que se asemeja mejor a mis necesidades?¿ yo creo que sería la que te he puesto...
Un saludo
-
Ahora supón esto:
Título Votos Rating (puntuación media)
A320 10 3.5
B737 20 3.0
K878 5 4.75
L373 1 5.0
H292 15 2.50
J383 20 4.50
M655 15 4.85
G221 5 4.95
Si ordenas primero por rating y luego por votos, te saldría primero el L373 que sólo tiene un voto, mientras que hay otros que tienen muchos votos y una puntuación bastante alta. Esto no sería lógico (al menos yo no lo veo lógico).
La solución que mejor veo yo es primero por rating y luego por votos, pero sólo cuando se tenga un número de votos mínimo, así se evita que un avión con pocos votos pueda aparecer en los primeros lugares de la lista.
Usar esta opción u otra y cuál sería el número de votos mínimo sería algo que tendrías que decidir tú. El límite de votos también podrías cambiárselo, por ejemplo si ahora tienes todos los aviones con pocos votos puedes poner un límite de mínimo 3 votos. Si con el tiempo llegas a tener muchos aviones con muchos votos podrías subir el límite a 10 votos, más adelante a 20 votos... así vas filtrando por rating pero siempre con un número de votos mínimo, ya que son ambas cosas lo que hacen al avión popular, tanto el número de votos como la puntuación que va obteniendo.
-
Título Votos Rating (puntuación media)
A320 10 3.5
B737 20 3.0
K878 5 4.75
L373 1 5.0
H292 15 2.50
J383 20 4.50
M655 15 4.85
G221 5 4.95
Con este ultimo ejemplo... que tu me has puesto... se supone que el l373 tiene 5 de rating y los demás aun teniendo más votos no llega el rating a 5, es decir que por ej. el M655 tiene 15 votos pero de esos 15 muchos han votado por debajo de 4 y de 5 es decir que la media no llega a 5... por lo que el que ha votado 1 vez pero 5 estrellas es la mejor ... entonces visto asi ... es como debería ya que si tiene mayor tating es lo importante... lo que si pienso que peude fallar es cuado haya este ejemplo...
Título Votos Rating (puntuación media)
A320 10 5.0
B737 20 5.0
K878 5 4.75
L373 1 5.0
H292 15 2.50
J383 20 4.50
M655 15 4.85
G221 5 4.95
Ahora con este ej. hay 3 que tienen 5.0 de rating y cada uno con unos votos... en este caso... haciendolo como yo lo he dicho cual saldría vencedor?¿ el B737 no?¿
Si ese es el resultado creeo que no habria ningún problema... por que realmente lo importate es el rating... pero si se hace 1º rating y despues de todos los que hallan sacado 5 se busque el que más votos tiene ...creo que no haría falta nada más...
-
Bueno, lo que dices es razonable y saldría como tú dices en ese caso, primero el B737 (aunque se te pueden colar delante aviones que tengan solo un voto si tienen un rating superior a otro con muchos votos y el rating solo un poco más bajo)
La consulta sería esta:
SELECT tab1.name AS titulo, AVG(tab2.value) AS rating, COUNT(tab2.item_id) AS votos
FROM AC_zoo_item AS tab1 LEFT JOIN AC_zoo_rating as tab2 ON tab1.id = tab2.item_id
GROUP BY item_id
ORDER BY rating DESC, votos DESC
LIMIT 0, 30
Pruébala a ver si te va bien con phpMyAdmin, lo primero es ver si te va bien ahí; si es así ya podría pensarse en pasar a hacer pruebas en el código
-
Ok todo funciona como debería, por lo que esta correcto... ;)
Cuando quieras podemos ver como modificar el código...
-
La función a modificar parece que es: function GetRatedArticlesList()
Y a su vez parece que aparece en 3 archivos, no sé si sería necesario tocarlos todos ellos o no, de cualquier forma teniendo que modificar uno tampoco se pierde tanto tiempo en modificarlos todos
Archivo mod_topratedcontentmodelhelper.php, ruta \mod_topratedcontentmodule\mod_topratedcontentmodule
Archivo mod_topratedcontentmodulehelper.php, ruta \mod_topratedcontentmodule\mod_topratedcontentmodule
archivo topratedcontentmodel.php, ruta \mod_topratedcontentmodule\mod_topratedcontentmodule\site\models
-
Si ya vi hace tiempo que era esa función... probe en varias ocasiones a modificar la sql por la que me diste y seguia sin mostrarme nada de información... tambien he visto que en el contenido de la carpeta mod_topratedcontentmodule me aparecen 4 archuivos...
1º index.html
2º mod_topratedcontentmodule.php
3º mod_topratedcontentmodule.xml
4º mod_topratedcontentmodulehelper.php
el 1º solo contiene un estilo de color de fondo en blanco...
2º
<?php
/**
* @version SVN: $Id$
* @package mod_topratedcontentmodule
* @author Mathias Hortig {@link http://tuts4you.de/}
* @license GNU/GPL
*/
// No direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
// Require the base controller
require_once(dirname(__FILE__).DS.'mod_topratedcontentmodulehelper.php');
echo mod_topratedcontentmodulehelper::GetRatedArticlesList($params);
3º contiene lo que sería los datos del panel de administración de la configuración
4º
<?php
/**
* @version SVN: $Id$
* @package mod_topratedcontentmodule
* @author Mathias Hortig {@link http://tuts4you.de/}
* @license GNU/GPL
*/
// No direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
jimport( 'joomla.application.component.model' );
jimport( 'joomla.html.parameter' );
class mod_topratedcontentmodulehelper
{
function GetRatedArticlesList(&$params)
{
require_once JPATH_SITE.DS.'components'.DS.'com_content'.DS.'helpers'.DS.'route.php';
$db =& JFactory::getDBO();
$query = "SELECT cc.title AS category, a.id, a.title, DATE_FORMAT(a.created,'%d.%m.%Y') as created,
u.username, a.hits, cc.id as catid, format((r.rating_sum / r.rating_count), 2) as averagerating
FROM #__content AS a
LEFT JOIN #__categories AS cc ON a.catid = cc.id
LEFT JOIN #__users AS u ON u.id = a.created_by
LEFT JOIN #__content_rating as r ON a.id = r.content_id
WHERE r.rating_count is not null";
if($params->get('showOnlyPublicPosts') == 0)
{
$query .= " and a.access = 1 ";
}
$query .= "
ORDER BY (r.rating_sum / r.rating_count) desc, rating_count desc";
if($params->get('articleCount') != 0)
{
$query .= " LIMIT 0, " . $params->get('articleCount');
}
$db->setQuery( $query );
$table = $db->loadObjectList();
$html .= '<ul id="topratedcontentmodule">';
foreach($table as $row)
{
$html .= '<li>';
$html .= '<a title="' . JText::_('MOD_TOPRATEDCONTENTMODULE_AVERAGERATING') . ': ' . $row->averagerating . '" href="' . JRoute::_(ContentHelperRoute::getArticleRoute($row->id, $row->catid)) . '">'.$row->title.'</a>';
$html .= '</li>';
}
$html .= '</ul>';
return $html;
}
}
eso es el contenido de los archivos de mi carpeta...
Tambien me gustaría puntualizar una cosa cuando en el inicio de nuestra larga ya conversación te comente mi problema... te dije donde estba el archivo para descargarlo... y habia 2 uno de ellos ponia module y el otro no ponia nada... yo tengo los 2 instalados... y si me voy a gestor de extensiones... me pone esto...
IMAGEN33.jpg
Es decir uno lo pone como modulo y otro como componente y adesmas uno es administrador y otro sitio...
Te digo esto por si te sirve de información ...
Pero por el momento tu me has dicho unos archivos y uno de ellos no lo tengo yo ya que yo tengo 2 archivos con extension .php y tu me has dicho de 3...
y entre otras cosas también decir, que en los 2 archivos de php, ambos llaman a esa funcion solo que uno lo llama con el argumento (&$params) y el otro lo llama sin argumentos...
Espeor averte servido de alguna ayuda mas... sobre esta problematica...
Un saludo y nuevamente mmuchas gracias...
-
Guarda aparte una copia de seguridad por si tienes que recuperar el código original. El archivo mod_topratedcontenmodelhelper.php en la ruta \mod_topratedcontentmodule\mod_topratedcontentmodule debería quedar aproximadamente así (como está abajo). Prueba a poner este código como contenido del archivo y publicar un módulo a ver qué es lo que hace, en teoría debería mostrarte los nombres de los aviones y la puntuación ordenados según la consulta ¿te responde así?:
<?php
/**
* @version SVN: $Id$
* @package mod_topratedcontentmodule
* @author Mathias Hortig {@link http://tuts4you.de/}
* @license GNU/GPL
*/
// No direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
jimport( 'joomla.application.component.model' );
jimport( 'joomla.html.parameter' );
class TopRatedContentModuleModelTopRatedContentModule extends JModel
{
function GetRatedArticlesList()
{
require_once JPATH_SITE.DS.'components'.DS.'com_content'.DS.'helpers'.DS.'route.php';
$db =& JFactory::getDBO();
//Cambio introducido en la consulta
$query = "SELECT tab1.name AS titulo, AVG(tab2.value) AS rating, COUNT(tab2.item_id) AS votos
FROM AC_zoo_item AS tab1 LEFT JOIN AC_zoo_rating as tab2 ON tab1.id = tab2.item_id
GROUP BY item_id
ORDER BY rating DESC, votos DESC
LIMIT 0, 30";
/* Esto en principio dejarlo comentado
if($params->get('showOnlyPublicPosts') == 0)
{
$query .= " and a.access = 1 ";
}
$query .= "
ORDER BY (r.rating_sum / r.rating_count) desc, rating_count desc";
if($params->get('articleCount') != 0)
{
$query .= " LIMIT 0, " . $params->get('articleCount');
}
*/
$db->setQuery( $query );
$table = $db->loadObjectList();
$html = '<ul id="topratedcontentmodule">';
foreach($table as $row)
{
$html .= '<li>';
$html .= $row->title.'<br/> Valoración media:' . $row->rating;
$html .= '</li>';
}
$html .= '</ul>';
return $html;
}
}
-
LA web esta completamente desconfigurada con el cambio...
aqui te muestro 2 img una antes del cambio de codigo y otra despues de poner tu codigo...
-
Yo tengo el módulo instalado y lo veo correctamente (no con el zoo, sino con artículos Joomla). Tienes que verificar varias cosas:
- La extensión a instalar era simplemente mod_topratedcontentmodule.zip, no sé si has instalado más cosas, yo sólo he instalado este.
- Tienes que publicar el módulo en una posición de plantilla válida
- Prueba a publicar un módulo custom_html para ver si se ve bien
- Una cosa que podrías hacer es la siguiente: con el código original, crea dos artículos Joomla y añádele votos. Luego visualiza el módulo (como estaba originalmente) y comprueba que se vea bien. El módulo original debe verse bien, si no se ve bien es que el problema no es por el cambio de código, sino por otro tipo de problema. Si el módulo original se ve bien y es con el cambio de código cuando se desconfigura, entonces habría que ver qué es lo que está pasando.