Joomla! - SobiPro List of User Entries

google-plus Scritto da . Postato in Joomla!

Un problema nel quale mi sono imbattuto nel cercare di lavorare e adattare SobiPro a WineMeet.it, è stato quello di creare la lista delle entries o delle schede per utente lato amministrativo per permetterne la facile consultazione e o modifica da parte dell'utente registrato, Registered o Super Users che sia.

Nel far questo ho preso in considerazione due approcci, quello che è pubblicato su vari forum di SobiPro e quello di modificare il plugin Jomsocial My Sobi Entries in un content plugin che funzionasse senza bisogno appunto del famoso componente Jomsocial.

Il primo metodo, consiste nel modificare la class abstract del file template.php nel template SobiPro applicato alla Section nella quale si vuole inserire la lista delle entries utente.

Il codice, da inserire all'interno della classe abstract è questo:

public static function UserContributions($id, 
        $orderBy = 'createdTime', $section = null, $type = 'entry')
  {
    $doc = new DOMDocument(Sobi::Cfg('xml.version', '1.0'), Sobi:: Cfg('xml.encoding', 'UTF-8'));
    $contribs = $doc->createElement('contributions');
    if ($id && (int)$id)  {
      $section = $section ? $section : -1;
      $listing = SPFactory::Controller('listing');
      $listing = new SPListingCtrl();
      $entries = $listing->entries($orderBy, null, null, false, array('owner' => $id), false, $section);
      if (count($entries)) {
        foreach ( $entries as $id ) {
      $entry = SPFactory::Entry($id);
          if (($entry->get('name') && $entry->get('id')) && (($entry->get('section') == 643)||($entry->get('section') == 1363))) {
            $e = $doc->createElement( 'entry' );
            $e->appendChild( $doc->createElement ('name', $entry->get('name')));
            $e->appendChild( $doc->createElement ('approved', $entry->get('approved')));
            $e->appendChild( $doc->createElement ('counter', $entry->get('counter')));
            $e->appendChild( $doc->createElement ('validSince', $entry->get('validSince')));
            $url = htmlspecialchars(Sobi::Url(array('sid' => $entry->get('id'), 'task' => 'entry.edit')));

            $e->appendChild( $doc->createElement ('url', $url));
            $e->appendChild( $doc->createElement ('section', $entry->get('section')));
            $e->appendChild( $doc->createElement ('id', $entry->get('id')));
            
            $contribs->appendChild($e);
          }
        }
      }
    }
    return $contribs;
  }

Alcune specifiche:

  1. && (($entry->get('section') == 643)||($entry->get('section') == 1363))  Questo limita la visualizzazione delle entry ai soli section id specificati in questo caso 643 e 1363. Se si desidera invece vedere le entry di tutte le sezioni di SobiPro, cancellare questa parte.
  2. La chiamata alla funzione php htmlspecialchars senza la quale il link di ogni entry risulterebbe: http://tuosito.com/index.php?option=com_sobipro con conseguente mancato funzionamento visto che l'obbiettivo è avere il link direttamente al form di modifica della scheda.
  3. 'task' => 'entry.edit' definisce invece il fatto che la scheda si aprirà in modalità modifica. Se non si desidera questo, ma la semplice visualizzazione della entry cancellare questa parte.

Una volta salvato il file template.php, si necessita di applicarlo al file xsl dove si desidera ottenere la visualizzazione delle entries - schede utente:
Io personalmente l'ho inserito all'interno del file section/view.xsl del template da me utilizzato. Al suo interno ho incollato questo codice:

<!-- User Entries -->
    <xsl:variable name="user">
      <xsl:value-of select="php:function('SobiPro::My','id')" />
    </xsl:variable>
    
    <xsl:if test="$user!=0">
      <br /><hr />
      <h2>Le tue Schede: </h2>
      <div style="min-height:100px; overflow:auto; margin-botom: 10px;">
      <table style="width: 100%;">
        <thead style="bold">
          <tr>
            <td><strong>State</strong></td>
            <td><strong>Title</strong></td>
            <td><strong>Views</strong></td>
            <td><strong>Section</strong></td>
            <td><strong>Published</strong></td>
          </tr>
        </thead>
        <tbody>        
          <xsl:for-each select="php:function('RestaurantsTpl::UserContributions',$user)/entry">
        
      <tr>
        <td>
          <xsl:variable name="approved">
            <xsl:value-of select="approved" />
          </xsl:variable>
          <xsl:choose>
            <xsl:when test="$approved=1">
              Approved
            </xsl:when>
            <xsl:otherwise>
              Unapproved
            </xsl:otherwise>
          </xsl:choose>
        </td>
        <td>        
          <xsl:variable name="url">
            <xsl:value-of select="url" />
          </xsl:variable>
          <a href="/{$url}">        

            <xsl:value-of select="name" />
          </a>          
        </td>
        <td>        
          <xsl:value-of select="counter" />       
        </td>
        <td>        
          <xsl:value-of select="section" />       
        </td>        
        <td>        
          <xsl:value-of select="substring(validSince, 9, 2)" />-
          <xsl:value-of select="substring(validSince, 6, 2)" />-
          <xsl:value-of select="substring(validSince, 1, 4)" />       
        </td>
      </tr>
           
      </xsl:for-each>
      </tbody>
      </table>  
      </div>  
    </xsl:if>
     <!-- End User Entries -->


La chiamata alla funzione precedentemente aggiunta alla classe abstract:          

<xsl:for-each select="php:function('RestaurantsTpl::UserContributions',$user)/entry">

Dove RestaurantsTpl è il nome della abstract class. Il nome è arbitrario ma bisogna tenerne conto quando si fa la chiamata nel file view.xsl

Il risultato è apprezzabile nella seguente immagine:

sobipro-list-entries

Nel seguente articolo scriverò e pubblicherò il plugin modificato e ovviamente pronto all'uso.

Se hai gradito l'articolo, condividilo, basta un click!

Aggiungi commento


Codice di sicurezza
Aggiorna

  • logo prontopro
  • logo boutique serramento
  • koilab japan and tropical fish farm
  • Trasloco economico - gruppo Arco Traslochi
  • logo flash pulizie
  • logo revolution
  • logo planetkoi small
  • logo finiture
  • ick logo template
  • montaggio mobili trento

Realizzato da: Daniele Gagliardi
Viale Monache 3 - 38062 Arco - TN
- Contattami -

Per essere più facile ed intuitivo, il blog fa uso dei cookie, piccole porzioni di dati che consentono di capire come gli utenti navighino e ne visualizzino le pagine. I cookie non registrano alcuna informazione personale sull'utente ed eventuali dati identificabili non verranno memorizzati. La nostra Privacy Policy è cambiata: Ti invitiamo a prenderne visione. Oppure visiona la nostra Cookie Policy: