Перейти к содержимому


Фотография
- - - - -

Не могу получить url зная id материала


Лучший Ответ SmetDenis , 29 February 2016 - 16:26

Я подправил. :) Посмотрите пожалуйста.

Проблемы были том что вы скрывали все ошибки через @. Это очень вредно и не правильно. Т.к не понятно что просходит в коде, где ломается. В итоге уходит невероятное кол-во времени на отладку.

Далее у вас было 2 копии шаблона catalog.
Каждый шаблон объявляет собственный класс, соответственно они должны иметь свои имена.

Файл template.php
rmep_200x0.png Перейти к сообщению


  • Закрытая тема Тема закрыта
Сообщений в теме: 12

#1 axeld

axeld

Отправлено 24 February 2016 - 14:47

Здравствуйте. Создал модуль для joomla3.
Подключил zoo

// Load the framework
require_once ( JPATH_BASE . DS . 'includes' . DS . 'defines.php' );
require_once ( JPATH_BASE . DS . 'includes' . DS . 'framework.php' );

require_once(JPATH_ADMINISTRATOR . '/components/com_zoo/config.php'); // подключаем Zoo
require_once(JPATH_BASE . '/media/zoo/applications/jbuniversal/framework/jbzoo.php');// подключаем JBZoo
JBZoo::init(); // инициализация
$zoo = App::getInstance('zoo');
$url = $zoo->route->item(650);
 

Если так то :

Fatal error: Call to a member function getCategoryTree() on a non-object in Y:\home\...\www\administrator\components\com_zoo\helpers\route.php on line 295

 

Если так 

$url = $zoo->app->route->item(650);

то : 

Fatal error: Call to a member function item() on a non-object in Y:\home\...\www\modules\mod_anons\mod_anons.php on line 79

 

Как нужно правильно ?


  • 0

#2 fiction13

fiction13

Отправлено 24 February 2016 - 14:51

Читали документацию?

 

http://jbzoo.ru/docs...i-jbzoo-and-zoo

 

Полезная вещь, советую.

 

По теме - для начала надо получить объект материала, а потом уже получать url.


  • 0

#3 Vseprosto

Vseprosto

Отправлено 24 February 2016 - 14:55

Как нужно правильно ?

$item = $zoo->table->item->get(650);
$url = $zoo->route->item($item);


  • 0

#4 axeld

axeld

Отправлено 24 February 2016 - 16:08

$item = $zoo->table->item->get(650); $url = $zoo->route->item($item);

 

 

Да я так и делал. НЕ работает.
Потом заметил одну закономерность. Я беру id материалов из разных каталогов и разных категорий. И почему-то работает это только для одного каталога. У меня их 4. 

Для других делаю тоже самое, например id 667 - просто белые экран. без php ошибок.


  • 0

#5 Vseprosto

Vseprosto

Отправлено 24 February 2016 - 16:54

Дайте доступ к фтп


  • 0

#6 SmetDenis

SmetDenis

Отправлено 24 February 2016 - 16:56

Можете приложить файл модуля, чтобы посмотреть весь код полностью?
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#7 axeld

axeld

Отправлено 24 February 2016 - 18:17

Дайте доступ к фтп

