Listado condicionado

ESL_Kaiser
$coursecount = 0;
        foreach ($courses as $course) {
            $coursecount ++;
            $classes = ($coursecount%2) ? 'odd' : 'even';
            if ($coursecount == 1) {
                $classes .= ' first';
            }
            if ($coursecount >= count($courses)) {
                $classes .= ' last';
            }
            if($course->can_access())
            $content .= $this->coursecat_coursebox($chelper, $course, $classes);      
}

Buenas tengo este código que funciona perfectamente y hace lo que debería, hasta aquí bien. Ahora quiero condicionar, ya que esto muestra un listado por categorías que para la categoría 7 no realice el if del final pero que siga ejecutando el resto de código.

$coursecount = 0;
        foreach ($courses as $course) {
            $coursecount ++;
            $classes = ($coursecount%2) ? 'odd' : 'even';
            if ($coursecount == 1) {
                $classes .= ' first';
            }
            if ($coursecount >= count($courses)) {
                $classes .= ' last';
            }

  if($course->can_access()) //este if no se ejecuta dentro de la categoría 7
        $content .= $this->coursecat_coursebox($chelper, $course, $classes); //esto se tiene que ejecutar siempre     
    }

Lo he intentado con while, case, else, metiendo un AND al if excluyendo la categoría 7 y no soy capaz, me podéis echar una mano por favor?

Wasd

Todos los cursos están en la variable $courses o tienes un foreach previo que va iterando las categorias?
Entiendo que la categoría 7 es algo así como de acceso público. Lo suyo es poder preguntarle directamente al curso si es de libre acceso o no, independientemente de su categoría.

if ($course->hasPublicAccess() || $course->canAccess()) { $content .= ...; }

Eso sería algo mas limpio.

Si tienes que preguntar si o si por la categoría 7, pues

if ($course->category == 7 || $course->canAccess()) { $content .= ...; }

Esto dando por hecho que la category está almacenada dentro del curso, porque en tu código me falta ver dónde está realmente la categoría de cada curso.

Tema aparte, CSS te permite definir estilos directamente a first, last, odd y even childs sin tener que especificarle una clase vía lógica.

https://www.w3.org/Style/Examples/007/evenodd.en.html
https://www.w3schools.com/cssref/sel_firstchild.asp
https://www.w3schools.com/cssref/sel_last-child.asp

Eso te permitiría reducir sustancialmente ese foreach ()

2 respuestas
ESL_Kaiser

#2 los cursos están en course sí y luego la categoría en category que está más arriba junto con un foreach creo recordar, gracias por la respuesta lo probaré en cuanto llegue a casa a ver qué tal se me da. Estuve un rato probando y aunque no me daba error tampoco funcionaba y el debug no me esclarecía nada, así que te lo agradezco

1 respuesta
Wasd

#3 Si el foreach de categorias lo tienes mas arriba y cada curso no sabe en qué categoría está por si mismo, pasame el código de esa parte porque los dos ejemplos que te puse no te servirán.

ESL_Kaiser
#2Wasd:

if ($course->category == 7 || $course->canAccess()) { $content .= ...; }

funciona perfecto de momento con eso tiro mil gracias, te debo un algo!

1 respuesta
Wasd

#5 Pruebalo bien porque ese "$course->category" me lo saqué un poco de la manga. Si el objeto Course tiene dentro la propiedad category, perfecto entonces!

No hay de qué, no me debes nada :)

1 respuesta
ESL_Kaiser

#6 Si si, dudaba que guardase la categoría dentro del curso, pero ha funcionado, y he hecho varias pruebas y funciona correctamente. De momento el apaño me vale :D

Usuarios habituales

  • ESL_Kaiser
  • Wasd