Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 504 Ответов
  • 32578 Просмотров
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
В компоненте не используется хелпер, это будет работать без хелпера? Куда тогда код вставить? Или лучше создать хелпер, даже если пустой?
Это не хелпер компонента! Это конфигурация компонента!
Файл config.xml который лежит в administrator/ваш_компонент/config.xml
Результат работы данного файла вы можете увидеть если в любом компоненте нажмете кнопку настройки
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Смутило слово Helper в названии класса, сори.
Где лучше подключать параметры, чтобы были доступны и в модели и в шаблоне представления? Везде сразу? Как будет правильнее?
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
В смысле где? Они итак будут везде доступны, так как способ их получения через JComponentHelper универсален.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Делаю по примеру отсюда:
Код: php
$xmlstr = <<<XML
<?xml version='1.0' encoding="utf-8"?>
<orginfo>
  <param>query</param>
</orginfo>
XML;

Parse error: syntax error, unexpected T_VARIABLE in /models/load.php
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
вторая строчка по моему лишняя, я бы вобще XML через DOMDocument парсил, не надо никаких библиотек лишних. Хотя если у Joomla есть нативная поддержка simplexml..
интернет-блог: http://websiteprog.ru
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Да, в J полная поддержка simplexml, как выяснилось, J без simplexml жить не может: все xml-конфиги через simplexml парсятся.

А ларчик просто открывался: 40мин тупил! точку с запятой в конце предыдущей строки не поставил! Старею...
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Я отправил файл на ftp. Через 10 сеукнд мне нужно забрать другой файл с ftp и обработать его. Как можно реализовать тайм-аут на эти 10 секунд?
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Спасибо.

Не нашел аналог file_exists для ftp.

Думаю, придется считывать список файлов и искать в списке нужный.
« Последнее редактирование: 02.04.2014, 23:08:06 от AlekVolsk »
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Прошу спецов посмотреть и указать на грубые ошибки и слабые места в следующей функции, my_component/models/model_name.php.
Функция формирует файл XML с запросом на данные, отправляет его на ftp, через там-аут забирает с ftp xml-файл-ответ и импортирует данные из него в базу.
Спойлер
[свернуть]
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
вместо таких страшных конструкций '\''.$org_fullname.'\' , можно использовать $db->quote($org_fullname). Да и данные неплохо бы пофильтровать http://ru2.php.net/manual/ru/function.filter-var.php
интернет-блог: http://websiteprog.ru
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
$db->quote() перед двойными кавычками в переменной ставит \ - недопустимо, есть альтернативное решение?
Про фильтрацию спрашивал ранее, сделали вывод, что не обязательно - данные формируются в 1С, хотя я рассмотрю этот вопрос позднее - даже в 1С могут всякого напихать, были прецеденты.
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
у $db->quote() есть второй параметр, устанавливаете его в false и он не будет экранировать кавычки внутри строки $db->quote($org_fullname,false)
интернет-блог: http://websiteprog.ru
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
В J3 чем $db->quote() отличается от $db->q()? Блин, нет нормальной литературы по апи на русском...

В общем, разобрался: $db->q() является алиасом для $db->quote()
« Последнее редактирование: 03.04.2014, 08:16:39 от AlekVolsk »
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
В J3 чем $db->quote() отличается от $db->q()? Блин, нет нормальной литературы по апи на русском...

В общем, разобрался: $db->q() является алиасом для $db->quote()
Кстати, использование алиаса медленее, чем использование прямого метода. Было тестирование =) Литература по API готовится. Я сел за перевод документации.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Литература по API готовится. Я сел за перевод документации.
Я думаю, Вы и сами не представляете, сколько народу будет Вам Благодарно!
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Как в одном представлении/одной модели можно получить доступ к двум таблицам, без join-объединения? Где можно пример посмотреть?
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Как в одном представлении/одной модели можно получить доступ к двум таблицам, без join-объединения?
Ну если без join, то два разных селекта.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
А JTable при этом подключать?
По нажатии 2х кнопок в представлении в админке необходимо в модели в 2х разных таблицах удалить данные по условию. Условие в зависимости от нажатой кнопки в модель передается. Как при этом работает JTable? И нужен ли он вообще в данном случае?
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Можно рецензию спецов, что не так в этом запросе с безопасностью ($login вводится клиентом в представлении):
Код: php
  {
    $login = JFactory::getApplication()->input->getString('cl_login');
    $db = JFactory::getDbo();
    $query = 'DELETE FROM #__mfo_docums WHERE client = '.$db->quote($login);
    $db->setQuery($query);
    $db->query();
    $query = 'DELETE FROM #__mfo_accounts WHERE client = '.$db->quote($login);
    $db->setQuery($query);
    $db->query();
    return true;
  }
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
С безопасностью все ок, логин экранирован.

Единственное, почему всегда возвращается true? А если вдруг произойдет ошибка при удалении? И еще, если пишите под тройку, до вместо query() лучше использовать execute(), так как query объявлен deprecated.
*

passer

  • Завсегдатай
  • 1013
  • 75 / 3
$login вводится клиентом в представлении
Это значит любой пользователь, вводя произвольный логин (не обязательно свой) может удалять записи из таблиц  #__mfo_docums #__mfo_accounts. Может так и задумано, но настораживает. Ну и если таблицы связанные лучше в транзакцию обьединить.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Так будет правильно?
Код: php
  {
    $login = JFactory::getApplication()->input->getString('cl_login');
    $db = JFactory::getDbo();
    $query = 'DELETE FROM #__mfo_docums WHERE client = '.$db->quote($login);
    $db->execute($query);
    $query = 'DELETE FROM #__mfo_accounts WHERE client = '.$db->quote($login);
    $db->execute($query);
    return true;
  }
 

Плохо могу представить себе, когда может произойти ошибка при удалении. Разве если только кол-во строк в таблицах WHERE client = $db->quote($login) будет равно нулю? Но и тогда ошибки быть не должно, имхо. Как тогда правильно обрабатывать возможную ошибку?

Это значит любой пользователь, вводя произвольный логин (не обязательно свой) может удалять записи из таблиц  #__mfo_docums #__mfo_accounts. Может так и задумано, но настораживает. Ну и если таблицы связанные лучше в транзакцию обьединить.
Это в админке админ задает - при необходимости - логин пользователя и очищает из балы его данные. Во фронте аналогичные запросы будут (не реализовано пока) выполняться в личном кабинете, при авторизации либо нажатии кнопки "Обновить", когда $login будет равен логину авторизировавшегося пользователя.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Нашел на виртпросторах:
$db->setQuery($query)->execute();

Для не select-запросов, я правильно понял?
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Плохо могу представить себе, когда может произойти ошибка при удалении. Разве если только кол-во строк в таблицах WHERE client = $db->quote($login) будет равно нулю? Но и тогда ошибки быть не должно, имхо. Как тогда правильно обрабатывать возможную ошибку?
Когда юзер ввел несуществующий cl_login а ему все равно выдало что юзер удален!
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Также на виртпросторах нашел:
Код: php
				$q = 'SELECT `order_stock_handle` FROM `#__virtuemart_orderstates`';
$this->_db->setQuery($q);
$res = $this->_db->execute();
$err = $this->_db->getErrorMsg();
if(empty($res) and empty($err) ){
$q = 'UPDATE `#__virtuemart_orderstates` SET `order_stock_handle`="'.$v.'" WHERE  `order_status_code`="'.$k.'" ;';
$this->_db->setQuery($q);

if(!$this->_db->execute()){
$app = JFactory::getApplication();
$app->enqueueMessage('Error: Install alterTable '.$this->_db->getErrorMsg() );
$ok = false;
}
}
Как возможный пример обработки ошибки, пойдет?


Когда юзер ввел несуществующий cl_login а ему все равно выдало что юзер удален!
А ему ничего не выдает :) пока не выдает...
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Когда юзер ввел несуществующий cl_login а ему все равно выдало что юзер удален!
Если юзер введет несуществующий cl_login, то из таблиц будет удалено 0 строк. Проверка на наличие, существует ли пользователь, не производится. Хотя, имхо, неплохо бы добавить, но как лучше реализовать:
1. просто сделать запрос на кол-во записей 'select count(id) from #__users where username = '.$db->quote($login) и посмотреть, вернет 0 или больше?
2. или же в J имеется спец.функционал для этого?
А то действительно, ошибся в воде на символ, запрос на удаление успешен, а по факту ненужные уже данные до сих пор имеют место быть.
И, кстати, есть информация по несуществующим символам для логинов в J? Может, целесообразнее еще и так:
$db->quote(trim(strip_tags($login)))?
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Цитировать
select count(id) from #__users where username = '.$db->quote($login)
Да, так можно.

$db->quote(trim(strip_tags($login))) - нет смысла
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться