Русскоязычный форум, посвященный фреймворку Kohana

Все о фреймворке Kohana. Обсуждение уроков, документации.
Текущее время: 27 апр 2024, 01:56

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу 1, 2, 3  След.
Автор Сообщение
СообщениеДобавлено: 20 авг 2013, 12:40 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 11 апр 2013, 14:09
Сообщения: 162
Не думайте что я не был в гугле или в оф. api.
Положил библиотеку в папку vendor (в корне директории с коханой), делаю:
Код:
$path = Kohana::find_file('vendor', '/phpdocx/classes/CreateDocx', 'inc');

а она мне тупо ничего не возвращает. Вообще как будто и не работает этот метод Kohana::find_file. В чем может быть проблема?
Дальше я хотел сделать так:
Код:
require $path;

И уже работать с библиотекой. Но не получается. Не находит нужный файл или вообще не работает Kohana::find_file. В чем может быть проблема?

_________________
Они плакали и кололись, но продолжали есть кактус!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 авг 2013, 12:59 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
расширение файла inc? а как он выполняться будет без доп деректив. слеш вначале лишний.

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 авг 2013, 16:01 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 11 апр 2013, 14:09
Сообщения: 162
А где эти директивы прописать нужно? Я так понимаю в главном файле index.php строка 32:
Код:
define('EXT', '.php');

Но как туда еще одно разрешение добавить (что бы .php осталось в деле как прежде)? Дело в том, что там вся библиотека из .inc файлов состоит. Посмотрите PHPdocX.
Или это директивы в настройках апача нужно прописывать? Хотя этот вариант можно смело отметать, ибо на этом же сервере в соседнем домене нативный php работает с .inc прекрасно. Тестировал библиотеку голым php без фреймворков, все работает на "ура". И потом, не зря у метода Kohana::find_file есть необязательный параметр для указания расширения. В api, там как раз пример приводиться для css файла.

_________________
Они плакали и кололись, но продолжали есть кактус!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 авг 2013, 16:06 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 11 апр 2013, 14:09
Сообщения: 162
Цитата:
а как он выполняться будет без доп деректив

Я еще не пытаюсь его выполнять. Мне хотя бы путь до него получить при помощи Kohana::find_file. Этот метод тупо не работает.
Код:
$path = Kohana::find_file('vendor', 'phpdocx/classes/CreateDocx', 'inc');
                /*$docx = new CreateDocx();
                $docx->addText('Hello PHPdocX on Kohana 3.3');
                $docx->createDocx(APPPATH.'tmp/test');*/
                /*$this->template->meta = '<meta http-equiv="refresh" content="0;url=http://ecollege.my/tmp/%D0%A7%D0%B0%D1%81%D1%82%D0%BD%D0%BE%D0%B5%20%D1%83%D1%87%D1%80%D0%B5%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5.docx" />';*/
                $this->template->footer = $path;

Переменная $path пустая.

_________________
Они плакали и кололись, но продолжали есть кактус!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 авг 2013, 16:24 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
расширения исполняемых файлов прописываются в настройках сервера(по умолчанию php и phtml) т.е. если ты сделаешь test.txt, а в нем php код, то он, в отличии от test.php, при include\require будет вставлен как текст, а не будет интерпретирован как код.
Kohana::find_file не сможет найти файл в `DOCROOT.vendor` - он ищет в папке приложения, модулей и системы, т.к. тебе известен путь к данному файлу, то смысла гонять лишний код нет - сделай include_once `DOCROOT.vendor/phpdocx/classes/CreateDocx.inc`

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 авг 2013, 23:22 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 11 апр 2013, 14:09
Сообщения: 162
В общем-то, спасибо за подсказки. Файл включил, но теперь сама библиотека никак не хочет работать.
Ругается след. образом
Цитата:
ErrorException [ Fatal Error ]: Call to undefined method Debug::getInstance()

Проверил, действительно, в файле CreateDocx происходит вызов этого метода в указанной в ошибке строке:
Код:
$this->_debug = Debug::getInstance();

В самом верху этого файла (CreateDocx), есть след. включения:
Код:
require_once dirname(__FILE__) . '/AutoLoader.php';
AutoLoader::load();
require_once dirname(__FILE__) . '/Phpdocx_config.php';

