Как добавить Javascript ссылку на HTML при рендеринге объекта PHP?

0

Мы используем много PHP-модулей здесь для создания объектов, которые используются для создания наших веб-страниц.

У нас есть модули для:

  • Якорь (ahref)
  • кнопка
  • CheckBox
  • Поле со списком
  • DateTime
  • Эл. адрес
  • метка
  • Заметка
  • пароль
  • Телефон
  • Переключатель
  • RichTextArea
  • SubmitButton
  • Текст (TextBox)

Каждый объект преобразуется в HTML для PHP, вызывая метод item render(); однако ни один из модулей не содержит javascript.

Я хочу создать модуль Contact Block, который будет содержать стандартные контактные элементы (имя, адрес, город, штат, телефон, электронная почта, blah-blah-blah).

Я создал файл javascript с синтаксисом jquery для проверки элементов управления в моем блоке контактов, но я не могу получить свой тег, помещенный в HTML раздел.

Есть ли еще способ заставить javascript работать?

public function render() {
  $output = '<script type="text/javascript" src="/lib/js/ContactBlock.js"></script>\n';
  // other code ... $output .= '<fieldset><legend>'.$this->groupName.'</legend>\n';
  return($output);
}

ОБНОВИТЬ:

изъяты во избежание нарушения авторских прав

Это может быть слишком упрощенным, но в основном это превращает HTML в браузер.

Я хочу добавить элементы Contact Block с помощью javascript для проверки полей.

Строка $form = new HTMLForm('Blank Page') создает HTML-страницу с тег уже в нем.

Есть ли способ добавить мой блок контактов с подтверждением javascript, если тег уже закрыт?

ОБНОВЛЕНИЕ 2:

изъяты во избежание нарушения авторских прав

  • 0
    Изменить return на echo ...
  • 0
    Если он не вызывает эту функцию и не возвращает возвращаемое значение
Показать ещё 9 комментариев

2 ответа

1
Лучший ответ

Вот как это сделать.

Сначала создайте этот класс:

<?php

//Named this way so you can make any element tag
class PhpFreeElement extends BasicHTMLEntity {

    private $strong = false;

    public function __construct($tag_type, $element_name) {

        // Set element type
        $this->setElementType( $tag_type );

        // Specify behavior of element value
        $this->entity_value_as_content = true;

        // Specify default attributes
        if ( !empty( $name ) ) {
            $this->attr('name', $element_name);
            $this->attr('id', $element_name);
        }
    }

    public function setAttribute($name, $value)
    {
        $this->attr( $name, $value );
    }


    public function render(){

        // Open element
        $output = "<{$this->getElementType()}{$this->renderAttributes()}";

        //Add the value if any
        $output .= ">{$this->getValue()}";

        // Close element (This is not always correct. Some tags are self closing)
        $output .= "</{$this->getElementType()}>";

        // Return rendered object
        return($output);
    }
}

?>

Затем вы создаете его следующим образом:

//Create script tag
$script = new PhpFreeElement('script', '');

//Set the script source
$script->setAttribute( "src", "/lib/js/ContactBlock.js" );
  • 0
    Интересный подход, и он вписывается в то, что мы используем в настоящее время. Я, конечно, тоже собираюсь попробовать этот метод. Примечание: я собираюсь удалить классы, которые я вставил в разделы Обновления, потому что они могут быть проприетарными. Если это общеизвестная модель PHP , дайте мне знать, и я свяжу ее или назову по имени, чтобы другие теперь знали, как вы достигли этого конечного результата! :)
  • 0
    @ jp2code Можете ли вы пометить это как ответ? Я также проверил бы право собственности этого кода, потому что, если он с открытым исходным кодом или разрешен для публикации здесь (это довольно просто код), было бы полезно понять это.
1

Не зная свою структуру в полной мере, я должен сказать, что вам, вероятно, нужен класс PhpJsScript:

<?php

    class PhpJsScript extends BasicHTMLEntity {

        public function __construct($url) {

            // Set element type
            $this->setElementType('script');

            // Specify behavior of element value
            $this->entity_value_as_content = true;

            // Specify default attributes
            $this->attr('type', 'text/javascript');
            $this->attr('src', $url);
        }

        public function render(){
            // Open element
            $output = "<{$this->getElementType()}{$this->renderAttributes()}";

            // Close element
            $output .= "</{$this->getElementType()}>";

            // Return rendered object
            return($output);
        }
    }

?>

Итак, теперь я думаю, вы можете назвать это с помощью:

$script = new PhpJsScript('/lib/js/ContactBlock.js');
  • 0
    Благодарю. Я собираюсь удалить классы теперь, я боюсь, что они могут быть проприетарными. Если это хорошо известный тип модели, дайте мне знать, и я свяжу это с другими, так что теперь другие будут знать, как вы достигли этого конечного результата! :)
  • 0
    У меня нет названия для него, но я PhpLabel класс PhpLabel чтобы он вместо этого создал правильно сформированный <script>
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню