MRT69

راهنمایی برای تغیرات در کوئری قطعه کد

10 پست در این موضوع

با سلام به دوستان

من یک ماژول نمایش خبری دارم که کل مطالب سایت رو نمایش می دهد من می خوام با توجه به فیلد جدیدی که ایجاد کرده ام مطالب مثلا یک هفته اخیر یا یک ماه اخیر و ... رو نمایش دهد

تونستم شرط را ایجاد کنم و کدش رو بزنم (فقط خروجی که من برای شرطم مشخص کردم تایتل را بر می گردوند ) من می خواهم همه چیز هایی که در قطعه کد مشخص شده (از جمله تایتل - خلاصه مطلب - مجموعه و عکس و ... ) هم با این شرط زمانی نمایش داده شود

در واقع می خواهم به فرمت قدیمی که نمایش ماژول داشت این شرط بازه زمانی خودم رو اظافه کنم

در این فایل کد مربوط به شرطی که خودم نوشتم را قرار دادم (mycode )

همچنین دو فایلی که کوئری های قبلی ماژول توش قرار دارد رو هم قرار دادم (modulelayout.php _ content.php )

حالا مشکل اینجاس که نمی دونم چه طور اون کد mycode را در بین کد های (modulelayout.php _ content.php ) قرار دهم

کل ماژول را هم می توانید از این لینک دانلود کنید

Share this post


Link to post
Share on other sites
آموزش ووکامرس قالب جوملا قالب وردپرس قالب رایگان وردپرس قالب رایگان جوملا هاست نامحدود هاست جوملا هاست لاراول هاست وردپرس هاست ارزان هاست ربات تلگرام خرید دامنه آموزش ساخت ربات تلگرام با php آموزش لاراول آموزش cPanel آموزش php آموزش فرم ساز RSform آموزش ساخت ربات جذب ممبر آموزش ساخت ربات دوستیابی آموزش ساخت ربات فروشگاهی برای ووکامرس آموزش طراحی سایت داینامیک با php آموزش بخش پشتیبانی با rsticket

مشکل اولتون بخاطر کوئری هست که زدید شما گفتید فقط title رو از دیتابیس بگیره برای همین فقط اون رو نمایش میده که کد زیر هست

$query ="SELECT title FROM tfmw4_content WHERE created >'$reza2'";

به شکل زیر تغییر بدید

$query ="SELECT * FROM #__content WHERE created >'$reza2'";

Share this post


Link to post
Share on other sites

ارسال شده در (ویرایش شده)

کدهایی رو هم که نوشتید باید توی فایل content.php داخل متد getArticles تغییرات بدید نیازی هم به تغییرات زیاد فک نمیکنم باشه

فقط در متد getArticles به کوئری کد زیر رو اضافه کنید فک میکنم نتیجه دلخواه شما رو برگردونه

WHERE created >'$reza2'

ویرایش شده در توسط saber

Share this post


Link to post
Share on other sites

با تشکر از پاسختون

چون تعداد ایتم هایی که این ماژول چاپ می کنه زیاده و شامل تایتل - مجموعه - لینک عکس و ... می باشد نمی خوام از اول بنویسم که با فلان شرط حالا این چیز ها رو چاپ کن و می خوام صرفا به شرایط و تنظیمات فعلی ماژول این یک شرط رو اضافه کنم

کوئری کد رو اضافه کنم getArticle این که گفتید داخل متد

الان قطعه کد سمت متد من اینه

function getArticles($offset = 0, $limit = 0, $condition){
       $db    = JFactory::getDBO();        
   	$query =' SELECT a.id, a.fulltext, a.title, a.alias, a.title_alias, a.introtext, a.checked_out, a.checked_out_time, a.catid, a.created, a.created_by, a.created_by_alias,' .
			' CASE WHEN a.modified = 0 THEN a.created ELSE a.modified END as modified, a.modified_by, uam.name as modified_by_name,'.
			' CASE WHEN a.publish_up = 0 THEN a.created ELSE a.publish_up END as publish_up, '.
			' a.publish_down, a.attribs, a.metadata, a.metakey, a.metadesc, a.access, a.hits, a.xreference, a.featured, LENGTH(a.fulltext) AS readmore ,'.
			' CASE WHEN badcats.id is not null THEN 0 ELSE a.state END AS state,c.title AS category_title, c.path AS category_route, c.access AS category_access, c.alias AS category_alias,'.
			' CASE WHEN a.created_by_alias > " " THEN a.created_by_alias ELSE ua.name END AS author,ua.email AS author_email,contact.id as contactid,parent.title as parent_title, '.
			' parent.id as parent_id, parent.path as parent_route, parent.alias as parent_alias,ROUND( v.*****g_sum / v.*****g_count ) AS *****g, v.*****g_count as *****g_count,c.published, '.
			' CASE WHEN badcats.id is null THEN c.published ELSE 0 END AS parents_published'.				
               ' FROM #__content AS a' .			
			' LEFT JOIN #__categories AS c ON c.id = a.catid' .
			' LEFT JOIN #__users AS ua ON ua.id = a.created_by' .
			' LEFT JOIN #__users AS uam ON uam.id = a.modified_by'.
			' LEFT JOIN #__contact_details AS contact on contact.user_id = a.created_by'.
			' LEFT JOIN #__categories as parent ON parent.id = c.parent_id'.
			' LEFT JOIN #__content_*****g AS v ON a.id = v.content_id'.
			' LEFT OUTER JOIN (SELECT cat.id as id FROM #__categories AS cat '.
			' JOIN #__categories AS parent ON cat.lft BETWEEN parent.lft AND parent.rgt WHERE parent.extension = "com_content" AND parent.published != 1 GROUP BY cat.id ) AS badcats ON badcats.id = c.id '.

به انتهاش به چه شکل می تونم دستورم رو اضافه کنم مثلا به این شکل اضافه کنم ارور می دهد با دقیقا چه جوری کد رو بزنم ؟؟

				' SELECT * FROM #__content WHERE created >'$reza2'";  WHERE created >'$reza2'.

با تشکر

Share this post


Link to post
Share on other sites

من مشکلم اینجاس که نمی دونم دستور را کجای متد زیر باید قرار بدم و به چه شکلی باید بنویسم

   function getArticles($offset = 0, $limit = 0, $condition){
       $db    = JFactory::getDBO();        
   	$query =' SELECT a.id, a.fulltext, a.title, a.alias, a.title_alias, a.introtext, a.checked_out, a.checked_out_time, a.catid, a.created, a.created_by, a.created_by_alias,' .
			' CASE WHEN a.modified = 0 THEN a.created ELSE a.modified END as modified, a.modified_by, uam.name as modified_by_name,'.
			' CASE WHEN a.publish_up = 0 THEN a.created ELSE a.publish_up END as publish_up, '.
			' a.publish_down, a.attribs, a.metadata, a.metakey, a.metadesc, a.access, a.hits, a.xreference, a.featured, LENGTH(a.fulltext) AS readmore ,'.
			' CASE WHEN badcats.id is not null THEN 0 ELSE a.state END AS state,c.title AS category_title, c.path AS category_route, c.access AS category_access, c.alias AS category_alias,'.
			' CASE WHEN a.created_by_alias > " " THEN a.created_by_alias ELSE ua.name END AS author,ua.email AS author_email,contact.id as contactid,parent.title as parent_title, '.
			' parent.id as parent_id, parent.path as parent_route, parent.alias as parent_alias,ROUND( v.*****g_sum / v.*****g_count ) AS *****g, v.*****g_count as *****g_count,c.published, '.
			' CASE WHEN badcats.id is null THEN c.published ELSE 0 END AS parents_published'.				
               ' FROM #__content AS a '.	

			' LEFT JOIN #__categories AS c ON c.id = a.catid' .
			' LEFT JOIN #__users AS ua ON ua.id = a.created_by' .
			' LEFT JOIN #__users AS uam ON uam.id = a.modified_by'.
			' LEFT JOIN #__contact_details AS contact on contact.user_id = a.created_by'.
			' LEFT JOIN #__categories as parent ON parent.id = c.parent_id'.
			' LEFT JOIN #__content_*****g AS v ON a.id = v.content_id'.
			' LEFT OUTER JOIN (SELECT cat.id as id FROM #__categories AS cat '.
			' JOIN #__categories AS parent ON cat.lft BETWEEN parent.lft AND parent.rgt WHERE parent.extension = "com_content" AND parent.published != 1 GROUP BY cat.id ) AS badcats ON badcats.id = c.id '.

ممنون میشم راهنمایی کنید

Share this post


Link to post
Share on other sites

حتی کد رو به شکل زیر هم می نویسم ارور می دهد و اجرا نمیشود :

                ' FROM #__content AS a WHERE a.created > 2012-04-14' .	

کسی نمی دونه به چه صورتی باید این قسمت از کد رو بنویسم

Share this post


Link to post
Share on other sites

ماژول رو نصب کردم تست کردم با توجه به کدنویسی هایی ماژول باید شما کوئری خودتون رو در متد buildCondition اضافه کنید

این بخش از کد متد buildCondition

$condition .= ' WHERE '.implode(" AND ", $where).' ' .$order;

به شکل زیر تغییر بدید

$condition .= ' WHERE '.implode(" AND ", $where).' AND a.created > "$reza2" '. ' ' .$order;

متغییر $reza2 رو هم باید داخل متد داشته باشید

Share this post


Link to post
Share on other sites

با تشکر از پاسختون

من اون خط که گفتید رو تغیر دادم

و شرط if مربوط به متغیر reza2 v رو هم داخل متد هم قرار دادم ولی در خط زیر ارور میده :

     $max_days = $params->get('max_days', '');                

ممنون میشم راهنمایی کنید مشکل از چیه

کل کد این متد الان به این شکل


   function buildCondition($catids = null){


$reza=date("Y-m-d");
$taher = mktime(0,0,0,date("m"),date("d"),date("Y"));
$reza2=date("Y-m-d", $taher);


    $max_days = $params->get('max_days', '');                
       if (!empty($max_days)) {

           switch($max_days) {

               case '7':
                    $taher = mktime(0,0,0,date("m"),date("d")-7,date("Y"));
                   $reza2=date("Y-m-d", $taher);
                   break;



               case '14':
                    $taher = mktime(0,0,0,date("m"),date("d")-14,date("Y"));
                    $reza2=date("Y-m-d", $taher);
                   break;



               case '30':
                    $taher = mktime(0,0,0,date("m")-1,date("d"),date("Y"));
                      $reza2=date("Y-m-d", $taher);
                   break;

                   case '10000':
                    $taher = mktime(0,0,0,date("m"),date("d"),date("Y")-5);
                      $reza2=date("Y-m-d", $taher);
                   break;


                   }
           }


$db = JFactory::getDBO();

$query ="SELECT title FROM tfmw4_content WHERE created >'$reza2'";
$db->setQuery($query);
$rows = $db->loadObjectList();
	$order     = $this->buildContentOrderBy();
       $condition = ' ';  
       $where     = array();  
       $catids    = $catids != null ? (array) $catids : (array) $this->params->get('catid', '0');

       if($this->source == 'fpcontent'){
           $condition .= 	'JOIN #__content_frontpage AS fp ON fp.content_id = a.id';
       }

       $where[]    = "c.id in (".implode(',', $catids).")";
       $where[]    = "a.state > 0";
       $where[]    = "c.published = 1";

       $condition .= ' WHERE '.implode(" AND ", $where).' AND a.created > "$reza2" '. ' ' .$order;  

       return $condition;      
   }

Share this post


Link to post
Share on other sites

با تشکر با این خط کد تست کردم و درست کار کرد که حالا باید متغیر reza2 را هم بهش معرفی کنم

        $condition .= ' WHERE '.implode(" AND ", $where).' AND a.created > "2015-03-08" '. ' ' .$order;  

فقط یه سوال شما از کجا فهمیدید که دستور را باید در این متد و این مکان قرار بدهیم ؟؟؟

Share this post


Link to post
Share on other sites

باید داخل متد تنظیمات خودتون رو به این شکل فراخوانی کنید

$max_days = $this->params->get('max_days', '');

و براساس اون متغیر reza2 رو بگیرید و داخل کوئری قرار بدید...

فهمیدن متد هم با بررسی خروجی کدها و گاهی از روی تجربه هستش هر چقد بیشتر کار کنید بیشتر دستتون میاد

Share this post


Link to post
Share on other sites

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری