Autor Tema: ordenar por los mas votados módulo zoo joomla modificar código  (Leído 36105 veces)

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re:ordenar por los mas votados
« Respuesta #40 en: 24 de Abril 2013, 13:37 »
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.
Responsable de departamento de producción aprenderaprogramar.com

dinasty0

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 28
    • Ver Perfil
Re:ordenar por los mas votados
« Respuesta #41 en: 24 de Abril 2013, 14:32 »
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í...

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re:ordenar por los mas votados
« Respuesta #42 en: 25 de Abril 2013, 08:14 »
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?

Responsable de departamento de producción aprenderaprogramar.com

dinasty0

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 28
    • Ver Perfil
Re:ordenar por los mas votados
« Respuesta #43 en: 25 de Abril 2013, 10:18 »
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

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re:ordenar por los mas votados
« Respuesta #44 en: 25 de Abril 2013, 11:23 »
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.



Responsable de departamento de producción aprenderaprogramar.com

dinasty0

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 28
    • Ver Perfil
Re:ordenar por los mas votados
« Respuesta #45 en: 25 de Abril 2013, 12:13 »
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...

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re:ordenar por los mas votados
« Respuesta #46 en: 27 de Abril 2013, 14:59 »
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
Responsable de departamento de producción aprenderaprogramar.com

dinasty0

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 28
    • Ver Perfil
Re:ordenar por los mas votados
« Respuesta #47 en: 27 de Abril 2013, 15:08 »
Ok todo funciona como debería, por lo que esta correcto...  ;)

Cuando quieras podemos ver como modificar el código...

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re:ordenar por los mas votados
« Respuesta #48 en: 29 de Abril 2013, 20:31 »
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

Responsable de departamento de producción aprenderaprogramar.com

dinasty0

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 28
    • Ver Perfil
Re:ordenar por los mas votados
« Respuesta #49 en: 29 de Abril 2013, 20:53 »
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...

Código: [Seleccionar]
<?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


Código: [Seleccionar]
<?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...

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re:ordenar por los mas votados
« Respuesta #50 en: 30 de Abril 2013, 15:34 »
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í?:

Código: [Seleccionar]
<?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;


  }

Responsable de departamento de producción aprenderaprogramar.com

dinasty0

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 28
    • Ver Perfil
Re:ordenar por los mas votados
« Respuesta #51 en: 30 de Abril 2013, 19:35 »
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...

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re:ordenar por los mas votados
« Respuesta #52 en: 01 de Mayo 2013, 00:08 »
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.

Responsable de departamento de producción aprenderaprogramar.com

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".