2014-09-26 3 views
2

Вот мой вопрос У меня есть класс ABC и функция XYZ, определенная внутри него, и эта функция возвращает что-то, основанное на указанной выше логике.изменить тело оператора if на основании его условия

class ABC { 
function XYZ{ 
.......... 
....... 
return "--- "; 
} 
} 

Теперь на другой странице этого класса есть объект, который вызывает этот метод.

$z= new ABC; 

if($z->XYZ()) 
{ 
some output 
} 
else{ 
another output 
} 

Моя проблема в том, я не имею доступа к стр.2, но мне нужно изменить вывод еще заявления. У меня есть только доступ к классу ABC, потому что я переопределяю его в модуле. поэтому, короче говоря, я могу только изменить функцию XYZ. Какое решение??

Если его никакого значения, я работаю на Magento электронной коммерции платформы и класс является классом блок и страница 2 представляет собой шаблон

+3

Похоже, нет никакого решения, кроме редактирования Page2. –

+0

@u_mulder да. но я не могу, потому что мне нужно сделать расширение, и у каждого пурпурного есть разные шаблоны. Я могу только переопределять основные классы, но не могу переопределить шаблон темы, даже если захочу. – sunny

+0

Даже страницы шаблонов могут быть переоценены, но в этом случае я не могу этого сделать. Я хочу, чтобы страница пользователя работала так, как есть, за исключением того, что еще часть – sunny

ответ

3

Вы можете изменить выходной html с помощью наблюдателя с событием http_response_send_before.

Захватите html и сделайте свой материал.

У вас есть хорошее объяснение here

Я надеюсь, что это может помочь вам

+0

Я искал что-то вроде этого! благодаря! – sunny

-1

Если вы совершенно безопасны, что метод используется во всех шаблонах, вы overide он, но если он используется только в определенном шаблоне, вы должны расширить класс, чтобы создать новый метод для применения к нему шаблона.

0

Вам нужен способ дифференцировать PAGE1 со страницы PAGE2, допустим по URL-адресу, если это возможно. Поэтому вам придется изменить свой метод, который будет проверять, на какой странице в настоящее время и в соответствии с ним, он изменит результат, но вы должны написать вывод в самом методе, а не записывать его в шаблон. class ABC { function XYZ { $result = $this->getResult(); //Helper method to get the result. if ($result) { //Do something when result is true. } else { $url = $this->checkUrl(); //Check URL of the page. if ($url == PAGE2) { //If you are on PAGE2 //Do something specific for the PAGE2 } else { //Do something for all other pages } } } } Я знаю, что это не идеальное решение, но я надеюсь, что это как-то поможет вам.

+0

Это не сработает, потому что «еще один вывод» по-прежнему будет удален второй страницей ... – Peter

+0

Вот почему я упомянул, что ему нужно написать вывод в самом методе и вызвать метод в шаблоне, не делая if/else логика: $ z-> XYZ(); – zokibtmkd

+0

Но логика if/else не исчезнет ... Это его проблема! – Peter

-2

Номер страницы должен быть определен где-то в $_GET или $_POST массива (или в другом запросе). Проверьте эту переменную и реализуйте альтернативную логику.

1


вы также можете сделать следующим образом:

<?php 
ob_start(); 
// do your stuff 
// ... 

// here you capture all the output that it is generated by your scripts 
$v = ob_get_contents(); 

// alter the value of $v by detecting if it should be changed. you can user regex for example to 
// detect and update 
// ... 
// here you clean all data stored in buffer 
ob_clean(); 
// and put the updated data in buffer 
print $v; 

// end of buffer operations 
ob_end_flush(); 

?> 

надеюсь, что это помогает,

Смежные вопросы