Има ли будни php разбирачи? Предлагам награда. :)

veda

Active Member
Да уточня, че съм счетоводител, а не програмист. Налага ми се от време на време да бутвам тук там по кода, къде с помощта на Google, къде по метода проба-грешка, къде от чиста авантюра...

Иска ми се да направя нещо, което, вярвам, е постижимо и не е трудно, но от снощи се боря и не мога да го докарам както трябва.

Каква е ситуацията:

WordPress сайт с коментари под статиите и избрани страници. Сложил съм и Facebook AWD плъгина, за да добавя facebook коментари (и не само). Включвайки ги имам класически коментари и под тях facebook коментари, съответно под всички статии и под страниците, за които съм активирал коментарите. Пред мен стояха две задачи:

Задача 1

Исках класическите коментари и facebook коментарите да не са едни под други, а непосредствено над самите тях да има две табчета и едното табче да показва класическите, а другото facebook коментарите. Мъчих се в началото с разни java скриптове, което вероятно е по-елегантния начин, но все нещо не сработваше, както исках, и случайно се натъкнах на един WordPress плъгин с име WordPress Post Tabs, който прави въпросните табчета с помощта на shortcode. Започнах да си играя с редакция в comments.php и успях да го докарам да се виждат табовете. Във втория таб вмъкнах shortcode-а, който "вика" facebook коментарите и всичко е точно при него. В първия таб, обаче, не мога да вкарам класическите коментари. Предполагам, защото съм в "режим shortcode" (echo do_shortcode) и искам да вкарам класически код в него (<?php comment_form(); ?>). Извинявам се за лаишката си "терминология". Та ето го кодът за табчетата:

Код:
<?php echo do_shortcode("[tab name='Коментари'][B]ТУК[/B][/tab]");
do_shortcode("[tab name='Facebook коментари'][B][AWD_comments][/B][/tab];");
echo do_shortcode("[end_tabset]");?>

Та на мястото на ТУК трябва да вкарам класическите коментари, чиито код в същия този comments.php е <?php comment_form(); ?>

Задача 2

Неприятното е, че като се опитам да подменя класическите конетари с гореописания почтиработещ код, те се появяват навсякъде. Тоест освен там, където трябва, появяват се и под страниците, за които коментарите са изключени. Виждам, че има if функция за тази цел, но нещо не мога да се справя. Задачата е как точно да се вмъкне кодът от първата задачка, така че коментарите да излизат само в страниците, за които коментарите са включени, а не във всички. Ето го и целият код на comments.php. Чини ми се, че истината е някъде долу в кода.

Код:
	<div id="comments">
	<?php if ( post_password_required() ) : ?>
		<p class="nopassword"><?php _e( 'This post is password protected. Enter the password to view any comments.', 'cc' ); ?></p>
	</div><!-- #comments -->
	<?php
			/* Stop the rest of comments.php from being processed,
			 * but don't kill the script entirely -- we still have
			 * to fully load the template.
			 */
			return;
		endif;
	?>

	<?php // You can start editing here -- including this comment! ?>

	<?php if ( have_comments() ) : ?>
		<h2 id="comments-title">
			<?php
				printf( _n( 'One thought on &ldquo;%2$s&rdquo;', '%1$s thoughts on &ldquo;%2$s&rdquo;', get_comments_number(), 'cc' ),
					number_format_i18n( get_comments_number() ), '<span>' . get_the_title() . '</span>' );
			?>
		</h2>

		<?php if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : // are there comments to navigate through ?>
		<nav id="comment-nav-above">
			<h3 class="assistive-text"><?php _e( 'Comment navigation', 'cc' ); ?></h3>
			<div class="nav-previous"><?php previous_comments_link( __( '&larr; Older Comments', 'cc' ) ); ?></div>
			<div class="nav-next"><?php next_comments_link( __( 'Newer Comments &rarr;', 'cc' ) ); ?></div>
		</nav>
		<?php endif; // check for comment navigation ?>

		<ol class="commentlist">
			<?php
				wp_list_comments();
			?>
		</ol>

		<?php if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : // are there comments to navigate through ?>
		<nav id="comment-nav-below">
			<h3 class="assistive-text"><?php _e( 'Comment navigation', 'cc' ); ?></h3>
			<div class="nav-previous"><?php previous_comments_link( __( '&larr; Older Comments', 'cc' ) ); ?></div>
			<div class="nav-next"><?php next_comments_link( __( 'Newer Comments &rarr;', 'cc' ) ); ?></div>
		</nav>

		<?php endif; // check for comment navigation ?>

	<?php
		/* If there are no comments and comments are closed, let's leave a little note, shall we?
		 * But we don't want the note on pages or post types that do not support comments.
		 */
		elseif ( ! comments_open() && ! is_page() && post_type_supports( get_post_type(), 'comments' ) ) :
	?>
		<p class="nocomments"><?php _e( 'Comments are closed.', 'cc' ); ?></p>
	<?php endif; ?>

	<?php comment_form(); ?>

</div><!-- #comments -->

Награда

Символична, но от сърце - код за 70% отстъпка от superhosting.bg (важи до края на 2012). За съжаление ми е само един, но пък съм предвидил и още една утешителна.

Благодаря!
 
Последно редактирано:
Втория ти въпрос е отговор на първият - не трябва да редактираш comments.php, а single.php

Там вътре трябва да имаш нещо от този сорт:
PHP:
    <?php if(comments_open()) { ?>

		<?php comments_template(); // show comments ?>
        
    <?php } ?>
Т.е. функцията, която ти извиква кода за коментарите. Иначе казано самата в single.php трябва да имаш нещо от този род:
PHP:
    <?php if(comments_open()) { ?>

                <?php echo do_shortcode('[tab name="Коментари"] '. comments_template(); .' [/tab]');
                do_shortcode("[tab name='Facebook коментари'][AWD_comments][/tab];");
                echo do_shortcode("[end_tabset]");?>

    <?php } ?>

Не съм го пробвал, но след малко ще го направя.

Едит - грешно е. Ще получиш грешка 500. Чакай малко.
 
Последно редактирано:
От: Има ли будни php разбирачи? Предлагам награда. :)

Огромни благодарности на cybervn, който ми помогна с решението и на двете задачки по Skype!!!

Благодаря и на ktomov за отзивчивостта. Пускам му на лични един промокод за 5% отстъпка от цената на автоаксесоари и части от http://avto.bim.bg/.

(offtopic: Изгоря ми крушката на мигача (от оранжевите крушки) и си поръчах една от там за 3лв (!!!) и какво получих:
1. обаждане по телефона за потвърждение на поръчката (!!!)
2. безплатна доставка (!!!)
3. данъчна фактура (!!!)
4. въпросният промокод за 5% отстъпка (!!!)
Хвала на такЪви органи, дет се вика)

Хвала и на всички добри хора в този форум!

Лека вечер! :)
 
Хах :) Нямаше нужда от кода, за такива като мен има таксита. Иначе бихте ли споделили как решихте проблема?
 
От: Има ли будни php разбирачи? Предлагам награда. :)

Здравей,

В крайна сметка не сме бутали нищо по page.php и post.php (single.php), а само в comments.php. Не съм съвсем наясно какво конкретно реши проблема (както споменах, не съм програмист), но едно от нещата, които със сигурност знам е, че заместихме shotcode-вете на плъгина с целите им такива (ако мога така да се изразя) и comments.php сега изглежда ето така:

