PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (7): « 1 [2] 3 4 5 6 7 »

> Найдено сообщений: 94
Wooorker Отправлено: 04 Января, 2015 - 12:10:58 • Тема: Ускорить работу скрипта • Форум: Вопросы новичков

Ответов: 0
Просмотров: 125
Есть перечень файлов в директории (более 15 тыс.)
Пробовал сначала данные о файлах вносить в отдельную таблицу, а потом делать выборку. Но чтобы внести данные, опять надо делать много запросов, а если одним через implode
PHP:
скопировать код в буфер обмена
  1. $sql = "INSERT INTO `".$this->_exist_image."` (`image_name`) VALUES ('". implode("','", $array)."')";

то сервер подвисает и не срабатывает, т. к. в VALUES() более 15 тыс. значений получается.
Есть идеи?

p.s.
Решил проблему вставкой VALUES по 1000 шт.
А вообще неправильный запрос был, т. к. там надо было каждый элемент VALUES брать в (), иначе получается я в одно поле пытаюсь засунуть тысячи полей.
вот так
PHP:
скопировать код в буфер обмена
  1.             $array = scandir(self::IMG_PROD);//получили массив с именами файлов
  2.             $y=0;
  3.             for($i=2, $c=count($array); $i<$c; $i++) {
  4.                 $y++;
  5.                 $filename = $array[$i];
  6.                 if(substr($filename, 0, 5)!=='full_' and substr($filename, 0, 6)!=='thumb_'){
  7.                     if($y<1000){
  8.                         $insertValues[]="('".$filename."')";
  9.                     }else{
  10.                         $sql = "INSERT INTO `".$this->_exist_image."` (`image_name`) VALUES ". implode(",", $insertValues);
  11.                         echo $sql.'<br>';
  12.                         $this->db->exec($sql);
  13.                         $insertValues=array();
  14.                         $y=0;
  15.                     }
  16.                 }
  17.             }

А кто как добавляет большие объёмы? М. б. лучше разбивать не по 1000, а по 2000, например, или 5000?
Wooorker Отправлено: 19 Декабря, 2014 - 06:25:33 • Тема: Проверить массив, полученный Simple HTML DOM на наличие элемнта массива • Форум: Вопросы новичков

Ответов: 6
Просмотров: 552
Krava пишет:
Если я не ошибаюсь, то все атрибуты есть в $block->attr.
А наличие проверить можно через count()


Да, вот count() я ещё не пробывал. Спасибо!
Wooorker Отправлено: 18 Декабря, 2014 - 19:22:15 • Тема: Проверить массив, полученный Simple HTML DOM на наличие элемнта массива • Форум: Вопросы новичков

Ответов: 6
Просмотров: 552
RickMan пишет:
isset - проверяет на существование переменной. Если вы прямо до проверки берете и создаете эту переменную то isset всегда даст true. Я не вникал в то, что вам нужно, но попробуйте посмотреть в сторону empty

пробовал и empty - результат такой же. По условию while ни каким образом не получается завершить цикл.
Если до
PHP:
скопировать код в буфер обмена
  1. if( !preg_match('#^http://#',$nextPage->href) )$nextPage->href = 'http://www.sitename.com'.$nextPage->href;
не делать проверку isset, то php создаёт по-умолчанию пустой объект. И всё-равно в этом случае проверка на empty не завершает цикл.
Wooorker Отправлено: 18 Декабря, 2014 - 14:33:13 • Тема: Проверить массив, полученный Simple HTML DOM на наличие элемнта массива • Форум: Вопросы новичков

Ответов: 6
Просмотров: 552
В целом код оказался неверен.
Но проблема с isset осталась.

Если сделать вот так
PHP:
скопировать код в буфер обмена
  1.             while (isset($nextPage))            
  2.             {
  3.                 $nextPage = $html_prod->find('div[class=ClassName] div.divName a[class=nextPage]', 0);
  4.                 if(!isset($nextPage)) break;
  5.                 if( !preg_match('#^http://#',$nextPage->href) )$nextPage->href = 'http://www.sitename.com'.$nextPage->href;
  6.                 //echo $nextPage->href.'<br>';
  7.                 $html_prod = str_get_html($this->request($nextPage->href,parse::$auth));
  8.                 echo link = '.$nextPage->href.'<br>';
  9.            }
  10.  
, то при закомментированном опять получается бесконечный цикл. Если убрать комментарий, то получается условие заданное в while не несёт никакой смысловой нагрузки.
Wooorker Отправлено: 18 Декабря, 2014 - 11:37:16 • Тема: Проверить массив, полученный Simple HTML DOM на наличие элемнта массива • Форум: Вопросы новичков

Ответов: 6
Просмотров: 552
Нужно каким-то образом проверить массив, полученный Simple HTML DOM на наличие элемнта массива. Вот такой вот цикл имеем:
PHP:
скопировать код в буфер обмена
  1. do {
  2.                 $link=nextPage->href;
  3.                 $html_prod = str_get_html($link));
  4.                 foreach($html_prod->find('div[class=ClassName] div.pageNavigation a[class=nextPage]') as $nextPage){
  5.                     if(isset($nextPage->href))
  6.                     {
  7.                         echo 'Существует ссылка на следующую страницу '.$nextPage->href.'<br>';
  8.                     }else{
  9.                         echo 'Ссылка на следующую страницу отсутствует<br>';
  10.                     }
  11.                     ob_flush();
  12.                     flush();
  13.                 }
  14.             } while (isset($nextPage->href));

В данном случае получаем бесконечный цикл. Внутри do while для тестирования введен if.
Сначало это было , затем заменил на - результат один и тот же. Если есть элемент массива, то
PHP:
скопировать код в буфер обмена
  1. echo 'Существует ссылка на следующую страницу '.$nextPage->href.'<br>';
выводит на экран соответствующее сообщение. В противном случае!!! (else) на экран должно выводиться 'Ссылка на следующую страницу отсутствует', но не выводится ничего! Т. е. нельзя получить if(!isset())=true. Соответственно цикл не может завершиться.
Я уже даже не знаю как правильно проверку провести. Приходит в голову только, что на длину строки полученный элемент проверять Улыбка
Wooorker Отправлено: 08 Декабря, 2014 - 22:31:14 • Тема: html dom или preg_match • Форум: Вопросы новичков

Ответов: 3
Просмотров: 201
CODE (html):
скопировать код в буфер обмена
  1. <a data-id="1234" data-code="code-moloko-smetana-" class="" href="/catalog/molokosmetana/">МОЛОКО/СМЕТАНА</a>
  2.  

Получил с помощью simple html dom вышеуказанную строку.
Значение href из неё можно получить просто $e->href
Можно ли подобным образом получить значение data-code ?
Если нет, то подскажите, пожалуйста, регулярное для preg_match, чтобы получить это значение.
Wooorker Отправлено: 03 Декабря, 2014 - 19:28:11 • Тема: ООП на практике • Форум: Объектно-ориентированное программирование

Ответов: 5
Просмотров: 1465
Panoptik пишет:
по всем канонам ооп вам нужно разделить импортируемые сущности и на каждую сущность создать свой класс

Я это понял. Не понял как в моем случае это реализовать. Ну отделить импорт csv от всего остального не проблема. А с остальным то что делать?
Гугл даёт лишь определения. Без конкретных примеров, связанных с подготовкой запросов, их использованием и прочим, описанным выше, боюсь я ничего не пойму.
Wooorker Отправлено: 03 Декабря, 2014 - 15:59:37 • Тема: ООП на практике • Форум: Объектно-ориентированное программирование

Ответов: 5
Просмотров: 1465
Bio man пишет:
То что ты привёл это не класс в стиле ооп, ооп даже близко нет.
Дам подсказку, работу с бд нужно вынести в отдельный класс/ы, я бы взял для этих целей ActiveRecord из yii2.

Поэтому и спрашиваю как это должно выглядеть.
yii2 - даже не представляю что это такое.

Привёл подробное описание именно для того, чтобы можно было его разложить на функции и классы.
Мне не надо детально всё разделять. Просто напишите или дайте ссылку: вот это вот так обычно делают, это - эдак и т. д.
Wooorker Отправлено: 02 Декабря, 2014 - 18:00:50 • Тема: ООП на практике • Форум: Объектно-ориентированное программирование

Ответов: 5
Просмотров: 1465
Пишу класс для актуализации товара магазина joomshopping.
В ООП не силён.
Поэтому сделал класс для подключения к базе, класс для обработки изображений и класс где собственно и происходит актуализация.
Вот его схема
1. функция function __construct, где вызываем родительскую функцию подключения к БД.
2. функция function _loadCSV($flnamecsv), где:
2.1. создаём таблицу $priceTable для импорта данных из прайса
2.2. парсим csv в ранее созданную таблицу $priceTable
2.3. получаем массив $results с теми записями из $priceTable, которых ещё нет в магазине
2.4. вставляем новые записи из $priceTable в магазин
2.5. снимаем с публикации те записи, которых нет в $priceTable
2.6. публикуем новые записи и обновляем цену у всех товаров
2.7. вставляем имена файлов изображений в соответствующую таблицу
2.8. подготавливаем все необходимые в дальнейшей работе запросы
2.8.1 выборка категории с заданными наименованиями и родительской категорией
2.8.2 определяем максимальный order для конкретной родительской категории
2.8.3 определяем id для соответствующего кода товара
2.8.4 вставляем в таблицу с категориями запись с заданными именами файла изображения, родительского id, очередного order, наименованием категории
2.8.5 в таблицу соотношения товара и категории делаем соответствующую запись
2.8.6 определяем id производителя
2.8.7 определяем максимальный order для производителя
2.8.8 вставляем в таблицу с производителями запись с соответствющими наименованием и очередным order
2.8.9 меняем в таблице с товаром id производителя на определённый в запросах ранее
2.9. для каждого элемента массива $results делаем цикл, в котором в перечисленные ранее запросы передаём параметры и выполняем соответствующие операции, а также загружаем файл изображения, делаем для него превьюшку и средних размеров изображение. Для этого вызываем функцию _downloadImage
3. функция _downloadImage($sourceName, $targetName, $quality, $width, $height)
Эта функция работает с классом обработки изображения
4. функция buildReport()
Она вызывает функцию function _loadCSV($flnamecsv) и пишет в итоге, что операция завершена.
-------------------------------- -------------------------------
Очевидно, что функцию function _loadCSV($flnamecsv), наверное, надо разбить на несколько отдельных функций, тексты запросов или даже подготовленные запросы вынести в отдельный класс? Операцию по выполнению всех этих запросов вынести в отдельную функцию? Тогда в новой функции опять заново присваивать имена таблиц БД переменным? Подскажите как сделать красиво.
Wooorker Отправлено: 27 Ноября, 2014 - 19:12:28 • Тема: Помогите побороть модуль Latest Products • Форум: CMS и фреймворки

Ответов: 2
Просмотров: 1170
DeepVarvar пишет:
Wooorker пишет:
$randomid = rand(100, 999);
Чего?


Что не так? Обычный рэндом в параметрами min и max.
Дело не в этом. До рэндома даже не доходит. Для вывода чего-либо должен начаться цикл foreach, а в массив $last_prod пуст, и откуда он должен принимать значения - совершенно непонятно.
(Добавление)
Ура! Я починил его Улыбка
Оказывается правильно смотрел в оба файла.
В итоге предположил (и это очевидно из текста), что массив с последними продуктами находится в переменной
PHP:
скопировать код в буфер обмена
  1. $rows = $product->getLastProducts($params->get('count_products', 4), $cat_arr);

соответственно в шаблоне надо её передать в массив
PHP:
скопировать код в буфер обмена
  1. foreach($last_prod as $key=>$value){
, т. е. пишем и всё работает!
Wooorker Отправлено: 27 Ноября, 2014 - 13:31:56 • Тема: Помогите побороть модуль Latest Products • Форум: CMS и фреймворки

Ответов: 2
Просмотров: 1170
Помогите побороть модуль Latest Products.
Вывожу его в позиции Slider - пусто.
За вывод его на экран отвечает templates\it_theshop2\html\mod_jshopping_latest_products\default.php.
PHP:
скопировать код в буфер обмена
  1. defined('_JEXEC') or die('Restricted access');
  2. $app = JFactory::getApplication();
  3. $document = &JFactory::getDocument();
  4. $document->addScript('templates/' . $app->getTemplate(). '/js/jquery.flexslider-min.js');
  5. $document->addStyleSheet('templates/' . $app->getTemplate(). '/css/flexslider.css');
  6. $randomid = rand(100, 999);
  7. $db = JFactory::getDBO();
  8. foreach($last_prod as $key=>$value){

В общем, насколько я понял, у меня $last_prod пустое значение.
Не могу понять из какого файла должен браться этот массив. Соответственно не могу определить в чём проблема.
пробовал дублировать код из modules\mod_jshopping_latest_products\mod_jshopping_latest_products.php
PHP:
скопировать код в буфер обмена
  1.     $product = JTable::getInstance('product', 'jshop');
  2.     $cat_str = $params->get('catids',NULL);
  3.     $rows = $product->getLastProducts($params->get('count_products', 4), $cat_arr);
  4.  

Здесь на этапе $cat_str = $params->get('catids',NULL); сайт "вываливается" в белый экран, хотя echo $params->get('catids',NULL); работает, на экране в это время появляется слово Array.
Выручайте. Осталось побороть только этот Latest Products и captcha.
Сайт http://141[dot]8[dot]196[dot]250/babysize[dot]ru
Wooorker Отправлено: 24 Ноября, 2014 - 12:13:13 • Тема: Не работает jQuery • Форум: Вопросы новичков

Ответов: 2
Просмотров: 181
Viper пишет:
jQuery как раз таки работает. Это шаблон УГ.

Ничего лучше для joomshopping не нашёл.
Viper пишет:
Смотрите на профильном форуме "лестные отзывы" Улыбка

Пока ничего особо критического, кроме вот этого плагина, не заметил.
Viper пишет:
Конкретно ваш случай это проблема с JCaption.

Я догадывался. Но после вашего сообщения стал копаться только в этом направлении. Решение нашёл в отключении caption.js. Слайдер заработал. Теперь обнаружилось, что код в javascript немного "корявый". Суть в том, что при переключении слайдов автоматом - всё в порядке. При переключении в обратном порядке в ручную (от 4 к 1) - тоже всё в порядке. А вот если вручную переключать по порядку, от 1 к 4 - два раза срабатывает код
CODE (javascript):
скопировать код в буфер обмена
  1. $(currentElement).slideUp(200).delay(600).fadeIn(600);
, что не очень красиво. Совсем даже некрасиво.
Т. к. в js совсем не копенгаген, сделал тупо. Во втором случае заменил задержку
на
CODE (javascript):
скопировать код в буфер обмена
  1. $(currentElement).slideUp(0).delay(0).fadeIn(0);
, выглядит теперь лучше, но анимация всё же отсутствует.

Как правильно исправить данный код, чтобы всё работало нормально?

CODE (javascript):
скопировать код в буфер обмена
  1. <script type="text/javascript">
  2.        
  3.   $(window).load(function() {
  4.                 var $carousel = $('#icecarousel<?php echo $module->id;?>');
  5.                 var index = 0;
  6.                 /**
  7.                 var currentElement = null;
  8.                 $('#icecarousel<?php echo $module->id;?>').find(".carousel-caption").each(function(idx){
  9.                         $(this).hide();
  10.                         if(idx == index){
  11.                                 currentElement = this;
  12.                         }
  13.                 });
  14.                 */
  15.                 function onSliding(){
  16.                         var elements = 4; // change to the number of elements in your nav
  17.                           var nav = $('.carousel-nav');
  18.                           var index = $('#icecarousel<?php echo $module->id;?>').find('.item.active').index();
  19.                           index = (index == elements - 1) ? 0 : index + 1;
  20.                           var currentElement = null;
  21.                           $('#icecarousel<?php echo $module->id;?>').find(".carousel-caption").each(function(idx){
  22.                                         if(idx == index){
  23.                                                 currentElement = this;
  24.                                         }
  25.                                 });
  26.                           var item = nav.find('a').get(index);
  27.                           nav.find('a.active').removeClass('active');
  28.                           $(item).addClass('active');
  29.                          
  30.                           if(currentElement){
  31.                                         console.log('1 Element value = '.currentElement);
  32.                                         $(currentElement).slideUp(200).delay(600).fadeIn(600);
  33.                                 }
  34.                 }
  35.                 $('#icecarousel<?php echo $module->id;?>').carousel(index);
  36.                 var nav = $('.carousel-nav');
  37.                 var item = nav.find('a').get(index);
  38.                 nav.find('a.active').removeClass('active');
  39.                 $(item).addClass('active');
  40.                 /**
  41.                 if(currentElement){
  42.                         $(currentElement).slideUp(200).delay(600).fadeIn(600);
  43.                 }
  44.        */
  45.                
  46.         $(".carousel-nav a").click(function(e){
  47.                         e.preventDefault();
  48.                         $("#icecarousel<?php echo $module->id;?>").unbind('slide');
  49.             var index = parseInt($(this).attr('data-to'));
  50.                        
  51.                        
  52.                         var currentElement = null;
  53.                         $('#icecarousel<?php echo $module->id;?>').find(".carousel-caption").each(function(idx){
  54.                                 $(this).hide();
  55.                                 if(idx == index){
  56.                                         currentElement = this;
  57.                                 }
  58.                         });
  59.            
  60.             $('#icecarousel<?php echo $module->id;?>').carousel(index);
  61.             var nav = $('.carousel-nav');
  62.             var item = nav.find('a').get(index);
  63.             nav.find('a.active').removeClass('active');
  64.             $(item).addClass('active');
  65.                        
  66.                         if(currentElement){
  67.                        
  68.                                 $(currentElement).slideUp(200).delay(600).fadeIn(600);
  69.                                
  70.                         }
  71.                         $("#icecarousel<?php echo $module->id;?>").bind('slide', function(e) {
  72.                                 onSliding();
  73.                         });
  74.         });
  75.  
  76.         $("#icecarousel<?php echo $module->id;?>").bind('slide', function(e) {
  77.                         onSliding();
  78.         });
  79.                
  80.   });
  81. </script>
Wooorker Отправлено: 23 Ноября, 2014 - 22:19:35 • Тема: Не работает jQuery • Форум: Вопросы новичков

Ответов: 2
Просмотров: 181
Играюсь с шаблоном от IceTheme. Никак не могу заставить работать кнопки в "каруселе" на главной странице.
Вот ссылка на тестовый сайт
http://141[dot]8[dot]196[dot]250/babysize[dot]ru
Здесь сверху у слайдера есть стрелки влево и вправо - они работают. А слева на самом слайдере есть 3 кнопочки (по количеству отображаемых материалов). В образце (на http://demo.icetheme.com/) они работают. У меня никак не получается их заставить работать.
В консоле ошибка отображается
CODE (htmlphp):
скопировать код в буфер обмена
  1. (anonymous function)jquery.min.js:2 v.event.dispatchjquery.min.js:2 o.handle.u

но я не уверен, что в ней дело.
И, я для тестирования в скрипте добавил
CODE (javascript):
скопировать код в буфер обмена
  1. console.log('text')
перед qQuery.bind, но в консоле всё-равно ничего не пишется.
Подскажите куда копать, где искать решения проблемы.
Wooorker Отправлено: 15 Ноября, 2014 - 21:29:44 • Тема: Хочу научиться работать с OOP и PDO. • Форум: Вопросы новичков

Ответов: 10
Просмотров: 490
[quote=DeadDay]
Начни с "Джейсон Ленгсторф - PHP и jQuery для профессионалов".
Wooorker Отправлено: 12 Ноября, 2014 - 12:37:51 • Тема: Алгоритм проверки наличия категории • Форум: Вопросы новичков

Ответов: 2
Просмотров: 185
Bio man пишет:
набросал на коленке. не уверен в работоспособности, не проверял.
и ещё не уверен насчёт next и prev в цикле, я не знаю как себя ведут эти функции внутри цикла, но по логике должны работать корректно.
в любом случае будет пища для размышлений


Вопрос я писал на ночь глядя. Утром после прочтения вашего ответа никак не мог сообразить как же ваш пример должен работать.

Вы итоге по поводу "пищи для размышлений" вы оказались правы. И только в этом.

Сам пример абсолютно не рабочий. Проблем в том, что разбор категорий не с конца надо вести, а именно с начала.
А вообще всё просто оказалось:
PHP:
скопировать код в буфер обмена
  1.                
  2. $sql="SELECT `category_id` FROM $cat_tables WHERE `category_name` = :category AND `category_parent_id` = :parentId LIMIT 1";
  3. $stmt_r = $this->db->prepare($sql);
  4. $sql="INSERT INTO $cat_tables (`category_parent_id`, `category_name`)
  5. VALUES (:parentId, :category_name)";
  6. $stm_i = $this->db->prepare($sql);
  7.  
  8. $categories = explode('\\', $row['category_name']);
  9. $parentId = 0;
  10. foreach ($categories as $category) {
  11. $stmt_r->bindParam(":category", $category, PDO::PARAM_STR);
  12. $stmt_r->bindParam(":parentId", $parentId, PDO::PARAM_INT);
  13. $stmt_r->execute();
  14. if ($cat_res = $stmt_r->fetchColumn()){
  15. //if exist category
  16. $stmt_r->closeCursor();
  17. $parentId = $cat_res[0];
  18. }else{
  19. //if not exist category
  20. $stm_i->bindParam(":category_name", $category, PDO::PARAM_STR);
  21. $stm_i->bindParam(":parentId", $parentId, PDO::PARAM_INT);
  22. $stm_i->execute();
  23. $parentId = $this->db->lastInsertId();
  24. $stm_i->closeCursor();
  25. }
  26. }

Страниц (7): « 1 [2] 3 4 5 6 7 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB