Joomla 1.5 Проблема с выводом на печать

Тема в разделе "Программирование", создана пользователем resolute, 30.09.2009.

  1. Offline

    resolute Недавно здесь

    Регистрация:
    31.07.2009
    Сообщения:
    38
    Симпатии:
    0
    Пол:
    Мужской
    Возникла проблема с печатью. В материале запросом формируется таблица. Отображается нормально. При нажатии кнопки "Печать". В окне предварительного просмотра отображается только шапка таблицы. =O
    Получается то, что сформировано запросом и выведено в цикле не отображается и не печатается.
    Код (CODE):
    1. $db =& JFactory::getDBO(); //Соединение с Базой данных
    2. $query = "SELECT name, phone, email, dop FROM #__bd_zakaz WHERE tip='$tip' and date='$date'"; // Выполняем запрос к базе данных
    3. $db->setQuery( $query );//Создаем масив из полученных данных
    4. $list = $db->loadAssocList();//Создам список
    5. ?>
    6. <!--Создание таблицы, шапка -->
    7. <table width="675px" border="1" cellpadding="2px">  
    8.             <tr>
    9.                 <td width="25px" align="center"><p>№</p></td>
    10.                 <td width="200px" align="center"><p>Имя</p></td>
    11.                 <td width="70px" align="center"><p>Телефон</p></td>
    12.                 <td width="180px" align="center"><p>Email</p></td>
    13.                 <td width="200px" align="center"><p>Дополнительно</p></td>
    14.             </tr>
    15. <?php            
    16. foreach($list as $value)
    17. {
    18. $n++;
    19. echo "
    20. <tr>
    21.     <td>{$n}</td>
    22.     <td>{$value['name']} </td>
    23.     <td>{$value['phone']}</td>
    24.     <td>{$value['email']}</td>
    25.     <td>{$value['dop']}</td>
    26. </tr>";
    27. }
    28. ?>
    29. </table>

    Во вложенном файле скриншот.
     

    Вложения:

    • 1.jpg
      1.jpg
      Размер файла:
      90.5 КБ
      Просмотров:
      18
  2.  
  3. Dead Krolik
    Offline

    Dead Krolik Недавно здесь => Cпециалист <=

    Регистрация:
    13.04.2007
    Сообщения:
    3 685
    Симпатии:
    101
    Пол:
    Мужской
    А как она формируется мы угадывать должны?

    Возможно тема должна быть в разделе Программирование?
     
  4. Offline

    resolute Недавно здесь

    Регистрация:
    31.07.2009
    Сообщения:
    38
    Симпатии:
    0
    Пол:
    Мужской
    Тему перенес в раздел "Программирование".
    Я же вроде бы написал как формируется таблица. Через форму передаются параметры запроса. Обработчик обрабатывает: делает выборку из базы, формирует и выводит таблицу с данными. Проблем с отображением нет. Пытаюсь распечатать через стандартную кнопочку материала "Печать". На скриншоте видно, что обработчик сформировал таблицу нормально: все строки таблицы отображаются. А на предварительном просмотре печати: выводится только шапка - первая строка. Я думал, то что уже отображено в материале должно печататься без проблем. Или я не прав, и данные нужно как-то подготавливать к печати? Если что-то нужно уточнить, или расписать более подробно, скажите я напишу.
     
  5. Dead Krolik
    Offline

    Dead Krolik Недавно здесь => Cпециалист <=

    Регистрация:
    13.04.2007
    Сообщения:
    3 685
    Симпатии:
    101
    Пол:
    Мужской
    Хорошо. Тогда что есть "Обработчик" в твоем случае. Только без мистики.
     
  6. Offline

    resolute Недавно здесь

    Регистрация:
    31.07.2009
    Сообщения:
    38
    Симпатии:
    0
    Пол:
    Мужской
    Хмм, начнём сначала по порядку.:ok: |/|
    Есть материал "Форма вывода заказов" в котором через:
    Код (CODE):
    1. {rdaddphp file=form2.php}

    Вызывается мой рукотворный скрипт.
    Привожу код form2.php:
    Код (html):
    1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    2. <html>
    3. <head>
    4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    5. <title>Выборка</title>
    6. </head>
    7.  
    8. <body>
    9. <form action="index.php?option=com_content&view=article&id=26&Itemid=24" method="post">
    10. <p>Выберите тип конструкции:<br><select name="tip" size="1">
    11.                         <option>Пластиковые окна</option>
    12.                                                 <option>Деревянные окна</option>
    13.                                                 <option>Алюминиевые окна</option>
    14.                         </select></p>
    15. <p>Укажите дату заявки:<br>
    16. <?php JHTML::_('behavior.calendar');
    17. echo JHTML::_('calendar', $cal_var, 'cal_var', 'cal_var', '%Y-%m-%d', array('class'=>'inputbox', 'size'=>'25',  'maxlength'=>'19')); ?>
    18. </p>
    19. <input name="submit" type="submit" value="Выбрать">
    20. </form>
    21. </body>
    22. </html>

    Есть другой материал "Просмотр заказов", который выше у упоминал как ОБРАБОТЧИК :X, в котором аналагично через:
    Код (CODE):
    1. {rdaddphp file=select.php}

    Привожу select.php:
    Код (PHP):
    1. <?php
    2. // прямой доступ запрещен
    3. defined ('_JEXEC') or die ('Restricted access');
    4.  
    5. //Получение переменных
    6. $tip = JRequest::getVar('tip');
    7. $date = JRequest::getVar('cal_var');
    8.  
    9. /* echo $tip;
    10. echo $date; */
    11.    
    12. $db =& JFactory::getDBO(); //Соединение с Базой данных
    13. $query = "SELECT name, phone, email, dop FROM #__bd_zakaz WHERE tip='$tip' and date='$date'"; // Выполняем запрос к базе данных
    14. $db->setQuery( $query );//Создаем масив из полученных данных
    15. $list = $db->loadAssocList();//Создам список
    16. ?>
    17. <!--Создание таблицы, шапка -->
    18. <table width="675px" border="1" cellpadding="2px">  
    19.             <tr>
    20.                 <td width="25px" align="center"><p>№</p></td>
    21.                 <td width="200px" align="center"><p>Имя</p></td>
    22.                 <td width="70px" align="center"><p>Телефон</p></td>
    23.                 <td width="180px" align="center"><p>Email</p></td>
    24.                 <td width="200px" align="center"><p>Дополнительно</p></td>
    25.             </tr>
    26. <?php            
    27. foreach($list as $value)
    28. {
    29. $n++;
    30. echo "
    31. <tr>
    32.     <td>{$n}</td>
    33.     <td>{$value['name']} </td>
    34.     <td>{$value['phone']}</td>
    35.     <td>{$value['email']}</td>
    36.     <td>{$value['dop']}</td>
    37. </tr>";
    38. }
    39. ?>
    40. </table>

    Результат работы выше изложенного никаких ошибок не выдает. Данные с формы передаются в ОБРАБОТЧИК select.php. Тот делает выборку и выводит таблицу с данными. Но на печать выводится только шапка таблицы.
     
  7. Dead Krolik
    Offline

    Dead Krolik Недавно здесь => Cпециалист <=

    Регистрация:
    13.04.2007
    Сообщения:
    3 685
    Симпатии:
    101
    Пол:
    Мужской
    Тэкс. А если это дело зафигачить в виде мамбота? Ну чисто как попытка.
     
  8. Offline

    resolute Недавно здесь

    Регистрация:
    31.07.2009
    Сообщения:
    38
    Симпатии:
    0
    Пол:
    Мужской
    Сейчас попробовал распечатать так:
    Код (html):
    1. <a href="javascript:print('');void(0)">Печать</a>

    Всё распечаталось! И таблица и все данные и весь сайт целиком!!! :D
    Можно сделать что-бы печаталась только моя зловредная табличка? %)
     
  9. Dead Krolik
    Offline

    Dead Krolik Недавно здесь => Cпециалист <=

    Регистрация:
    13.04.2007
    Сообщения:
    3 685
    Симпатии:
    101
    Пол:
    Мужской
  10. Offline

    resolute Недавно здесь

    Регистрация:
    31.07.2009
    Сообщения:
    38
    Симпатии:
    0
    Пол:
    Мужской
    Код (CODE):
    1. JavaScript - Printing part of page.
    2. Danish Shaikh replied to Mohit tiwari at 05-май-08 02:32
    3. Use <DIV> to enclose ur grid.
    4. e.g.:
    5.  
    6. <div id="areaToPrint">
    7. ur grid inside in this tag
    8. </div>
    9.  
    10. then add javascript to ur page to print ur grid :
    11.  
    12. <script>
    13. function printDiv()
    14. {
    15.    var divToPrint=document.getEelementById('areaToPrint');
    16.   newWin= window.open("");
    17.   newWin.document.write(divToPrint.outerHTML);
    18.   newWin.print();
    19.   newWin.close();
    20. }
    21. </script>


    Если я понял, то нужный участок мне нужно заключит между тегами:

    Код (CODE):
    1. <div id="areaToPrint">
    2. <!--Создание таблицы, шапка -->
    3. <table width="675px" border="1" cellpadding="2px">  
    4.             <tr>
    5.                 <td width="25px" align="center"><p>№</p></td>
    6.                 <td width="200px" align="center"><p>Имя</p></td>
    7.                 <td width="70px" align="center"><p>Телефон</p></td>
    8.                 <td width="180px" align="center"><p>Email</p></td>
    9.                 <td width="200px" align="center"><p>Дополнительно</p></td>
    10.             </tr>
    11. </div>

    А как вызвать данную функцию?
    Код (CODE):
    1. <a href="какой параметр?">Печать</a>
     
  11. Dead Krolik
    Offline

    Dead Krolik Недавно здесь => Cпециалист <=

    Регистрация:
    13.04.2007
    Сообщения:
    3 685
    Симпатии:
    101
    Пол:
    Мужской
  12. Offline

    resolute Недавно здесь

    Регистрация:
    31.07.2009
    Сообщения:
    38
    Симпатии:
    0
    Пол:
    Мужской
    Спасибо хоть на этом! :(
     
  13. Offline

    OlegKor Недавно здесь

    Регистрация:
    02.03.2009
    Сообщения:
    30
    Симпатии:
    0
    Пол:
    Мужской
    resolute,

    Я такое или похожее делаю через PDF. До сих пор меня устраивало "выше крыши" ...
    Сразу не допер, как с ним бороться, но потом покатило как по маслу ...

    Глянь вот на этот топик может и тебе поможет ...
     
  14. Offline

    OlegKor Недавно здесь

    Регистрация:
    02.03.2009
    Сообщения:
    30
    Симпатии:
    0
    Пол:
    Мужской
    resolute,

    При условии, что у тебя Joomla 1.5 (в других версиях не знаю как это сработает), ну и ....
    Чтобы не морочить тебе голову догадками, попробуй сделать следующее:

    1. Создай рядом с твоим view.html.php, файл view.pdf.php (условие обязательное)
    2. Организуй ссылку в шаблоне с указанием типа такого: <a href="<?php echo JRoute::_( 'index.php?option=com_component&view=myview&format =pdf... дальше параметры какие надо. Выделенное красным - обязательно. Это будет гарантировать то, что Джумла будет поднимать твой файл view.pdf.php
    3. В теле файла view.pdf.php пишем такое:

    // Запрещаем прямой доступ
    defined('_JEXEC') or die('Прямой доступ запрещен');
    // Будем наследовать объект View
    require_once JPATH_COMPONENT.DS.'view.php';
    // Если понадобятся данные, нам надо подключить Модель из которой мы их получим. Можно это опустить, если ты будешь формировать свой запрос ...
    require_once JPATH_COMPONENT.DS.'models'.DS.'mymodel.php';

    //Создадим свой View=класс
    class MynamecomponentViewMynamecontroller extends MynamecomponentView
    {
    Здесь все буква в букву как в твоем классе из файла view.html.php, т.е. Имя класса и имя Виева .. так как в твоем view.html.php...

    Дальше имеет значение только две функции:
    1. Дисплей ..
    Например такого содержания, но это не важно, главное чтобы она была и через нее надо отобразить результат ..
    function display( $tpl = null )
    {

    //В ссылке мы передавали (в моем случае) значение ID объекта, тут его прочитаем
    $id = JRequest::getInt('id', 0);

    //Проверяем все ли у нас есть то, что мы ожидаем ...
    if( $id && $this->getLayout() == 'default' ){

    Самый простой способ - это вернуть сюда текст HTML (но только текст а не объект), типа так:

    $this->showTable();

    }

    2. И функция. которая построит твою таблицу и вернет ее в формате HTML
    Дальше давай смастерим функцию в которой обработается приведенный тобой код в этом топике ...

    function showTable() {

    Сюда тычем весь твой код что в твоем примере .. Запрос к базе и все остальное с единственным условием, что всю уже сформированную таблицу тебе надо возвратить в текстовом виде вместе со свсеми тегами ... Что типа такого:
    $db =& JFactory::getDBO(); //Соединение с Базой данных
    $query = "SELECT name, phone ......................... и т.д.

    <!--Создание таблицы, шапка -->
    $tableHtml = '<table width="675px" border="1" cellpadding="2px"> .... трям-трям-трям --- вся сформированная таблица в виде HTML ----- </table>

    До конца ...

    return $tableHtml;

    Если єто возвратиться в чистом формате HTML в функцию display( $tpl = null ) ... Тебе больше ничего делать не прийдется ... В браузере поднимется файл PDF с твоей таблицей .. Короче суть такая, верни HTML с тегами и Джумла все сделает сама ...
    }

    Но наверняка результат не устроит полностью, потмоу что так же будут сформированы и отображены в этом файле вместе с твоей таблицей ... еще и Заголовки и колонтитулы ... Если это не устраивает или хочешь сделать по своему, смотри топик на который я тебя направил выше ...
     
  15. Offline

    Lion2005 Недавно здесь

    Регистрация:
    29.12.2009
    Сообщения:
    8
    Симпатии:
    0
    Пол:
    Мужской
    В шаблоне от IceTheme - Prestige - наблюдаются "кривое" форматирование текста при формировании pdf-файла, предпросмотра на печать и при отправке по e-mail, например, скрин e-mail:

    [​IMG]

    Во-первых, текст отформатирован по правому краю.
    Во-вторых, последние симводы абзаца становятся первыми.

    При формировании pdf-файла рисунок не вмещается, а хочется.

    Помогите, пож-ста, с Joomla начал работать 3 дня назад, практически ничего не знаю. Поиск по форуму результатов не дал.

    CMS Joomla! 1.5.15 Stable
     
  16. Offline

    OlegKor Недавно здесь

    Регистрация:
    02.03.2009
    Сообщения:
    30
    Симпатии:
    0
    Пол:
    Мужской
    2 Lion2005
    Вот это я получил с твоей ссылки при нажатии на кнопку "Отправить по почте" .... :

    [​IMG]

    Ничего не трогая .... Как я увиел, то я бы ничего не трогал, а просто нашел бы и убрал бы ведущие двоеточия .. в лейблах полей .. (очень даже прикольненько смотрится .. вроде бы как так и задумано ...
    Думаю, тут надо проверить файлик в Виеве .. типа print.viev.php

    А вот при формировании PDF верхняя картинка (с той же ссылки) выходит за пределы страницы ...
    Думаю, что надо в этом случае (когда размещаем фото на странице сайта а не просто как фотогаллерея, добавили как есть) готовить картинку (размером) с учетом размера страницы ... Думаю, что PDF берет (просто по ссылке на файл не преобразуя его ... оригинал файла, а не его преобразования) ... Именно ОРИГИНАЛ в материал добавляйте меньше по ширине (чтобы вместился на печатную страницу) ... Думаю что поможет ...

    Тут, я пояснял как сделать собственный формат (измененный от .. по умолчанию) вывода на печать в PDF (в самописном компоненте), а Вы используете стандартные средства Джумлы ...
    Тяжело сказать, что она и как в конкретном слкчае формирует .. Надо рыть в коде .. или приспосабливаться. Попробуйте вставить снимок с оригиналом меньше (предположительно подходящей под страницу) ширины ...
     
    Последнее редактирование: 30.12.2009
  17. Offline

    Lion2005 Недавно здесь

    Регистрация:
    29.12.2009
    Сообщения:
    8
    Симпатии:
    0
    Пол:
    Мужской
    Спасибо, OlegKor, за попытку оказать помощь.

    Гы-гы-гы - больше я никак не могу описать то, что ещё нашёл. Попробуйте вписать в форму отправки ссылки по e-mail какой-нибудь адрес эл. ящика. Вы введете joomla@support.ru, а будете получать сначала "joomla", потом "@joomla", потом "joomla@support", потом ".joomla@support", потом "joomla@support.ru". Вводит в возбу- (вычеркнуто) заблуждение.

    К тому же на эл. ящик никакого сообщения не приходит. Подскажите, есть если стабильные аналоги этих опций сторонних производителей.

    Жду советов, спасибо.
     
    Последнее редактирование: 30.12.2009
  18. Offline

    dmitrijk Недавно здесь

    Регистрация:
    21.02.2010
    Сообщения:
    2
    Симпатии:
    0
    Пол:
    Мужской
    Lion2005, Удалось ли решить проблему?
     
  19. Offline

    Lion2005 Недавно здесь

    Регистрация:
    29.12.2009
    Сообщения:
    8
    Симпатии:
    0
    Пол:
    Мужской
    Нет, не получилось, пришлось подстраиваться и убрать.
     
  20. Offline

    dmitrijk Недавно здесь

    Регистрация:
    21.02.2010
    Сообщения:
    2
    Симпатии:
    0
    Пол:
    Мужской
    Только что разобрался, вернее случайно наткнулся на решение. Нужно просто удалить или переименовать файл \templates\system\css\template_rtl.css
     
  21. Offline

    Lion2005 Недавно здесь

    Регистрация:
    29.12.2009
    Сообщения:
    8
    Симпатии:
    0
    Пол:
    Мужской
    Спасибо, надеюсь в других местах не будет косяков из-за изменения этого файла (хотя поискал, понял, что этот файл отвечает за текст, который пишется справа-налево, например, арабский или иврит).

    Если есть вопросы по шаблону, задавайте, может помогу чем тоже.
     
    Последнее редактирование: 22.02.2010

Поделиться этой страницей

Загрузка...