Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Demolution
1 / 1 / 0
Регистрация: 10.04.2011
Сообщений: 34
#1

Определение модулей в движке

09.12.2012, 19:09. Просмотров 630. Ответов 19
Метки нет (Все метки)

Здравствуйте. Ковыряюсь в движке онлайн-магазина "Rubic", и в нем в основном все на php, дошел до определенного момента и появилась потребность выводить кусок кода, при условии что некоторые боксы заполнены.

Боксы проверяются вот так:
PHP
1
2
3
4
5
6
7
if ($osC_Template->hasPageContentModules()) {
                  
                  foreach ($osC_Template->getContentModules('before') as $box) {
                     $osC_Box = new $box();
                     $osC_Box->initialize();
                     
                     if ($osC_Box->hasContent()) {
И дальше идет нужный код. Таких боксов два - "before" и "after". Информация может быть в одном из них, или в обоих. Если информации в них нет, код выводить не нужно. Я мучаюсь уже целый день, и не пойму почему не получается, не могу добиться чтобы проверяло второй бокс, только первый. Вот вроде рабочая конструкция, но else почему-то не работает
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
if ($osC_Template->hasPageContentModules()) {
                  
                  foreach ($osC_Template->getContentModules('before') as $box) {
                     $osC_Box = new $box();
                     $osC_Box->initialize();
                     
                     if ($osC_Box->hasContent()) {
                     
                     echo '1: before';
                     
                     }
                     else {
                           unset($osC_Box);
                           unset($box);
                           
                           foreach ($osC_Template->getContentModules('after') as $box) {
                           $osC_Box = new $box();
                           $osC_Box->initialize();
 
                           if ($osC_Box->hasContent()) {
                     
                           echo '2: after';
                     
                           }
 
                           }
                  
                     }
                     unset($osC_Box);
                  }
               }
В таком варианте if срабатывает, а else не хочет. Подскажите в чем проблема, где моя ошибка?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2012, 19:09
Ответы с готовыми решениями:

IF ELSE в движке phpFOX
С Новым Годом! Банальный вопрос... В движке phpFOX 3.8.0 встречаются условия...

Ошибки при движке codeigniter
Написал я программу Hello Word вот код Controllers: <?php class Hello...

в движке в файлах .htm специальный код
{if $module_data.PRODUCTS_VPE} <dd class="itemDescription">...

Грамотная файловая структура на своем движке
Друзья подскажите, как правильно организовать структуру файлов и подключение их...

Не могу разобраться, в чём ошибка в движке
Добрый день, уважаемые кодеры! Вопрос вот в чём, есть сайт, движок самопис,...

19
alpex
600 / 575 / 103
Регистрация: 16.07.2012
Сообщений: 1,761
09.12.2012, 19:12 #2
хм ну так else выполняется только в том случае когда if не выполнилось
0
Demolution
1 / 1 / 0
Регистрация: 10.04.2011
Сообщений: 34
09.12.2012, 19:23  [ТС] #3
Цитата Сообщение от alpex Посмотреть сообщение
хм ну так else выполняется только в том случае когда if не выполнилось
блок "before" заполнен только на одной странице.. Оно как бы или выводит первое, или вообще ничего не показывает. Ну для примера, если сделать вот так:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
if ($osC_Template->hasPageContentModules()) {
                        
                        foreach ($osC_Template->getContentModules('before') as $box) {
                            $osC_Box = new $box();
                            $osC_Box->initialize();
                            
                            if ($osC_Box->hasContent()) {
                            
                            echo '1: before';
                            
                            }
                            
                            }
                        unset($osC_Box);
                        
                        foreach ($osC_Template->getContentModules('after') as $box) {
                            $osC_Box = new $box();
                            $osC_Box->initialize();
                            
                            if ($osC_Box->hasContent()) {
                            
                            echo '2: after';
                            
                            } 
                            }
                            unset($osC_Box);
                        }
То они будут выводится поочередно на каждой странице, и только на одной будут выводится оба.. Тоесть мне нужно подхватить, заполнен ли он, и выводить код один раз
0
alpex
600 / 575 / 103
Регистрация: 16.07.2012
Сообщений: 1,761
09.12.2012, 19:32 #4
сорри но я в этом движке ничего не понимаю, просто видимо неправильно понял вопрос

Добавлено через 1 минуту
этот метод hasContent() возвращает контент или что(null, false)??
0
Demolution
1 / 1 / 0
Регистрация: 10.04.2011
Сообщений: 34
09.12.2012, 19:33  [ТС] #5
Цитата Сообщение от alpex Посмотреть сообщение
сорри но я в этом движке ничего не понимаю, просто видимо неправильно понял вопрос
Та тут не в движке думаю дело, с логикой у меня не получается. А по поводу вопроса, уточню, есть два блока, если хоть в одном из них есть инфа, нужно вывести определенный код..
0
alpex
600 / 575 / 103
Регистрация: 16.07.2012
Сообщений: 1,761
09.12.2012, 19:38 #6
Цитата Сообщение от alpex Посмотреть сообщение
этот метод hasContent() возвращает контент или что(null, false)??
так что возвращается если контента нет
0
Demolution
1 / 1 / 0
Регистрация: 10.04.2011
Сообщений: 34
09.12.2012, 19:38  [ТС] #7
Цитата Сообщение от alpex Посмотреть сообщение
этот метод hasContent() возвращает контент или что(null, false)??
ммм.. сложный вопрос для меня.. нашел вот только:
PHP
1
2
3
4
5
6
7
8
9
/**
 * Checks to see if the message stack contains messages
 *
 * @access public
 */
 
    public function hasContent() {
      return !empty($this->_data);
    }
а выше
PHP
1
2
3
4
5
6
7
8
/**
 * A reference to the messages stored in the session messageToStack variable
 *
 * @var array
 * @access private
 */
 
    private $_data = array();
массив, если я правильно понимаю..
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16750 / 6641 / 864
Регистрация: 12.06.2012
Сообщений: 19,892
Завершенные тесты: 1
09.12.2012, 19:45 #8
Цитата Сообщение от Demolution Посмотреть сообщение
нашел вот только:
это оно и есть. возвращает true, если не пустой, иначе возвращает false.

Добавлено через 2 минуты
что именно требуется - я лично не понял..
0
Demolution
1 / 1 / 0
Регистрация: 10.04.2011
Сообщений: 34
09.12.2012, 19:45  [ТС] #9
Цитата Сообщение от KOPOJI Посмотреть сообщение
это оно и есть. возвращает true, если не пустой, иначе возвращает false.
это должно быть что-то вроде
PHP
1
if ($osC_Box->hasContent() == 'true')
верно?
0
alpex
600 / 575 / 103
Регистрация: 16.07.2012
Сообщений: 1,761
09.12.2012, 19:46 #10
а вот этот метод покажите еще $osC_Template->getContentModules
0
Demolution
1 / 1 / 0
Регистрация: 10.04.2011
Сообщений: 34
09.12.2012, 19:46  [ТС] #11
Цитата Сообщение от KOPOJI Посмотреть сообщение
что именно требуется - я лично не понял..
Эхх... Есть два блока, которые идут один за другим, мне нужно перед первым (так как на разных страницах будет заполнен один из них), вывести код (html), но только один раз, не перед каждым, а именно перед первым..
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16750 / 6641 / 864
Регистрация: 12.06.2012
Сообщений: 19,892
Завершенные тесты: 1
09.12.2012, 19:47 #12
Цитата Сообщение от Demolution Посмотреть сообщение
верно?
нет. условие там верное.
0
Demolution
1 / 1 / 0
Регистрация: 10.04.2011
Сообщений: 34
09.12.2012, 19:47  [ТС] #13
Цитата Сообщение от alpex Посмотреть сообщение
а вот этот метод покажите еще $osC_Template->getContentModules
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
 * Return the content modules assigned to the page
 *
 * @param string $group The group name of content modules to include that the template has provided
 * @return array
 */
 
    function getContentModules($group) {
      if (isset($this->osC_Modules_Content) === false) {
        $this->osC_Modules_Content = new osC_Modules('content');
      }
 
      return $this->osC_Modules_Content->getGroup($group);
    }
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16750 / 6641 / 864
Регистрация: 12.06.2012
Сообщений: 19,892
Завершенные тесты: 1
09.12.2012, 19:49 #14
а такой вариант не подойдет?
PHP
1
2
3
4
5
6
7
$status = false;
 
.........
if(!$status) {
//выводим текст
$status = true;
}
0
alpex
600 / 575 / 103
Регистрация: 16.07.2012
Сообщений: 1,761
09.12.2012, 19:49 #15
PHP
1
2
3
4
5
6
7
if ($osC_Template->hasPageContentModules()) {
    echo '<pre>';
    var_dump ($osC_Template->getContentModules('before'));
    echo '<hr />';
    var_dump ($osC_Template->getContentModules('after'));
    echo '</pre>';
}
покажите что этот код выведет
0
Demolution
1 / 1 / 0
Регистрация: 10.04.2011
Сообщений: 34
09.12.2012, 19:52  [ТС] #16
Цитата Сообщение от alpex Посмотреть сообщение
покажите что этот код выведет
HTML5
1
2
3
4
5
6
7
8
9
<pre>array(0) {
}
<hr />array(2) {
  [0]=>
  string(28) "osC_Content_popular_products"
  [1]=>
  string(28) "osC_Content_recently_visited"
}
</pre>
а там где оба, вот:
HTML5
1
2
3
4
5
6
7
8
9
10
11
<pre>array(1) {
  [0]=>
  string(26) "osC_Content_checkout_trail"
}
<hr />array(2) {
  [0]=>
  string(28) "osC_Content_popular_products"
  [1]=>
  string(28) "osC_Content_recently_visited"
}
</pre>
Добавлено через 49 секунд
Цитата Сообщение от KOPOJI Посмотреть сообщение
а такой вариант не подойдет?
увы, но я не понимать что с этим делать
0
alpex
600 / 575 / 103
Регистрация: 16.07.2012
Сообщений: 1,761
09.12.2012, 20:02 #17
Добавлено через 5 минут
ну смотрите у вас foreach с before охватывает полностью весь код, возвращается только одна ячейка массива, тоесть и цикл будет иметь 1 проход
0
Demolution
1 / 1 / 0
Регистрация: 10.04.2011
Сообщений: 34
09.12.2012, 20:05  [ТС] #18
Цитата Сообщение от alpex Посмотреть сообщение
ну смотрите у вас foreach с before охватывает полностью весь код, возвращается только одна ячейка массива, тоесть и цикл будет иметь 1 проход
блин, как же тут организовать проверку..?
0
alpex
600 / 575 / 103
Регистрация: 16.07.2012
Сообщений: 1,761
09.12.2012, 20:08 #19
надо смотреть по структуре, сорри мне уходить нужно
1
Demolution
1 / 1 / 0
Регистрация: 10.04.2011
Сообщений: 34
09.12.2012, 22:42  [ТС] #20
Сделал наверное самым глупым методом, которым только можно было, но вроде работает..
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
if ($osC_Template->hasPageContentModules()) {
                        
                        $test_content = 0;
                        
                        foreach ($osC_Template->getContentModules('before') as $box) {
                            $osC_Box = new $box();
                            $osC_Box->initialize();
                            
                            if ($osC_Box->hasContent()) {
                            
                            //echo '1: before';
                            $test_content = 1;
                            
                            }
                            
                            }
                        unset($osC_Box);
                    
                        
                        foreach ($osC_Template->getContentModules('after') as $box) {
                            $osC_Box = new $box();
                            $osC_Box->initialize();
                            
                            if ($osC_Box->hasContent()) {
                            
                            //echo '2: after';
                            $test_content = 1;
                            
                            } 
                            }
                            unset($osC_Box);
                            
                        if ($test_content == 1) {
                        echo 'test_content = 1';
                        }
                        }
Добавлено через 2 часа 24 минуты
хм.. иногда проскакивает, и не отображает нужный код, после обновления возвращается, может кто подскажет лучше метод?
0
09.12.2012, 22:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.12.2012, 22:42

Не могу разобраться с косяками в движке доски объявлений
Есть движок сайта объявлений, вроде все хорошо. Для каждого города с админки...

Как сделать работу PHP на движке DLE
Всем привет, недавно столкнулся с трудностями, короче говоря, на DLE написал...

не работает САБ(система альянсового боя)в движке ogame
Здравствуйте! У меня проблема такая. Есть игра vgames.kz (не сочтите за...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru