$slice->getValue(1) im Template geht nicht

Wie verwendet man Templates oder erstellt Navigationen und passt diese an.

$slice->getValue(1) im Template geht nicht

Beitragvon elektropolka » 8. Feb 2007, 15:02

Hallo,

ich muss in einem Template auf die Slices eines bestimmten Artikels zugreifen. Ich habe mir eine Funktion gebaut, die den Artikels übergeben kriegt und dann ein SliceObjekt erstellt (siehe unten). Die Ausgabe mit print_r($slice) funktioniert und zeigt ein Objekt vom Ty OOArticleSlice an, versuche ich aber, per $slice->getValue(1) auf ein bestimmtes Feld zuzugreifen, gibts immer einen "Call to a member function getValue() on a non-objec" Fatal Error. Was mach ich da falsch?

Die Funktion (gekürzt):

Code: Alles auswählen
function buildSomething($article)
{
   $slice = OOArticleSlice::getArticleSliceById($article->getId());

   echo $slice->getValue(1); //Fatal Error?
   
   /* ...   */
   
}
elektropolka
 
Beiträge: 16
Registriert: 23. Mai 2006, 15:46

Beitragvon Thomas.Blum » 8. Feb 2007, 17:04

Hej,

probier einmal anstatt von
Code: Alles auswählen
$slice->getValue(1)


das hier einzugeben

Code: Alles auswählen
$slice->_value1


bzw was kommt raus bei einem

Code: Alles auswählen
print_r($slice);


vg Thomas
blumbeet - web.studio - Dresden - 0351 217 6225
webbude - Blog über CSS.XHTML.REX
Ein Wunschzettel
Benutzeravatar
Thomas.Blum
Entwickler
 
Beiträge: 4670
Registriert: 24. Aug 2004, 21:11
Wohnort: Dresden

Beitragvon elektropolka » 8. Feb 2007, 17:21

hi,
Code: Alles auswählen
$slice->_value1

bringt garnix, auch keine fehler, immerhin. ;)

die ausgabe von print_r ergibt ein OOArticleSlice - Objekt:
Code: Alles auswählen
OOArticleSlice Object
(
    [_id] => 106
    [_re_article_slice_id] => 0
    [_value] => Array
        (
            [1] => Willkommen!
            [2] =>
            [3] =>
            [4] =>
            [5] => Der Willkommenstext. Der Willkommenstext. Der Willkommenstext. Der Willkommenstext.
            [6] =>
            [7] =>
            [8] =>
            [9] =>
            [10] =>
        )

    [_file] => Array
        (
            [1] => btn_jeder_397x120.jpg
            [2] =>
            [3] =>
            [4] =>
            [5] =>
            [6] =>
            [7] =>
            [8] =>
            [9] =>
            [10] =>
        )

    [_link] => Array
        (
            [1] => 0
            [2] => 0
            [3] => 0
            [4] => 0
            [5] => 0
            [6] => 0
            [7] => 0
            [8] => 0
            [9] => 0
            [10] => 0
        )

    [_php] =>
    [_html] =>
    [_article_id] => 25
    [_modultyp_id] => 2
)


das ganze template sieht so aus:
Code: Alles auswählen
<?php

//get "Online" ArticleTeasers from "MiddleDouble"
$cat_id = 21;

$cat = OOCategory::getCategoryById($cat_id);
$articles = $cat->getArticles(true);
echo '<div id="center_m">';

if (is_array($articles) && count($articles) > 0)
{
  foreach ($articles as $art)
  {
    if ($art->isStartPage()) continue;
    echo buildTeaser($art,350,396);
  }
}
echo '</div>';



//get "Online" ArticleTeasers from "MiddleLeft"
$cat_id = 5;

$cat = OOCategory::getCategoryById($cat_id);
$articles = $cat->getArticles(true);

echo '<div id="center_l">';
if (is_array($articles) && count($articles) > 0)
{
  foreach ($articles as $art)
  {
    if ($art->isStartPage()) continue;   
    echo buildTeaser($art,250,196);
  }
}
echo '</div>';



//get "Online" ArticleTeasers from "MiddleLeft"
$cat_id = 4;

$cat = OOCategory::getCategoryById($cat_id);
$articles = $cat->getArticles(true);

echo '<div id="center_r">';
if (is_array($articles) && count($articles) > 0)
{
  foreach ($articles as $art)
  {
    if ($art->isStartPage()) continue;   
    echo buildTeaser($art,250,196);
  }
}
echo '</div>';



//functions
//----------------------------------------------------------------------
function truncate($string, $length, $etc, $break_words = false)
{
   if ($length == 0)
      return '';

   if (strlen($string) > $length)
   {
      $length -= strlen($etc);
      
      if (!$break_words)
         $string = preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, $length +1));

      return substr($string, 0, $length).$etc;
   }
   else
      return $string;
}

//----------------------------------------------------------------------
function buildTeaser($art, $length, $thumbsize)
{
   $etc =" ... ";
   $slice = OOArticleSlice::getFirstSliceForArticle($art->getId());

   //debug($slice);   
   
   $headline = $slice->getValue(1);
   $newstext = truncate($slice->getValue(5), $length, $etc);
   $image = $slice->getFile(1);
      
   $out = '<div class="c_teaser">'."\n";
   
   if($image)
      $out .= '<img src="'.imageProcessor_getImg($image, $thumbsize).'" />'."\n";
   
   $out .= '<h3>'.$headline.'</h3>'."\n";
   $out .= '<p class="teaser">'.$newstext.' <a href="'.$art->getUrl().'">mehr</a></p>'."\n";
   
   $out .= '</div>'."\n\n";
   
   return $out;
   
}

//----------------------------------------------------------------------
function debug($what)
{
   echo "<p><pre>";
   print_r($what);
   echo "</pre></p>";
}
?>
elektropolka
 
Beiträge: 16
Registriert: 23. Mai 2006, 15:46

Beitragvon Markus.Staab » 8. Feb 2007, 17:27

Hi,

kannst du dir mal das erstellte generateFile anschauen und dort mal drübergehen (auch wg Zeilennummer)?

Gruß,
Markus
Benutzeravatar
Markus.Staab
Entwickler
 
Beiträge: 9781
Registriert: 29. Jan 2005, 14:50
Wohnort: Aschaffenburg/Germany

Beitragvon elektropolka » 8. Feb 2007, 17:39

hi,

hab ich gemacht, ist dasselbe wie in meinem code ... wär ja auch schlimm wenn nicht. ;)

p.s.: jetzt gings auch grad, aber nicht für alle artikel. ich werde mal die artikel überprüfen ...
elektropolka
 
Beiträge: 16
Registriert: 23. Mai 2006, 15:46

Beitragvon elektropolka » 8. Feb 2007, 17:46

aha! übeltäter gefunden: da war ein leerer artikel, also ohne module, das hat er wohl nich verkraftet. danke trotzdem! superfix seit ihr hier immer :)
elektropolka
 
Beiträge: 16
Registriert: 23. Mai 2006, 15:46

Beitragvon gemüsebrühe » 7. Mär 2008, 17:38

Ich möchte gern einhaken, da ich auch einen


"
Fatal error: Call to a member function getValue() on a non-object in /www/htdocs/w0083e9f/redaxo/include/classes/class.article.inc.php(179) : eval()'d code on line 184

"

bekomme.

Die Stelle im betroffenen Modul sieht so aus

Code: Alles auswählen
 
foreach ( $arr as $row) {
  $articles[] = OOArticle::getArticleById( $row['id']);
}

$art = new article();

$art->setArticleId( $article->getId());
  $articleId = $article->getId();
  $firstSlice = OOArticleSlice::getFirstSliceForArticle($articleId);

  //Unterüberschrift
  if ($firstSlice->getValue(10))
  {
  $subheadline = '<p class="artikel-subheadline">'.$firstSlice->getValue(10).'</p>';
  }

  //Inhalt
  $content = $firstSlice->getValue(1);


Der Artikel, der ausgegeben werden soll besitzt bei value(1) Inhalt !
So clickable, design is lickable.
Code is poetry.
Benutzeravatar
gemüsebrühe
 
Beiträge: 183
Registriert: 14. Feb 2007, 20:31

Beitragvon Thomas.Blum » 8. Mär 2008, 08:54

Hej

gibt es denn das Objekt $article überhaupt?

vg Thomas
blumbeet - web.studio - Dresden - 0351 217 6225
webbude - Blog über CSS.XHTML.REX
Ein Wunschzettel
Benutzeravatar
Thomas.Blum
Entwickler
 
Beiträge: 4670
Registriert: 24. Aug 2004, 21:11
Wohnort: Dresden

Beitragvon gemüsebrühe » 9. Mär 2008, 19:10

Nunja, sonst würde

in Value(1) ja nichts drin sein, oder?
So clickable, design is lickable.
Code is poetry.
Benutzeravatar
gemüsebrühe
 
Beiträge: 183
Registriert: 14. Feb 2007, 20:31


Zurück zu Templates/Navigationen [R3]

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste