IPBSDK et la (mauvaise) gestion des attachements
Plus j'avance dans le débugage du IPBSDK et le développement de mon portail, plus je me rends compte qu'il n'y a pas de cohésion entre les différentes fonctions qui compose ce SKD. En effet, prenons l'exemple de la gestion des attachements qui fait 1 requête par attachement alors qu'il est si simple d'utiliser une fonction récupérant tout les attachements d'un message... Le pire est que cette fonction existe ! Mais les 2 ne sont pas reliées. Rassurez vous, je vous livre mon code à rajouter dans la classe MySDK.
/**
* Get a post's attachments
* Gestion d'une mise en cache.
* @author Guillaume Kulakowski <guillaume_AT_llaumgui_DOT_com>
* @author Pita <peter@randomnity.com>
* @since 1.11
* @param integer $postid The post id to check
* @param boolean $override Whether to override permissions or not.
* @return array Post's attachments
*/
function get_post_attachments($postid,$override=FALSE) {
$query = "";
if($override == FALSE)
{ $query = " AND attach_approved=1"; }
$this->DB->query( " SELECT *
FROM ibf_attachments
WHERE attach_pid='".$postid."'".$query);
if( $this->DB->get_num_rows() == 0 )
{ return FALSE; }
while ( $row = $this->DB->fetch_row() )
{ $return[] = $row; }
$this->_cache['post_attachments'.$postid] = $return;
}
/**
* Get HTML code for outputting an attachment image.
* Utilisation d'un cache.
* @author Guillaume Kulakowski <guillaume_AT_llaumgui_DOT_com>
* @since 1.11
* @param integer $postid The post id to check
* @param integer $id The attachment id to be parsed.
* @param boolean $override Whether to override permissions or not.
* @return string HTML code
* @see attachment_info(), attachment_thumb()
*/
function attachment_image( $pid, $id,$override=FALSE ) {
/*
* On récupère tous les attachements du poste :
*/
if ( empty($this->_cache['post_attachments'.$pid]) )
{
$this->get_post_attachments($pid);
// Ancien sysèmeme, au cas où :
if ( empty($this->_cache['post_attachments'.$pid]) )
{
$att = $this->attachment_info($id,$override);
if($att['attach_is_image'] == 0)
{ return FALSE; }
}
}
else
{
foreach( $this->_cache['post_attachments'.$pid] as $key => $value )
{
if ( $value['attach_id'] == $id )
{ $att = $value; }
}
}
/*
* Gestion des miniatures :
*/
if ( empty($att['attach_thumb_location']) )
{ $out = '<img src="'.$this->board_url.'/uploads/'.$att['attach_location'].'" alt="'.$att['attach_file'].'" />'; }
else
{ $out = '<a href="'.$this->board_url.'/index.php?act=Attach&type=post&id='.$att['attach_id'].'" target="_blank"><img src="'.$this->board_url.'/uploads/'.$att['attach_thumb_location'].'" class="attach" alt="'.$att['attach_file'].'" /></a>'; }
return $out;
}
?>




Abonnement aux commentaires
S'abonner pour recevoir les commentaires suivants par email