SobiPro - Limit Entries for Users
Un quesito che può porsi qualora si decida di creare una directory con il componente SobiPro, è lasciare la possibilità agli utenti del sito di registrarsi e solo successivamente di creare una sola scheda - entry.
Per fare questo, senza complicare inutilmente la logica di controllo del componente, ho adottato la soluzione di inserire una funzione nella abstract class del template da me usato per la directory SobiPro.
Al momento della richiesta di inserimento di una nuova entry da parte dell'utente, la funzione fa un controllo sull'esistenza di una entry dell'utente nella section indicata.
Se questo è verificato, sfrutta la funzione Sobi::Redirect per ridirezionare l'utente alla sua scheda - entry in modalità modifica 'entry.edit'
File template.php funzione Redirect
Aprite il file template.php nella cartella del template SobiPro da voi utilizzato.
Ecco il codice da inserire all'interno della abstract class:
public static function Redirect($id,
$orderBy = 'createdTime', $section = null, $type = 'entry')
{
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( SPRequest::task() == 'entry.add' ) {
$url = htmlspecialchars(
Sobi::Url(
array(
'task' => 'entry.edit',
'sid' => $entry->get('id')
)
)
);
Sobi::Redirect($url);
break;
}
}
}
}
}
Modifica del file edit.xsl
La parte restante del codice, va inserito invece nel file edit.xsl che si trova all'interno della cartella entry del template SobiPro. Modificarlo inserendo le seguenti righe di codice:
<xsl:variable name="user">
<xsl:value-of select="php:function('SobiPro::My','id')" />
</xsl:variable>
<xsl:value-of select="
php:function(
'RestaurantsTpl::Redirect',
$user
)"
/>
Ora, se l'utente registrato è abilitato all'inserimento e ha già una scheda - entry nella section, verrà reindirizzato verso quest'ultima in modalità di modifica 'task=entry.edit'