Я уже переименовал расширения всех файлов на php. Проверил в соседнем домене нативным php, в самом коде библиотеке во всех местах где использовалось включение файлов с .inc, тоже переписал в .php, там все работает.
Теперь в Kohana, как я понял не отрабатывает метод AutoLoader::load();
Вот его код (Автолоадера):
Код:
<?php

/**
 * Autoloader
 *
 * @category   Phpdocx
 * @package    loader
 * @copyright  Copyright (c) Narcea Producciones Multimedia S.L.
 *             (http://www.2mdc.com)
 * @license    LGPL
 * @version    3.0
 * @link       http://www.phpdocx.com
 * @since      File available since Release 3.0
 */
class AutoLoader
{

    /**
     * Main tags of relationships XML
     *
     * @access public
     * @static
     */
    public static function load()
    {
        spl_autoload_register(array('AutoLoader', 'autoloadGenericClasses'));
        spl_autoload_register(array('AutoLoader', 'autoloadPhpdocx'));
        spl_autoload_register(array('AutoLoader', 'autoloadLog4php'));
        spl_autoload_register(array('AutoLoader', 'autoloadTcpdf'));
        spl_autoload_register(array('AutoLoader', 'autoloadPdf'));
        spl_autoload_register(array('AutoLoader', 'autoloadDompdf'));
        spl_autoload_register(array('AutoLoader', 'autoloadMht'));
    }

    /**
     * Autoload dompdf
     *
     * @access public
     * @param string $className Class to load
     */
    public static function autoloadDompdf($className)
    {
        $pathDompdf = dirname(__FILE__) . '/../pdf/dompdf_config.inc.php';
        if (file_exists($pathDompdf)) {
            require_once $pathDompdf;
        }
    }

    /**
     * Autoload phpdocx
     *
     * @access public
     * @param string $className Class to load
     */
    public static function autoloadGenericClasses($className)
    {
        $pathPhpdocx = dirname(__FILE__) . '/' . $className . '.php';
        if (file_exists($pathPhpdocx)) {
            require_once $pathPhpdocx;
        }
    }

    /**
     * Autoload log4php
     *
     * @access public
     * @param string $className Class to load
     */
    public static function autoloadLog4php($className)
    {
        $pathLogphp = dirname(__FILE__) . '/../lib/log4php/'
            . $className . '.php';
        if (file_exists($pathLogphp)) {
            require_once $pathLogphp;
        }
    }

    /**
     * Autoload mht
     *
     * @access public
     * @param string $className Class to load
     */
    public static function autoloadMht($className)
    {
        $pathMht = dirname(__FILE__) . '/../lib/'
            . $className . '.php';
        if (file_exists($pathMht)) {
            require_once $pathMht;
        }
    }

    /**
     * Autoload phpdocx
     *
     * @access public
     * @param string $className Class to load
     */
    public static function autoloadPdf($className)
    {
        $pathPDF = dirname(__FILE__) . '/pdf/' . $className . '.inc';
        if (file_exists($pathPDF)) {
            require_once $pathPDF;
        }
        $pathTCPDF = dirname(__FILE__) . '/../pdf/tcpdf/tcpdf.php';
        if (file_exists($pathTCPDF)) {
            require_once $pathTCPDF;
        }
        $pathFPDI = dirname(__FILE__) . '/../lib/fpdi/fpdi.php';
        if (file_exists($pathFPDI)) {
            require_once $pathFPDI;
        }
    }

    /**
     * Autoload phpdocx
     *
     * @access public
     * @param string $className Class to load
     */
    public static function autoloadPhpdocx($className)
    {
        $pathPhpdocx = dirname(__FILE__) . '/docx/' . $className . '.php';
        if (file_exists($pathPhpdocx)) {
            require_once $pathPhpdocx;
        }
    }

    /**
     * Autoload Tcpdf
     *
     * @access public
     * @param string $className Class to load
     */
    public static function autoloadTcpdf($className)
    {
        $pathTcpdf = dirname(__FILE__) . '/../pdf/class.tcpdf.php';
        if (file_exists($pathTcpdf)) {
            require_once $pathTcpdf;
        }
    }

}

Как я понимаю, проблема в работе след. метода:
Код:
public static function load()
    {
        spl_autoload_register(array('AutoLoader', 'autoloadGenericClasses'));
        spl_autoload_register(array('AutoLoader', 'autoloadPhpdocx'));
        spl_autoload_register(array('AutoLoader', 'autoloadLog4php'));
        spl_autoload_register(array('AutoLoader', 'autoloadTcpdf'));
        spl_autoload_register(array('AutoLoader', 'autoloadPdf'));
        spl_autoload_register(array('AutoLoader', 'autoloadDompdf'));
        spl_autoload_register(array('AutoLoader', 'autoloadMht'));
    }

Самое сомнительное здесь это использование spl_autoload_register(); Уместно ли использование этой замечательной функции в Kohana? Или т.к. она уже используется в кохане (умные поправят, возможно и не используется аутолоадер), то поэтому сей autoloader и не работает?

_________________
Они плакали и кололись, но продолжали есть кактус!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 авг 2013, 23:36 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
Класс Debud содержится в Кохане, поэтому CreateDocx вместо своего загружает кохановский в котором естественно совсем другие методы. подобные конфликты решаются с помощью namespace

http://php.net/manual/ru/language.namespaces.php

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 авг 2013, 23:51 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
Код элементарный. Не понимаю, что тут сложного...

Вы уж потрудитесь, потратьте несколько часов, если вы совсем новичок в этом.
Без понимания принципа автозагрузки классов вам будет тяжело, если конечно вы себя видите PHP программистом. Этот код очень легко переписать, адаптировать под Kohana, если он вас смущает в том виде, в котором есть. Хотя меня, откровенно тоже смущает ) я бы слегка переписал его так, чтоб можно было использовать подобным образом:
Код:

    public static function load
()
    {
        spl_autoload_register(array(
                'AutoLoader' => 'autoloadGenericClasses',
                'AutoLoader' => 'autoloadPhpdocx',
                'AutoLoader' => 'autoloadLog4php',
                'AutoLoader' => 'autoloadTcpdf',
                'AutoLoader' => 'autoloadPdf',
                'AutoLoader' => 'autoloadDompdf',
                'AutoLoader' => 'autoloadMht'
        ));
    } 

или даже вот так
Код:

    public static function load
()
    {
        spl_autoload_register('AutoLoader', array(
                'autoloadGenericClasses',
                'autoloadPhpdocx',
                'autoloadLog4php',
                'autoloadTcpdf',
                'autoloadPdf',
                'autoloadDompdf',
                'autoloadMht'
        ));
    } 


по моему это очевидно.

А вообще, было бы конечно не плохо, если бы вы не поленились, и преобразовали бы это в полноценный Kohana модуль. Тем более, что делов тут на пол вечера максиму

Ссылки на тему:
Автоматическая загрузка классов
spl_autoload_register() предоставляет более гибкую альтернативу для автоматической загрузки классов
Автозагрузчик классов PHP, Autoload How - To
Автозагрузка классов в PHP с использованием SPL
SplClassLoader implementation that implements the technical interoperability standards for PHP 5.3 namespaces and class names

Некоторые из приведённых выше автозагрузчиков используют namespaces (пространства имён), но я не думаю, что кого-то это может привести затруднение.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 21 авг 2013, 00:00 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
Я посмотрел эту библиотеку, это огрызок от платной версии http://www.phpdocx.com/documentation/features не понимаю зачем с ним вообще возиться.
Посмотрел доки по данному формату http://fritool.ru/2013/07/php-docx/ , хэлпер можно и самому сделать, получилось бы быстрее.
Но если лень, то нашлись:
https://github.com/djpate/docxgen
https://github.com/nagilum/DOCx
http://phpword.codeplex.com/
http://www.phpclasses.org/package/8175- ... mplate.htm
http://www.phpclasses.org/package/3553- ... jects.html

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 21 авг 2013, 00:18 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 11 апр 2013, 14:09
Сообщения: 162
На счет огрызка вы правы. Меня эти танцы с бубном вокруг него уже доконали и еще хуже всего то, что основную задачу он не решит. Генерация docx, xlsx и pdf по шаблону который пользователь создал при помощи MS Office Word/Excell. Видимо придется писать модуль/хелпер. Только я в этом не селен. В принципе, ничего сложного нет, сам формат docx располагает к этому. Спасибо за информацию. Выложу в эту тему результат (если он конечно будет).

_________________
Они плакали и кололись, но продолжали есть кактус!


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 4 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Все о фреймворке Kohana  | 
Powered by phpBB® Forum Software © phpBB Group