Сайта пока нет  :(  localhost


Можете приложить файл модуля, чтобы посмотреть весь код полностью?

Да, только завтра.


  • 0

#8 axeld

axeld

Отправлено 25 February 2016 - 08:06

<?php 
defined('_JEXEC') or die( 'No' ); 

// Load the framework
require_once ( JPATH_BASE . DS . 'includes' . DS . 'defines.php' );
require_once ( JPATH_BASE . DS . 'includes' . DS . 'framework.php' );

require_once(JPATH_ADMINISTRATOR . '/components/com_zoo/config.php'); // подключаем Zoo
require_once(JPATH_BASE . '/media/zoo/applications/jbuniversal/framework/jbzoo.php');// подключаем JBZoo
JBZoo::init(); // инициализация
$zoo = App::getInstance('zoo');

//include ('class.jbdump.php'); // подключение jbdump
//jbdump($app);

//делаем запрос на вывод материалов
//с целью сделать анонс на главной странице, где будут отображены анонсы материалов
//со всех каталогов и всех категорий, отмеченных администратором.
 
$db = JFactory::getDBO();
$query = $db->getQuery(true);

$db->setQuery("SELECT * from #__zoo_item Order by created desc");
$rows = $db->loadObjectList();
?>
<div class="anons_title">
<span class="anons__">Анонсы событий</span>
</div><!--.anons_title-->

<div class="clear"></div>
<?php
foreach ($rows as $i=>$row) {
$id = trim($row->id);
//$item = $zoo->table->item->get($id);

$element = json_decode($row->elements);
// Проверка на наличие радио кнопки в положении "Да" в материале из админ панели
if($ee =  $element->{'945ac715-69df-4666-a57b-f0c0b68cd24c'}) {
if($ee->{"option"}->{0}=="da"){
$all_id[] = $id;	// для категории "блог"
	};  }
if($ee =  $element->{'23919730-c9bd-40f2-9708-bfef418fe110'}) {
if($ee->{"option"}->{0}=="da"){
$all_id[] = $id;
	};  }	 // категория  "для мужчин"	и "для женщин"
	
if($ee =  $element->{'aef81d8f-ecb9-4a21-a32f-ff6689484c40'}) {
if($ee->{"option"}->{0}=="da"){
$all_id[] = $id; // категория "обучение"
	};  }	
if($ee =  $element->{'487caef4-db61-4126-afab-f3d3440ff337'}) {
if($ee->{"option"}->{0}=="da"){
$all_id[] = $id;
	};  }	// портфолио  	

}// foreach 

// нужно всего три из массива $all_id
for($i=0,$y=1;$i<3;$i++,$y++) {
$id = $all_id[$i];

$item = $zoo->table->item->get($id);
$getThisItem = JBModelItem::model()->getByName($item->name);

//include ('class.jbdump.php'); // подключение jbdump
//jbdump($all_id);

// Делаем фото
$elementsArr = json_decode($getThisItem->elements, true);
$a1 = @$elementsArr["abc343aa-49b7-43f5-8ce8-5d2294f18c92"][0]["file"]; // фото блог
$a2 = @$elementsArr["6fc78e78-8239-4ac5-9858-11198ca47a87"][0]["file"]; // фото категория мужчинам  и женщинам
$a3 = @$elementsArr["a9c0369c-924d-4d2e-b355-3844797967b7"][0]["file"]; // фото категория обучение
$a4 = @$elementsArr["2b3e272a-0f16-4424-a982-02cc381ef38c"][0]["file"]; // фото категория портфолио


  $width  = 281;
  $height = 206;
  if($a1)     {$image = $zoo->jbimage->resize($a1, $width, $height);} 
  elseif($a2) {$image = $zoo->jbimage->resize($a2, $width, $height);}
  elseif($a3) {$image = $zoo->jbimage->resize($a3, $width, $height);}
  elseif($a4) {$image = $zoo->jbimage->resize($a4, $width, $height);}
  
// дальше не понятно.
//Если подставлять id из каталога Блог (ID Приложения - 3)- категория "блог" ID 531, материал ID 650, то все работает
$item = $zoo->table->item->get(650);

//Если подставить id из каталога Для женщин (ID Приложения - 3) - категория "для женщин" ID 534, материал ID 666, то не работает   
$url = @$zoo->route->item($item);

?>
<div class="table_cell">
<div class="anons_cont anons_cont0<?php echo $y;?>">
    <div class="img_block06">
      <img src="<?php echo  $image->origUrl;?>"  />
      <img src="images/281-205-filter.png" title="<?php echo $id;?>" class="img_absol" />
    </div><!--.img_block06-->
    <div class="anons_text">
    <?php echo $item->name;?>
    </div><!--.anons_text-->
    <div class="anons_date">
    <?php echo $url; ?>
    <?php //echo $item->created;?>
    </div><!--.anons_date-->
</div>    
</div><!--.table_cell-->


<?php
} // for
?>

<div class="clear"></div>

  • 0

#9 SmetDenis

SmetDenis

Отправлено 26 February 2016 - 14:07

У меня все получилось.
89ry_200x0.png

У материала алиас - набор единиц.
jdo2_200x0.png
 
    $item = $zoo->table->item->get($id);
    if (!$item) {
        continue;
    }

    $url = $zoo->route->item($item);
    dump($url);
И рекомендую вместо такого подхода
    $element = json_decode($row->elements);
    // Проверка на наличие радио кнопки в положении "Да" в материале из админ панели
    if ($ee = $element->{'945ac715-69df-4666-a57b-f0c0b68cd24c'}) {
        if ($ee->{"option"}->{0} == "da") {
            $all_id[] = $id;    // для категории "блог"
        };
    }
Делать так
    if ($element = $item->getElement('fc498cea-a276-4ce7-9719-50526c5742d7')) {
        $data = $zoo->data->create($element->data());
        $all_id[] = $data->find('option.0') == 'da' ? $id : null;
    }

    $all_id = array_filter($all_id); // чистим массив от пустоты

  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#10 axeld

axeld

Отправлено 27 February 2016 - 09:50

Я примерно так делал

 

 

  1. if ($element = $item->getElement('fc498cea-a276-4ce7-9719-50526c5742d7')) {
  2. $data = $zoo->data->create($element->data());
  3. $all_id[] = $data->find('option.0') == 'da' ? $id : null;
  4. }
  5.  
  6. $all_id = array_filter($all_id); // чистим массив от пустоты
  7.  

Fatal error: Call to a member function getElement() on a non-object in ....


Сообщение отредактировал axeld: 27 February 2016 - 10:31

  • 0




Click to return to top of page in style!