Joomla: Codice php per visualizzare solo prime righe di un articolo da DB

dla86

Utente Attivo
27 Mag 2009
36
0
0
Salve a tutti,
scrivo per chiedere aiuto su come poter modificare la visualizzazione degli articoli secondari di joomla, ovvero quelli in basso nella visualizzazione blog prima pagina (quando si dispongono in due colonne). Vorrei poter modificare se possibile il php in modo che in automatico, quando gli articoli passano in queste due colonne joomla mostri solo le prime 4 righe di ogni articoli. Dovrei intervenire su questo codice:
PHP:
<?php // no direct access
defined('_JEXEC') or die('Restricted access'); ?>
<?php if ($this->params->get('show_page_title', 1)) : ?>
<div class="componentheading<?php echo $this->escape($this->params->get('pageclass_sfx')); ?>">
    <?php echo $this->escape($this->params->get('page_title')); ?>
</div>
<?php endif; ?>
<table class="blog<?php echo $this->escape($this->params->get('pageclass_sfx')); ?>" cellpadding="0" cellspacing="0">
<?php if ($this->params->def('num_leading_articles', 1)) : ?>
<tr>
    <td valign="top">
    <?php for ($i = $this->pagination->limitstart; $i < ($this->pagination->limitstart + $this->params->get('num_leading_articles')); $i++) : ?>
        <?php if ($i >= $this->total) : break; endif; ?>
        <div>
        <?php
            $this->item =& $this->getItem($i, $this->params);
            echo $this->loadTemplate('item');
        ?>
        </div>
    <?php endfor; ?>
    </td>
</tr>
<?php else : $i = $this->pagination->limitstart; endif; ?>

<?php
$startIntroArticles = $this->pagination->limitstart + $this->params->get('num_leading_articles');
$numIntroArticles = $startIntroArticles + $this->params->get('num_intro_articles', 4);
if (($numIntroArticles != $startIntroArticles) && ($i < $this->total)) : ?>
<tr>
    <td valign="top">
        <table width="100%"  cellpadding="0" cellspacing="0">
        <tr>
        <?php
            $divider = '';
            if ($this->params->def('multi_column_order',1)) : // order across as before
            for ($z = 0; $z < $this->params->def('num_columns', 2); $z ++) :
                if ($z > 0) : $divider = " column_separator"; endif; ?>
                <?php
                    $rows = (int) ($this->params->get('num_intro_articles', 4) / $this->params->get('num_columns'));
                    $cols = ($this->params->get('num_intro_articles', 4) % $this->params->get('num_columns'));
                ?>
                <td valign="top" width="<?php echo intval(100 / $this->params->get('num_columns')) ?>%" class="article_column<?php echo $divider ?>">
                <?php
                $loop = (($z < $cols)?1:0) + $rows;

                for ($y = 0; $y < $loop; $y ++) :
                    $target = $i + ($y * $this->params->get('num_columns')) + $z;
                    if ($target < $this->total && $target < ($numIntroArticles)) :
                        $this->item =& $this->getItem($target, $this->params);
                        echo $this->loadTemplate('item');
                    endif;
                endfor;
                        ?></td>
                        <?php endfor; 
                        $i = $i + $this->params->get('num_intro_articles') ; 
            else : // otherwise, order down columns, like old category blog
                for ($z = 0; $z < $this->params->get('num_columns'); $z ++) :
                    if ($z > 0) : $divider = " column_separator"; endif; ?>
                    <td valign="top" width="<?php echo intval(100 / $this->params->get('num_columns')) ?>%" class="article_column<?php echo $divider ?>">
                    <?php for ($y = 0; $y < ($this->params->get('num_intro_articles') / $this->params->get('num_columns')); $y ++) :
                    if ($i < $this->total && $i < ($numIntroArticles)) :
                        $this->item =& $this->getItem($i, $this->params);
                        echo $this->loadTemplate('item');
                        $i ++;
                    endif;
                endfor; ?>
                </td>
        <?php endfor; 
        endif;?>        
        </tr>
        </table>
    </td>
</tr>
<?php endif; ?>
<?php if ($this->params->def('num_links', 4) && ($i < $this->total)) : ?>
<tr>
    <td valign="top">
        <div class="blog_more<?php echo $this->escape($this->params->get('pageclass_sfx')); ?>">
            <?php
                $this->links = array_splice($this->items, $i - $this->pagination->limitstart);
                echo $this->loadTemplate('links');
            ?>
        </div>
    </td>
</tr>
<?php endif; ?>

<?php if ($this->params->def('show_pagination', 2) == 1  || ($this->params->get('show_pagination') == 2 && $this->pagination->get('pages.total') > 1)) : ?>
<tr>
    <td valign="top" align="center">
        <?php echo $this->pagination->getPagesLinks(); ?>
        <br /><br />
    </td>
</tr>
<?php if ($this->params->def('show_pagination_results', 1)) : ?>
<tr>
    <td valign="top" align="center">
        <?php echo $this->pagination->getPagesCounter(); ?>
    </td>
</tr>
<?php endif; ?>
<?php endif; ?>
</table>


quindi per ricapitolare avrei bisogno di inserire nel codice che ho postato sopra uno "script che conti il numero di righe o parole all'interno della tabella del db e tagli tutto il resto". Io non conosco bene il php, grazie a tutti coloro che mi aiuteranno!!
 
Prova ad usare questa funzione che ho scritto. Dovrebbe andare bene:
PHP:
function truncate_text($text, $words = 40)
{
	$exp = explode(' ', $text);
	$pieces = array_chunk($exp, $words);
	$new_text = implode(' ', $pieces);

	return $new_text;
}
Le passi come primo parametro il testo da troncare e come secondo il numero di parole dopo le quali troncarlo.
 
gradie davvero!!! :)
Dove devo inserirla? al termine?
in un punto preciso?
 
Visto che si parla di Joomla, sposto la discussione nella sezione CMS
 
Ho provato a inserire il codice alla fine del file ma non succede nulla, io di php so ben poco ma mi rendo conto che sicuramente la funzione deve essere richiamata in qualche punto...
 

Discussioni simili