Помощник
|
Патч ядра Joomla! 1.5x, есть ли функция для записи в существующий файл PHP |
toorr2p
|
Сообщение
#1
|
||
|
|
||
|
|||
sc2r2bey |
3.10.2009, 19:41;
Ответить: sc2r2bey
Сообщение
#2
|
|
никак только ручками
-------------------- программирую web и для we |
|
|
toorr2p
|
Сообщение
#3
|
|
Ручками то и пытаюсь сделаь)) только нужно чтоб это срабатывало именно при инсталляции/деинсталляции тк не каждый кто будет этот компонент ставить сможет в нужном месте подправить код :)
проблема в том как правильно в файле найти определенную строку по маске и потом ПОСЛЕ ЭТОЙ СТРОКИ вставить свой код, а в дальнейшем и удалить такимже способом при UNINSTALL Вот с помощью функции fopen я открываю нужный фал на чтение затем в цикле (до того как в файл не закончится) с помощью функции fgets считываю построчно все символы (5 500) и заношу все это дело в переменную $subject, затем создаю "маску" по которой в тексте(который в переменной) буду искать соответствие. Но вот чтото я нетак зписал или не так это использую, короче выводит Вхождение не найдено. гдеж я ошибся то? :'( [php]<?php $fp = fopen("icon.php", "r"); // Открываем файл в режиме чтения if ($fp) { while (!feof($fp)) { $subject = fgets($fp, 5500); $pattern = "/\b<?php\b/i"; //echo $mytext."<br />"; if (preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3)) { echo "Вхождение найдено."; } else { echo "Вхождение не найдено."; } } } else echo "Ошибка при открытии файла"; fclose($fp); ?>[/php] |
|
|
ZiTosS |
6.10.2009, 19:49;
Ответить: ZiTosS
Сообщение
#4
|
|
Вячеслав, Обычно системы подобного уровня разрабатываются так, что вносить изменения в ядро не приходится, нужно только в правильном направлении копнуть. Возможно нужно просто поменять состояние объекта, переменной. Вот в этом направлении надо копать, найти, что и где нужно вставить в компонент, чтобы изменить уже существующее состояние ядра. Для подобных ухищрений нужно досконально изучить движок, чтобы знать все тонкости организации и формирования данных, а так же сборку(связку) с компонентами модулями и плагинами.
|
|
|
toorr2p
|
Сообщение
#5
|
|
Задача сводится к тому чтобы добавить в файл icon.php свой код при установке собственного расширения(компонента), и удалении этого кода при деинсталляции. Понятно что легче и правилнее* поменять значение переменной, но здесь немного не та ситуация(наверно...). Так вот, в файле icon.php находится класс class JHTMLIcon который содержит методы по формированию иконок-ссылок, с нужными параметрами - url, id, cat window.open... И нужно просто расширить этот класс, но расширить извне* тоесть из другого компонента не получалось (этого класса на видно из нашего компонента). Поэтому было решено использовать функции открытия файла
[php]$file = file("icon.php"); // Считываем весь файл в массив[/php] И функции замены [php]preg_replace($pattern, $replacement, $string)[/php] С помощью первой считываем все содержимое файла в массив, затем все его элементы склеиваем с помощью функции: [php]$string = implode("", $file); //Склеиваем массив - элементы в одну строку[/php] И далее с помощью preg_replace осуществляем поиск по этой строке, находим тужную часть кода с помощью регулярного выражения: [php]$pattern = "/(?<=\})[\s*]*(?=\})/"; //Условие поиска[/php] (?<=\}) - это Ретроспективная проверка - проверка слева, то что должно быть слева от искомой области в строке(после знака "=" предполагаемый текст или символ(в данном примере это \} которую экранируем обратным слешем. Тоесть с помощью этой части условия мы находимзакрывающью скобку последнего метода нашего класса. Далее указываем что идет после тоесть справа - (?=\}) - Опережающая проверка Это мы определили закрывающую скобку нашего класса И указываем то что должно идти между этими проверками - [\s*]* - сколько угодно пробелов и минимум 1. Далее указываем что будем вставлять: [php]$replacement = "//PDF TO EMAIL___START ................. //PDF TO EMAIL___END";[/php] Ну и также точно для того чтобы потом это удалить, да и чтобы удальть нужно перед\после вставляемым кодом поставить указатели //PDF TO EMAIL___START ................. //PDF TO EMAIL___END по которым потом будит осуществлятся поиск и удаления(замена на пробел).Ниже код icon.php, index.php(который вставляет код), index_preg_replace.php(который удалят код): [php]<?php /** * @version $Id: icon.php 10381 2008-06-01 03:35:53Z pasamio $ * @package Joomla * @subpackage Content * @copyright Copyright © 2005 - 2008 Open Source Matters. All rights reserved. * @license GNU/GPL, see LICENSE.php * Joomla! is free software. This version may have been modified pursuant to the * GNU General Public License, and as distributed it includes or is derivative * of works licensed under the GNU General Public License or other free or open * source software licenses. See COPYRIGHT.php for copyright notices and * details. */ // no direct access defined('_JEXEC') or die('Restricted access'); /** * Content Component HTML Helper * * @static * @package Joomla * @subpackage Content * @since 1.5 */ class JHTMLIcon { function create($article, $params, $access, $attribs = array()) { $url = 'index.php?task=new&id=0§ionid='.$article->sectionid; if ($params->get('show_icons')) { $text = JHTML::_('image.site', 'new.png', '/images/M_images/', NULL, NULL, JText::_('New') ); } else { $text = JText::_('New').' '; } $attribs = array( 'title' => JText::_( 'New' )); return JHTML::_('link', JRoute::_($url), $text, $attribs); } function pdf($article, $params, $access, $attribs = array()) { $url = 'index.php?view=article'; $url .= @$article->catslug ? '&catid='.$article->catslug : ''; $url .= '&id='.$article->slug.'&format=pdf'; $status = 'status=no,toolbar=no,scrollbars=yes,titlebar=no,menubar=no,resizable=yes,wid th=640,height=480,directories=no,location=no'; // checks template image directory for image, if non found default are loaded if ($params->get('show_icons')) { $text = JHTML::_('image.site', 'pdf_button.png', '/images/M_images/', NULL, NULL, JText::_('PDF')); } else { $text = JText::_('PDF').' '; } $attribs['title'] = JText::_( 'PDF' ); $attribs['onclick'] = "window.open(this.href,'win2','".$status."'); return false;"; $attribs['rel'] = 'nofollow'; return JHTML::_('link', JRoute::_($url), $text, $attribs); } function email($article, $params, $access, $attribs = array()) { //$link = JURI::base()."index.php?view=article&id=".$article->slug; $uri =& JURI::getInstance(); $base = $uri->toString( array('scheme', 'host', 'port')); $link = $base.JRoute::_( "index.php?view=article&id=".$article->slug, false ); $url = 'index.php?option=com_mailto&tmpl=component&link='.base64_encode( $link ); $status = 'width=400,height=300,menubar=yes,resizable=yes'; if ($params->get('show_icons')) { $text = JHTML::_('image.site', 'emailButton.png', '/images/M_images/', NULL, NULL, JText::_('Email')); } else { $text = ' '.JText::_('Email'); } $attribs['title'] = JText::_( 'Email' ); $attribs['onclick'] = "window.open(this.href,'win2','".$status."'); return false;"; $output = JHTML::_('link', JRoute::_($url), $text, $attribs); return $output; } function edit($article, $params, $access, $attribs = array()) { $user =& JFactory::getUser(); if ($params->get('popup')) { return; } if ($article->state < 0) { return; } if (!$access->canEdit && !($access->canEditOwn && $article->created_by == $user->get('id'))) { return; } JHTML::_('behavior.tooltip'); $url = 'index.php?view=article&id='.$article->slug.'&task=edit'; $icon = $article->state ? 'edit.png' : 'edit_unpublished.png'; $text = JHTML::_('image.site', $icon, '/images/M_images/', NULL, NULL, JText::_('Edit')); if ($article->state == 0) { $overlib = JText::_('Unpublished'); } else { $overlib = JText::_('Published'); } $date = JHTML::_('date', $article->created); $author = $article->created_by_alias ? $article->created_by_alias : $article->author; $overlib .= '<br />'; $overlib .= JText::_($article->groups); $overlib .= '<br />'; $overlib .= $date; $overlib .= '<br />'; $overlib .= $author; $button = JHTML::_('link', JRoute::_($url), $text); $output = '<span class="hasTip" title="'.JText::_( 'Edit Item' ).' :: '.$overlib.'">'.$button.'</span>'; return $output; } function print_popup($article, $params, $access, $attribs = array()) { $url = 'index.php?view=article'; $url .= @$article->catslug ? '&catid='.$article->catslug : ''; $url .= '&id='.$article->slug.'&tmpl=component&print=1&page='.@ $request->limitstart; $status = 'status=no,toolbar=no,scrollbars=yes,titlebar=no,menubar=no,resizable=yes,wid th=640,height=480,directories=no,location=no'; // checks template image directory for image, if non found default are loaded if ( $params->get( 'show_icons' ) ) { $text = JHTML::_('image.site', 'printButton.png', '/images/M_images/', NULL, NULL, JText::_( 'Print' ) ); } else { $text = JText::_( 'ICON_SEP' ) .' '. JText::_( 'Print' ) .' '. JText::_( 'ICON_SEP' ); } $attribs['title'] = JText::_( 'Print' ); $attribs['onclick'] = "window.open(this.href,'win2','".$status."'); return false;"; return JHTML::_('link', JRoute::_($url), $text, $attribs); } function print_screen($article, $params, $access, $attribs = array()) { // checks template image directory for image, if non found default are loaded if ( $params->get( 'show_icons' ) ) { $text = JHTML::_('image.site', 'printButton.png', '/images/M_images/', NULL, NULL, JText::_( 'Print' ) ); } else { $text = JText::_( 'ICON_SEP' ) .' '. JText::_( 'Print' ) .' '. JText::_( 'ICON_SEP' ); } return '<a href="#" onclick="window.print();return false;">'.$text.'</a>'; } }][/php] [php]<?php echo "Вставка"; $file = file("icon.php"); // Считываем весь файл в массив $string = implode("", $file); //Склеиваем массив - элементы в одну строку $pattern = "/(?<=\})[\s*]*(?=\})/"; //Условие поиска $replacement = "//PDF TO EMAIL___START function\spdf2email\(\$article\,\s\$params\,\s\$access\,\s\$attribs\s\=\sarray\(\)\) { $url = 'index.php?view=article'; $url .= @$article->catslug ? '&catid='.$article->catslug : ''; $url .= '&id='.$article->slug.'&format=pdf'; $status = 'status=no,toolbar=no,scrollbars=yes,titlebar=no,menubar=no,resizable=yes,wid th=640,height=480,directories=no,location=no'; // checks template image directory for image, if non found default are loaded if ($params->get('show_icons')) { $text = JHTML::_('image.site', 'pdf_button.png', '/images/M_images/', NULL, NULL, JText::_('PDF')); } else { $text = JText::_('PDF').' '; } $attribs['title'] = JText::_( 'PDF' ); $attribs['onclick'] = \"window.open(this.href,'win2','\".$status.\"'); return false;\"; $attribs['rel'] = 'nofollow'; return JHTML::_('link', JRoute::_($url), $text, $attribs); } //PDF TO EMAIL___END "; if($result = preg_replace($pattern, $replacement, $string)){ $fp = fopen("icon.php", "w"); //Создаем новый файл и удаляем существующий fputs($fp, $result); //Записываем пустой файл fclose($fp); //Закрываем файл echo "строка ".$pattern." добавлена в файл"; }else{ echo"Error"; } ?>[/php] [php]<?php $file = file("icon.php"); $string = implode("", $file); $pattern = "/(?<=START)[.\W\d\D\s*]*(?=\/\/PDF TO EMAIL___END)/"; $replacement = " "; if($result = preg_replace($pattern, $replacement, $string)){ $fp = fopen("icon.php", "w"); fputs($fp, $result); fclose($fp); echo "строка ".$pattern." удалена"; }else{ echo"Error"; } ?>[/php] Посоветуйте может чтото можно сделать более универсальней?
Прикрепленные файлы
index.php ( 1,5 килобайт )
Кол-во скачиваний: 89
index_preg_replace.php ( 379 байт ) Кол-во скачиваний: 87 icon.php ( 5,59 килобайт ) Кол-во скачиваний: 91 |
|
|
ZiTosS |
11.10.2009, 12:29;
Ответить: ZiTosS
Сообщение
#6
|
|
|
Вячеслав, для подобных вещей пишут плагины, Как раз ты заменишь сформированное ядром, своим кодом. Просто надо будет создать класс основанный на JHTMLIcon, переписать функции которые нужно, и вызвать с помощью обработчика.
http://kjoomla.com/station/34-joomla/70-pluginsjoomla.html Вообще тебе нужно написать плагин типа Content
|
|
|
||
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Разработка сайтов Joomla Wordpress Opencart Разработка, верстка, оптимизация веб сайтов. |
77 | WoWeb | 40301 | 3.9.2023, 16:52 автор: Sawich |
|
[Продам] базы сайтов на CMS Wordpress/Joomla/Drupal/Magento/... | 14 | phosphoruss | 13674 | 16.8.2023, 15:27 автор: SmmPanelUS |
|
Техподдержка сайтов на движках Joomla, Netcat, Opencart | 5 | 54web | 4260 | 22.1.2023, 13:27 автор: kikimora17 |
|
Заказать Копирайтинг | Проработка Семантического ядра | Составление ТЗ | 0 | yehCANA | 923 | 19.9.2022, 18:33 автор: yehCANA |
|
Готовые семантические ядра по разным тематикам Готовые семантические ядра по разным тематикам |
0 | NewSeoDay | 1421 | 13.12.2021, 23:48 автор: NewSeoDay |
Текстовая версия | Сейчас: 29.3.2024, 17:57 |