Код:
<div id="comments">
 <?php if ( post_password_required() ) : ?>
  <p class="nopassword"><?php _e( 'This post is password protected. Enter the password to view any comments.', 'cc' ); ?></p>
 </div><!-- #comments -->
 <?php
   /* Stop the rest of comments.php from being processed,
    * but don't kill the script entirely -- we still have
    * to fully load the template.
    */
   return;
  endif;
 ?>

 <?php // You can start editing here -- including this comment! ?>

 <?php if ( have_comments() ) : ?>

  <h2 id="comments-title">
   <?php
    printf( _n( 'One thought on &ldquo;%2$s&rdquo;', '%1$s thoughts on &ldquo;%2$s&rdquo;', get_comments_number(), 'cc' ),
     number_format_i18n( get_comments_number() ), '<span>' . get_the_title() . '</span>' );
   ?>
  </h2>

  <?php if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : // are there comments to navigate through ?>
  <nav id="comment-nav-above">
   <h3 class="assistive-text"><?php _e( 'Comment navigation', 'cc' ); ?></h3>
   <div class="nav-previous"><?php previous_comments_link( __( '&larr; Older Comments', 'cc' ) ); ?></div>
   <div class="nav-next"><?php next_comments_link( __( 'Newer Comments &rarr;', 'cc' ) ); ?></div>
  </nav>
  <?php endif; // check for comment navigation ?>

  <ol class="commentlist">
   <?php
    wp_list_comments();
   ?>
  </ol>

  <?php if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : // are there comments to navigate through ?>
  <nav id="comment-nav-below">
   <h3 class="assistive-text"><?php _e( 'Comment navigation', 'cc' ); ?></h3>
   <div class="nav-previous"><?php previous_comments_link( __( '&larr; Older Comments', 'cc' ) ); ?></div>
   <div class="nav-next"><?php next_comments_link( __( 'Newer Comments &rarr;', 'cc' ) ); ?></div>
  </nav>

  <?php endif; // check for comment navigation ?>

 <?php
  /* If there are no comments and comments are closed, let's leave a little note, shall we?
   * But we don't want the note on pages or post types that do not support comments.
   */
  elseif ( ! comments_open() && ! is_page() && post_type_supports( get_post_type(), 'comments' ) ) :
 ?>
  <p class="nocomments"><?php _e( 'Comments are closed.', 'cc' ); ?></p>
 <?php endif; ?>
 <?php  if ( comments_open() ) : ?>
<!--Ново!--> 
<div class="ui-tabs ui-widget ui-widget-content ui-corner-all" id="tabs_23_0">
<ul class="ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"><li class="ui-state-default ui-corner-top ui-tabs-selected ui-state-active"><a href="#tabs_23_0_0">Коментари</a></li><li class="ui-state-default ui-corner-top"><a href="#tabs_23_0_1">Facebook коментари</a></li></ul>

<div class="ui-tabs-panel ui-widget-content ui-corner-bottom" id="tabs_23_0_0">
<!--Ново до тук !-->
 <?php comment_form(); ?>
<!--Ново!-->  
</div>

<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tabs_23_0_1"><p><? echo do_shortcode("[AWD_comments]"); ?></p></div>

<div class="cf5_wpts_cl"></div><div class="cf5_wpts_cr"></div>

</div>
<!--Ново до тук !-->
 <?php endif; ?>

<script type="text/javascript">
   jQuery(function() {var $tabs_23_0 = jQuery("#tabs_23_0").tabs({ cookie: { expires: 30 } }); //getter
     var cookie = jQuery("#tabs_23_0").tabs( "option", "cookie" );
     //setter
     jQuery("#tabs_23_0").tabs( "option", "cookie", { expires: 30 } );})</script>

</div><!-- #comments -->
 
От: Има ли будни php разбирачи? Предлагам награда. :)

Можеше да кажеш, с чисти думи, че ти трябва помощ, а не да ги представяш като задачи за програмисти.
 
От: Има ли будни php разбирачи? Предлагам награда. :)

Супер щедрата награда: Промо код за 5% (пет процента) отстъпка и безплатен линк към онлайн магазина ти!
Гответе се за следващия път - за награда остана само изгорялата крушка от мигача :D
 
От: Има ли будни php разбирачи? Предлагам награда. :)

Недей така бе гъншот, той е просто човека гатанка - Гатьо Гатов

kom3.avi_000113480.jpg



Виж кви готини задачки дава, сега на мен ми се ще някой да ми направи един сайт за имоти, мисля да пусна и аз една две задачки :D
 
От: Има ли будни php разбирачи? Предлагам награда. :)

Ни най-малко съм искал да акцентирам на някаква награда, нито че провеждам конкурс, поставям задачи или каквото и да било подобно. Съвсем интуитивно написах и пуснах темата, с която помолих за помощ и съответно двама съфорумци ми помогнаха, точно както и аз се старая да помагам в раздела за правни и счетоводни въпроси. И понеже тази помощ беше важна за мен ми се стори, че няма нищо лошо да предложа тези промокодове, които може би така или иначе нямаше да ползвам. Странното е, че най-вероятно, ако не бях предложил нищо, нямаше да има и такива отзиви. Както и да е, приемам го като някаква кофти национална черта...

Магазинът не е мой и не познавам собствениците. Просто използвах темата да изкажа положителните си впечатления като потребител. Нищо чудно магазинът да е на някой юзър от форума...
 
От: Има ли будни php разбирачи? Предлагам награда. :)

Виж сега, кофти черта е да искаш да ти се помага, и да го извъртяш като "ЗАДАЧКИ", вместо да напишеш ясно и точно, че ти трябва помощ, определено нямаше да има такива отзиви, значи по тази логика, имаме 1 добра българска черта, щом има поне един буден, който да акцентира върху "задачките" ти и "награда" всъщност "награда" се дава ако някой спечели нещо, в случая трябва и заплащане за такива "задачки", въобще не ми е на акъла да ти казвам, че това трябваше да бъде като "търся програмист за еди какво си" - ни най-малко, но просто няма смисъл да пускаш така темата, да предлагаш 'задачки' - които всъщност не са никакви задачи, а търсиш помощ, а пък за думата "награда" - аз няма да коментирам, мисля че съм ясен.
 
От: Има ли будни php разбирачи? Предлагам награда. :)

Както и по-горе казах, темата я написах съвсем интуитивно. Тоест, това което ми беше главата в онзи момент, съм го изложил 1:1, като все пак съм се постарал да бъде разбираемо, защото съм се изморил да чета дълги постове, събрани в един единствен параграф. Извинявам се на тези, които ги е подразнила някоя подчертана дума.

Задачи не съм поставял на никого. Ако прочетете отново внимателно поста, ще забележите, че съм написал: Пред мен стояха две задачи: и съответно съм ги изложил.

Кодовете съм ги написал в темата с идеята, че след време могат да бъдат полезни на някой друг. Определено щеше да ми е по-лесно да напиша: "Търся помощ за php, пишете ми на лични или скайп", но смятам, че идеята на форумите е "малко по-" друга. ;)
 
От: Има ли будни php разбирачи? Предлагам награда. :)

Нямам намерение да се заяждам с когото и да било, още повече пък и публично. Предлагам да прекратим дискусията. Отново благодаря на тези, които помогнаха. Лека и спокойна нощ на всички!
 
Не знам за какво спорите, а и не ме интересува. Благодаря на veda, че сподели решението на проблема, макар да си е заплатил за това по някакъв начин.

Та ето я и частта, която на мен няма да ми е от полза, та ако друг има нужда: "Ето това е промокодът за http://www.avto.bim.bg/: fo5tefyi"

@gunshot - тук никой не е длъжен да отговаря в темата, аз писах защото мислех, че мога да се справя с проблема, а и имах свободно време. Наградата не ме интересуваше. Виждам си регистриран от доста време, толкова ли рядко посещаваш форума, та не разбра възможностите му?
 

Горе